]> git.basschouten.com Git - openhab-addons.git/blob
cc5765bdc5dd88583dcb610b33ff04499f0e9180
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
7  * This program and the accompanying materials are made available under the
8  * terms of the Eclipse Public License 2.0 which is available at
9  * http://www.eclipse.org/legal/epl-2.0
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.teleinfo.internal.reader.io;
14
15 import static org.junit.jupiter.api.Assertions.*;
16
17 import java.io.FileInputStream;
18 import java.time.Month;
19
20 import org.eclipse.jdt.annotation.NonNullByDefault;
21 import org.junit.jupiter.api.Test;
22 import org.openhab.binding.teleinfo.internal.TeleinfoBindingConstants;
23 import org.openhab.binding.teleinfo.internal.data.Frame;
24 import org.openhab.binding.teleinfo.internal.data.FrameType;
25 import org.openhab.binding.teleinfo.internal.reader.io.serialport.Label;
26 import org.openhab.binding.teleinfo.internal.serial.TeleinfoTicMode;
27 import org.openhab.binding.teleinfo.util.TestUtils;
28 import org.openhab.core.library.types.DateTimeType;
29
30 /**
31  *
32  * @author Nicolas SIBERIL - Initial contribution
33  */
34 @NonNullByDefault
35 public class TeleinfoInputStreamTest {
36
37     @Test
38     public void testReadNextFrameCbetmBase1() throws Exception {
39         try (TeleinfoInputStream in = new TeleinfoInputStream(
40                 new FileInputStream(TestUtils.getTestFile("cbetm-base-option-1.raw")), false,
41                 TeleinfoTicMode.HISTORICAL)) {
42             Frame frame = in.readNextFrame();
43
44             assertNotNull(frame);
45             assertEquals(FrameType.CBETM_LONG_BASE, frame.getType());
46             assertEquals("XXXXXXXXXXXX", frame.get(Label.ADCO));
47             assertEquals(20, frame.getAsInt(Label.ISOUSC));
48             assertEquals(1181243, frame.getAsInt(Label.BASE));
49             assertEquals("TH..", frame.get(Label.PTEC));
50             assertEquals(0, frame.getAsInt(Label.IINST1));
51             assertEquals(2, frame.getAsInt(Label.IINST2));
52             assertEquals(0, frame.getAsInt(Label.IINST3));
53             assertEquals(26, frame.getAsInt(Label.IMAX1));
54             assertEquals(18, frame.getAsInt(Label.IMAX2));
55             assertEquals(27, frame.getAsInt(Label.IMAX3));
56             assertEquals(7990, frame.getAsInt(Label.PMAX));
57             assertEquals(540, frame.getAsInt(Label.PAPP));
58             assertEquals("00", frame.get(Label.PPOT));
59         }
60     }
61
62     @Test
63     public void testReadNextFrameCbemmEvoIccHc1() throws Exception {
64         try (TeleinfoInputStream in = new TeleinfoInputStream(
65                 new FileInputStream(TestUtils.getTestFile("cbemm-evo-icc-hc-option-1.raw")), false,
66                 TeleinfoTicMode.HISTORICAL)) {
67             Frame frame = in.readNextFrame();
68
69             assertNotNull(frame);
70             assertEquals(FrameType.CBEMM_ICC_HC, frame.getType());
71             assertEquals("XXXXXXXXXXXX", frame.get(Label.ADCO));
72             assertEquals(30, frame.getAsInt(Label.ISOUSC));
73             assertEquals(6906827, frame.getAsInt(Label.HCHC));
74             assertEquals(7617931, frame.getAsInt(Label.HCHP));
75             assertEquals("HP..", frame.get(Label.PTEC));
76             assertEquals(3, frame.getAsInt(Label.IINST));
77             assertEquals(44, frame.getAsInt(Label.IMAX));
78             assertEquals(680, frame.getAsInt(Label.PAPP));
79             assertNull(frame.get(Label.ADPS));
80             assertEquals("A", frame.get(Label.HHPHC));
81         }
82     }
83
84     @Test
85     public void testReadNextFrameCbetmEjp1() throws Exception {
86         try (TeleinfoInputStream in = new TeleinfoInputStream(
87                 new FileInputStream(TestUtils.getTestFile("cbetm-ejp-option-1.raw")), false,
88                 TeleinfoTicMode.HISTORICAL)) {
89             Frame frame = in.readNextFrame();
90
91             assertNotNull(frame);
92             assertEquals(FrameType.CBETM_LONG_EJP, frame.getType());
93             assertEquals("XXXXXXXXXX", frame.get(Label.ADCO));
94             assertEquals(30, frame.getAsInt(Label.ISOUSC));
95             assertEquals(1111111, frame.getAsInt(Label.EJPHN));
96             assertEquals(2222222, frame.getAsInt(Label.EJPHPM));
97             assertNull(frame.get(Label.PEJP));
98             assertEquals("HN..", frame.get(Label.PTEC));
99             assertEquals(10, frame.getAsInt(Label.IINST1));
100             assertEquals(5, frame.getAsInt(Label.IINST2));
101             assertEquals(8, frame.getAsInt(Label.IINST3));
102             assertEquals(38, frame.getAsInt(Label.IMAX1));
103             assertEquals(42, frame.getAsInt(Label.IMAX2));
104             assertEquals(44, frame.getAsInt(Label.IMAX3));
105             assertEquals(17480, frame.getAsInt(Label.PMAX));
106             assertEquals(5800, frame.getAsInt(Label.PAPP));
107             assertEquals("00", frame.get(Label.PPOT));
108         }
109     }
110
111     @Test
112     public void testReadNextFrameCbemmEvoIccTempo1() throws Exception {
113         try (TeleinfoInputStream in = new TeleinfoInputStream(
114                 new FileInputStream(TestUtils.getTestFile("cbemm-evo-icc-tempo-option-1.raw")), false,
115                 TeleinfoTicMode.HISTORICAL)) {
116             Frame frame = in.readNextFrame();
117
118             assertNotNull(frame);
119             assertEquals(FrameType.CBEMM_ICC_TEMPO, frame.getType());
120             assertEquals("XXXXXXXXXXXX", frame.get(Label.ADCO));
121             assertEquals(45, frame.getAsInt(Label.ISOUSC));
122             assertEquals(2697099, frame.getAsInt(Label.BBRHCJB));
123             assertEquals(3494559, frame.getAsInt(Label.BBRHPJB));
124             assertEquals(41241, frame.getAsInt(Label.BBRHCJW));
125             assertEquals(194168, frame.getAsInt(Label.BBRHPJW));
126             assertEquals(0, frame.getAsInt(Label.BBRHCJR));
127             assertEquals(89736, frame.getAsInt(Label.BBRHPJR));
128             assertEquals("HPJR", frame.get(Label.PTEC));
129             assertEquals("----", frame.get(Label.DEMAIN));
130             assertEquals(3, frame.getAsInt(Label.IINST));
131             assertEquals(37, frame.getAsInt(Label.IMAX));
132             assertEquals(620, frame.getAsInt(Label.PAPP));
133             assertFalse(frame.getLabelToValues().containsKey(Label.ADPS));
134             assertNull(frame.get(Label.ADPS));
135             assertEquals("Y", frame.get(Label.HHPHC));
136             assertEquals("B", frame.getProgrammeCircuit1());
137             assertEquals("P2", frame.getProgrammeCircuit2());
138         }
139     }
140
141     @Test
142     public void testReadNextFrameCbemmEvoIccBase1() throws Exception {
143         try (TeleinfoInputStream in = new TeleinfoInputStream(
144                 new FileInputStream(TestUtils.getTestFile("cbemm-evo-icc-base-option-1.raw")), false,
145                 TeleinfoTicMode.HISTORICAL)) {
146             Frame frame = in.readNextFrame();
147             assertNotNull(frame);
148             assertEquals(FrameType.CBEMM_ICC_BASE, frame.getType());
149             assertEquals("031762120162", frame.get(Label.ADCO));
150             assertEquals(30, frame.getAsInt(Label.ISOUSC));
151             assertEquals(190575, frame.getAsInt(Label.BASE));
152             assertEquals("TH..", frame.get(Label.PTEC));
153             assertEquals(1, frame.getAsInt(Label.IINST));
154             assertEquals(90, frame.getAsInt(Label.IMAX));
155             assertEquals(270, frame.getAsInt(Label.PAPP));
156             assertNull(frame.get(Label.ADPS));
157         }
158     }
159
160     @Test
161     public void testInvalidADPSgrouplineWithAutoRepairActivated() throws Exception {
162         try (TeleinfoInputStream in = new TeleinfoInputStream(
163                 new FileInputStream(TestUtils.getTestFile("invalid-adps-groupline.raw")), true,
164                 TeleinfoTicMode.HISTORICAL)) {
165             Frame frame = in.readNextFrame();
166
167             assertNotNull(frame);
168             assertEquals(Frame.class, frame.getClass());
169             assertEquals(37, frame.getAsInt(Label.ADPS));
170         }
171     }
172
173     @Test
174     public void testReadNextFrameLinkyTICModeStandardThreePhaseProd() throws Exception {
175         try (TeleinfoInputStream in = new TeleinfoInputStream(
176                 new FileInputStream(TestUtils.getTestFile("linky-tic-mode-standard-three-phase-prod.raw")), false,
177                 TeleinfoTicMode.STANDARD, true)) {
178             Frame frame = in.readNextFrame();
179             assertNotNull(frame);
180             assertEquals(FrameType.LSMT_PROD, frame.getType());
181             assertEquals("123456789012", frame.get(Label.ADSC));
182             assertEquals("02", frame.get(Label.VTIC));
183             assertEquals("", frame.get(Label.DATE));
184             assertEquals("     TEMPO      ", frame.get(Label.NGTF));
185             assertEquals("    HP  BLEU    ", frame.get(Label.LTARF));
186             assertEquals(11604109, frame.getAsInt(Label.EAST));
187             assertEquals(2741488, frame.getAsInt(Label.EASF01));
188             assertEquals(18, frame.getAsInt(Label.PCOUP));
189             assertEquals("2021-04-14T08:26:25", frame.getAsDateTime(Label.DATE));
190             DateTimeType dateTime = DateTimeType.valueOf(frame.getAsDateTime(Label.DATE));
191             assertEquals(2021, dateTime.getZonedDateTime().getYear());
192             assertEquals(Month.APRIL, dateTime.getZonedDateTime().getMonth());
193             assertEquals(14, dateTime.getZonedDateTime().getDayOfMonth());
194             assertEquals(8, dateTime.getZonedDateTime().getHour());
195             assertEquals(26, dateTime.getZonedDateTime().getMinute());
196             assertEquals(25, dateTime.getZonedDateTime().getSecond());
197
198             assertNotEquals(TeleinfoBindingConstants.NOT_A_CHANNEL, Label.CCASN.getTimestampChannelName());
199             assertEquals("2021-04-14T08:00:00", frame.getAsDateTime(Label.CCASN));
200             dateTime = DateTimeType.valueOf(frame.getAsDateTime(Label.CCASN));
201             assertEquals(2021, dateTime.getZonedDateTime().getYear());
202             assertEquals(Month.APRIL, dateTime.getZonedDateTime().getMonth());
203             assertEquals(14, dateTime.getZonedDateTime().getDayOfMonth());
204             assertEquals(8, dateTime.getZonedDateTime().getHour());
205             assertEquals(0, dateTime.getZonedDateTime().getMinute());
206             assertEquals(0, dateTime.getZonedDateTime().getSecond());
207         }
208     }
209
210     @Test
211     public void testReadNextFrameLinkyTICModeStandardSinglePhaseProd() throws Exception {
212         try (TeleinfoInputStream in = new TeleinfoInputStream(
213                 new FileInputStream(TestUtils.getTestFile("linky-tic-mode-standard-single-phase-prod.raw")),
214                 TeleinfoTicMode.STANDARD, true)) {
215             Frame frame = in.readNextFrame();
216             assertNotNull(frame);
217             assertEquals(FrameType.LSMM_PROD, frame.getType());
218             assertEquals("123456789012", frame.get(Label.ADSC));
219             assertEquals("02", frame.get(Label.VTIC));
220             assertEquals("", frame.get(Label.DATE));
221             assertEquals("PRODUCTEUR", frame.get(Label.NGTF));
222             assertEquals("INDEX NON CONSO ", frame.get(Label.LTARF));
223             assertEquals(0, frame.getAsInt(Label.EAST));
224             assertEquals(0, frame.getAsInt(Label.EASF01));
225             assertEquals(32781, frame.getAsInt(Label.EAIT));
226         }
227     }
228 }