]> git.basschouten.com Git - openhab-addons.git/blob
5c325c9a7ea7f13a1194d1c85037bfebf7d1df11
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2021 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.avmfritz.internal.dto;
14
15 import static org.junit.jupiter.api.Assertions.*;
16 import static org.openhab.binding.avmfritz.internal.AVMFritzBindingConstants.*;
17
18 import java.io.StringReader;
19 import java.math.BigDecimal;
20 import java.util.Optional;
21
22 import javax.xml.bind.JAXBException;
23 import javax.xml.bind.Unmarshaller;
24 import javax.xml.stream.XMLStreamException;
25 import javax.xml.stream.XMLStreamReader;
26
27 import org.eclipse.jdt.annotation.NonNullByDefault;
28 import org.junit.jupiter.api.BeforeEach;
29 import org.junit.jupiter.api.Test;
30 import org.openhab.binding.avmfritz.internal.util.JAXBUtils;
31
32 /**
33  * Tests for {@link DeviceListModel}.
34  *
35  * @author Christoph Weitkamp - Initial contribution
36  * @author Ulrich Mertin - Added support for HAN-FUN blinds
37  */
38 @NonNullByDefault
39 public class AVMFritzDeviceListModelTest {
40
41     private @NonNullByDefault({}) DeviceListModel devices;
42
43     @SuppressWarnings("null")
44     @BeforeEach
45     public void setUp() throws JAXBException, XMLStreamException {
46         //@formatter:off
47         final String xml =
48                 "<devicelist version=\"1\">" +
49                     "<group identifier=\"F0:A3:7F-900\" id=\"20000\" functionbitmask=\"6784\" fwversion=\"1.0\" manufacturer=\"AVM\" productname=\"\"><present>1</present><name>Schlafzimmer</name><switch><state>1</state><mode>manuell</mode><lock>0</lock><devicelock>0</devicelock></switch><powermeter><voltage>230051</voltage><power>0</power><energy>2087</energy></powermeter><groupinfo><masterdeviceid>17</masterdeviceid><members>17,18</members></groupinfo></group>" +
50                     "<group identifier=\"F0:A3:7F-901\" id=\"20001\" functionbitmask=\"4160\" fwversion=\"1.0\" manufacturer=\"AVM\" productname=\"\"><present>1</present><name>Schlafzimmer</name><temperature><celsius>220</celsius><offset>-10</offset></temperature><hkr><tist>44</tist><tsoll>42</tsoll><absenk>28</absenk><komfort>42</komfort><lock>1</lock><devicelock>1</devicelock><errorcode>0</errorcode><windowopenactiv>0</windowopenactiv><windowopenactiveendtime>0</windowopenactiveendtime><boostactive>0</boostactive><boostactiveendtime>0</boostactiveendtime><batterylow>0</batterylow><battery>100</battery><nextchange><endperiod>1484341200</endperiod><tchange>28</tchange></nextchange></hkr><groupinfo><masterdeviceid>0</masterdeviceid><members>20,21,22</members></groupinfo></group>" +
51                     "<device identifier=\"08761 0000434\" id=\"17\" functionbitmask=\"2944\" fwversion=\"03.83\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 200\"><present>1</present><name>FRITZ!DECT 200 #1</name><switch><state>1</state><mode>manuell</mode><lock>0</lock><devicelock>0</devicelock></switch><powermeter><voltage>230051</voltage><power>0</power><energy>2087</energy></powermeter><temperature><celsius>255</celsius><offset>0</offset></temperature></device>" +
52                     "<device identifier=\"08761 0000438\" id=\"18\" functionbitmask=\"2944\" fwversion=\"03.83\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 210\"><present>1</present><name>FRITZ!DECT 210 #8</name><switch><state>1</state><mode>manuell</mode><lock>0</lock><devicelock>0</devicelock></switch><powermeter><voltage>230051</voltage><power>0</power><energy>2087</energy></powermeter><temperature><celsius>255</celsius><offset>0</offset></temperature></device>" +
53                     "<device identifier=\"08761 0000437\" id=\"20\" functionbitmask=\"320\" fwversion=\"03.50\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 300\"><present>0</present><name>FRITZ!DECT 300 #1</name><temperature><celsius>220</celsius><offset>-10</offset></temperature><hkr><tist>44</tist><tsoll>42</tsoll><absenk>28</absenk><komfort>42</komfort><lock>1</lock><devicelock>1</devicelock><errorcode>0</errorcode><windowopenactiv>0</windowopenactiv><windowopenactiveendtime>0</windowopenactiveendtime><boostactive>0</boostactive><boostactiveendtime>0</boostactiveendtime><batterylow>0</batterylow><battery>100</battery><nextchange><endperiod>1484341200</endperiod><tchange>28</tchange></nextchange></hkr></device>" +
54                     "<device identifier=\"08761 0000436\" id=\"21\" functionbitmask=\"320\" fwversion=\"03.50\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 301\"><present>0</present><name>FRITZ!DECT 301 #1</name><temperature><celsius>220</celsius><offset>-10</offset></temperature><hkr><tist>44</tist><tsoll>42</tsoll><absenk>28</absenk><komfort>42</komfort><lock>1</lock><devicelock>1</devicelock><errorcode>0</errorcode><windowopenactiv>0</windowopenactiv><windowopenactiveendtime>0</windowopenactiveendtime><boostactive>0</boostactive><boostactiveendtime>0</boostactiveendtime><batterylow>0</batterylow><battery>100</battery><nextchange><endperiod>1484341200</endperiod><tchange>28</tchange></nextchange></hkr></device>" +
55                     "<device identifier=\"08761 0000435\" id=\"22\" functionbitmask=\"320\" fwversion=\"03.50\" manufacturer=\"AVM\" productname=\"Comet DECT\"><present>0</present><name>Comet DECT #1</name><temperature><celsius>220</celsius><offset>-10</offset></temperature><hkr><tist>44</tist><tsoll>42</tsoll><absenk>28</absenk><komfort>42</komfort><lock>1</lock><devicelock>1</devicelock><errorcode>0</errorcode><windowopenactiv>0</windowopenactiv><windowopenactiveendtime>0</windowopenactiveendtime><boostactive>0</boostactive><boostactiveendtime>0</boostactiveendtime><batterylow>0</batterylow><battery>100</battery><nextchange><endperiod>1484341200</endperiod><tchange>28</tchange></nextchange></hkr></device>" +
56                     "<device identifier=\"5C:49:79:F0:A3:84\" id=\"30\" functionbitmask=\"640\" fwversion=\"06.92\" manufacturer=\"AVM\" productname=\"FRITZ!Powerline 546E\"><present>1</present><name>FRITZ!Powerline 546E #1</name><switch><state>0</state><mode>manuell</mode><lock>0</lock><devicelock>1</devicelock></switch><powermeter><voltage>230051</voltage><power>0</power><energy>2087</energy></powermeter></device>" +
57                     "<device identifier=\"08761 0000439\" id=\"40\" functionbitmask=\"1280\" fwversion=\"03.86\" manufacturer=\"AVM\" productname=\"FRITZ!DECT Repeater 100\"><present>1</present><name>FRITZ!DECT Repeater 100 #5</name><temperature><celsius>230</celsius><offset>0</offset></temperature></device>" +
58                     "<device identifier=\"11934 0059978-1\" id=\"2000\" functionbitmask=\"8208\" fwversion=\"0.0\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\"><present>0</present><name>HAN-FUN #2: Unit #2</name><etsiunitinfo><etsideviceid>406</etsideviceid><unittype>514</unittype><interfaces>256</interfaces></etsiunitinfo><alert><state>1</state></alert></device>" +
59                     "<device identifier=\"11934 0059979-1\" id=\"2001\" functionbitmask=\"8200\" fwversion=\"0.0\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\"><present>0</present><name>HAN-FUN #2: Unit #2</name><etsiunitinfo><etsideviceid>412</etsideviceid><unittype>273</unittype><interfaces>772</interfaces></etsiunitinfo><button><lastpressedtimestamp>1529590797</lastpressedtimestamp></button></device>" +
60                     "<device identifier=\"13096 0007307\" id=\"29\" functionbitmask=\"32\" fwversion=\"04.90\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 400\"><present>1</present><name>FRITZ!DECT 400 #14</name><battery>100</battery><batterylow>0</batterylow><button identifier=\"13096 0007307-0\" id=\"5000\"><name>FRITZ!DECT 400 #14: kurz</name><lastpressedtimestamp>1549195586</lastpressedtimestamp></button><button identifier=\"13096 0007307-9\" id=\"5001\"><name>FRITZ!DECT 400 #14: lang</name><lastpressedtimestamp>1549195595</lastpressedtimestamp></button></device>" +
61                     "<device identifier=\"13096 0007308\" id=\"30\" functionbitmask=\"1048864\" fwversion=\"05.10\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 440\"><present>1</present><name>FRITZ!DECT 440 #15</name><temperature><celsius>230</celsius><offset>0</offset></temperature><humidity><rel_humidity>43</rel_humidity></humidity><battery>100</battery><batterylow>0</batterylow><button identifier=\"13096 0007308-1\" id=\"5000\"><name>FRITZ!DECT 440 #15: Oben rechts</name><lastpressedtimestamp>1549195586</lastpressedtimestamp></button><button identifier=\"13096 0007308-3\" id=\"5001\"><name>FRITZ!DECT 440 #15: Unten rechts</name><lastpressedtimestamp>1549195595</lastpressedtimestamp></button><button identifier=\"13096 0007308-5\" id=\"5002\"><name>FRITZ!DECT 440 #15: Unten links</name><lastpressedtimestamp>1549195586</lastpressedtimestamp></button><button identifier=\"13096 0007308-7\" id=\"5003\"><name>FRITZ!DECT 440 #15: Oben links</name><lastpressedtimestamp>1549195595</lastpressedtimestamp></button></device>" +
62                     "<device identifier=\"14276 0503450-1\" id=\"2000\" functionbitmask=\"335888\" fwversion=\"0.0\" manufacturer=\"0x37c4\" productname=\"Rollotron 1213\"><present>1</present><txbusy>0</txbusy><name>Rollotron 1213 #1</name><blind><endpositionsset>1</endpositionsset><mode>manuell</mode></blind><levelcontrol><level>26</level><levelpercentage>10</levelpercentage></levelcontrol><etsiunitinfo><etsideviceid>406</etsideviceid><unittype>281</unittype><interfaces>256,513,516,517</interfaces></etsiunitinfo><alert><state>0</state><lastalertchgtimestamp></lastalertchgtimestamp></alert></device>" +
63                 "</devicelist>";
64         //@formatter:on
65         XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(xml));
66         Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
67         devices = u.unmarshal(xsr, DeviceListModel.class).getValue();
68     }
69
70     @Test
71     public void validateDeviceListModel() {
72         assertNotNull(devices);
73         assertEquals(14, devices.getDevicelist().size());
74         assertEquals("1", devices.getXmlApiVersion());
75     }
76
77     @Test
78     public void validateDECTRepeater100Model() {
79         Optional<AVMFritzBaseModel> optionalDevice = findModelByIdentifier("087610000439");
80         assertTrue(optionalDevice.isPresent());
81         assertTrue(optionalDevice.get() instanceof DeviceModel);
82
83         DeviceModel device = (DeviceModel) optionalDevice.get();
84         assertEquals("FRITZ!DECT Repeater 100", device.getProductName());
85         assertEquals("087610000439", device.getIdentifier());
86         assertEquals("40", device.getDeviceId());
87         assertEquals("03.86", device.getFirmwareVersion());
88         assertEquals("AVM", device.getManufacturer());
89
90         assertEquals(1, device.getPresent());
91         assertEquals("FRITZ!DECT Repeater 100 #5", device.getName());
92
93         assertFalse(device.isButton());
94         assertFalse(device.isHANFUNButton());
95         assertFalse(device.isHANFUNAlarmSensor());
96         assertTrue(device.isDectRepeater());
97         assertFalse(device.isSwitchableOutlet());
98         assertTrue(device.isTempSensor());
99         assertFalse(device.isHumiditySensor());
100         assertFalse(device.isPowermeter());
101         assertFalse(device.isHeatingThermostat());
102         assertFalse(device.isHANFUNBlinds());
103
104         assertNull(device.getSwitch());
105
106         assertNotNull(device.getTemperature());
107         assertEquals(new BigDecimal("23.0"), device.getTemperature().getCelsius());
108         assertEquals(new BigDecimal("0.0"), device.getTemperature().getOffset());
109
110         assertNull(device.getPowermeter());
111
112         assertNull(device.getHkr());
113
114         assertNull(device.getLevelcontrol());
115     }
116
117     @Test
118     public void validateDECT200Model() {
119         Optional<AVMFritzBaseModel> optionalDevice = findModel("FRITZ!DECT 200");
120         assertTrue(optionalDevice.isPresent());
121         assertTrue(optionalDevice.get() instanceof DeviceModel);
122
123         DeviceModel device = (DeviceModel) optionalDevice.get();
124         assertEquals("FRITZ!DECT 200", device.getProductName());
125         assertEquals("087610000434", device.getIdentifier());
126         assertEquals("17", device.getDeviceId());
127         assertEquals("03.83", device.getFirmwareVersion());
128         assertEquals("AVM", device.getManufacturer());
129
130         assertEquals(1, device.getPresent());
131         assertEquals("FRITZ!DECT 200 #1", device.getName());
132
133         assertFalse(device.isButton());
134         assertFalse(device.isHANFUNButton());
135         assertFalse(device.isHANFUNAlarmSensor());
136         assertFalse(device.isDectRepeater());
137         assertTrue(device.isSwitchableOutlet());
138         assertTrue(device.isTempSensor());
139         assertFalse(device.isHumiditySensor());
140         assertTrue(device.isPowermeter());
141         assertFalse(device.isHeatingThermostat());
142         assertFalse(device.isHANFUNBlinds());
143
144         assertNotNull(device.getSwitch());
145         assertEquals(SwitchModel.ON, device.getSwitch().getState());
146         assertEquals(MODE_MANUAL, device.getSwitch().getMode());
147         assertEquals(BigDecimal.ZERO, device.getSwitch().getLock());
148         assertEquals(BigDecimal.ZERO, device.getSwitch().getDevicelock());
149
150         assertNotNull(device.getTemperature());
151         assertEquals(new BigDecimal("25.5"), device.getTemperature().getCelsius());
152         assertEquals(new BigDecimal("0.0"), device.getTemperature().getOffset());
153
154         validatePowerMeter(device.getPowermeter());
155
156         assertNull(device.getHkr());
157
158         assertNull(device.getLevelcontrol());
159     }
160
161     @Test
162     public void validateDECT210Model() {
163         Optional<AVMFritzBaseModel> optionalDevice = findModel("FRITZ!DECT 210");
164         assertTrue(optionalDevice.isPresent());
165         assertTrue(optionalDevice.get() instanceof DeviceModel);
166
167         DeviceModel device = (DeviceModel) optionalDevice.get();
168         assertEquals("FRITZ!DECT 210", device.getProductName());
169         assertEquals("087610000438", device.getIdentifier());
170         assertEquals("18", device.getDeviceId());
171         assertEquals("03.83", device.getFirmwareVersion());
172         assertEquals("AVM", device.getManufacturer());
173
174         assertEquals(1, device.getPresent());
175         assertEquals("FRITZ!DECT 210 #8", device.getName());
176
177         assertFalse(device.isButton());
178         assertFalse(device.isHANFUNButton());
179         assertFalse(device.isHANFUNAlarmSensor());
180         assertFalse(device.isDectRepeater());
181         assertTrue(device.isSwitchableOutlet());
182         assertTrue(device.isTempSensor());
183         assertFalse(device.isHumiditySensor());
184         assertTrue(device.isPowermeter());
185         assertFalse(device.isHeatingThermostat());
186         assertFalse(device.isHANFUNBlinds());
187
188         assertNotNull(device.getSwitch());
189         assertEquals(SwitchModel.ON, device.getSwitch().getState());
190         assertEquals(MODE_MANUAL, device.getSwitch().getMode());
191         assertEquals(BigDecimal.ZERO, device.getSwitch().getLock());
192         assertEquals(BigDecimal.ZERO, device.getSwitch().getDevicelock());
193
194         assertNotNull(device.getTemperature());
195         assertEquals(new BigDecimal("25.5"), device.getTemperature().getCelsius());
196         assertEquals(new BigDecimal("0.0"), device.getTemperature().getOffset());
197
198         validatePowerMeter(device.getPowermeter());
199
200         assertNull(device.getHkr());
201
202         assertNull(device.getLevelcontrol());
203     }
204
205     @Test
206     public void validateDECT300Model() {
207         Optional<AVMFritzBaseModel> optionalDevice = findModel("FRITZ!DECT 300");
208         assertTrue(optionalDevice.isPresent());
209         assertTrue(optionalDevice.get() instanceof DeviceModel);
210
211         DeviceModel device = (DeviceModel) optionalDevice.get();
212         assertEquals("FRITZ!DECT 300", device.getProductName());
213         assertEquals("087610000437", device.getIdentifier());
214         assertEquals("20", device.getDeviceId());
215         assertEquals("03.50", device.getFirmwareVersion());
216         assertEquals("AVM", device.getManufacturer());
217
218         assertEquals(0, device.getPresent());
219         assertEquals("FRITZ!DECT 300 #1", device.getName());
220
221         assertFalse(device.isButton());
222         assertFalse(device.isHANFUNButton());
223         assertFalse(device.isHANFUNAlarmSensor());
224         assertFalse(device.isDectRepeater());
225         assertFalse(device.isSwitchableOutlet());
226         assertTrue(device.isTempSensor());
227         assertFalse(device.isHumiditySensor());
228         assertFalse(device.isPowermeter());
229         assertTrue(device.isHeatingThermostat());
230         assertFalse(device.isHANFUNBlinds());
231
232         assertNull(device.getSwitch());
233
234         assertNotNull(device.getTemperature());
235         assertEquals(new BigDecimal("22.0"), device.getTemperature().getCelsius());
236         assertEquals(new BigDecimal("-1.0"), device.getTemperature().getOffset());
237
238         assertNull(device.getPowermeter());
239
240         validateHeatingModel(device.getHkr());
241     }
242
243     @Test
244     public void validateDECT301Model() {
245         Optional<AVMFritzBaseModel> optionalDevice = findModel("FRITZ!DECT 301");
246         assertTrue(optionalDevice.isPresent());
247         assertTrue(optionalDevice.get() instanceof DeviceModel);
248
249         DeviceModel device = (DeviceModel) optionalDevice.get();
250         assertEquals("FRITZ!DECT 301", device.getProductName());
251         assertEquals("087610000436", device.getIdentifier());
252         assertEquals("21", device.getDeviceId());
253         assertEquals("03.50", device.getFirmwareVersion());
254         assertEquals("AVM", device.getManufacturer());
255
256         assertEquals(0, device.getPresent());
257         assertEquals("FRITZ!DECT 301 #1", device.getName());
258
259         assertFalse(device.isButton());
260         assertFalse(device.isHANFUNButton());
261         assertFalse(device.isHANFUNAlarmSensor());
262         assertFalse(device.isDectRepeater());
263         assertFalse(device.isSwitchableOutlet());
264         assertTrue(device.isTempSensor());
265         assertFalse(device.isHumiditySensor());
266         assertFalse(device.isPowermeter());
267         assertTrue(device.isHeatingThermostat());
268         assertFalse(device.isHANFUNBlinds());
269
270         assertNull(device.getSwitch());
271
272         assertNotNull(device.getTemperature());
273         assertEquals(new BigDecimal("22.0"), device.getTemperature().getCelsius());
274         assertEquals(new BigDecimal("-1.0"), device.getTemperature().getOffset());
275
276         assertNull(device.getPowermeter());
277
278         validateHeatingModel(device.getHkr());
279     }
280
281     @Test
282     public void validateCometDECTModel() {
283         Optional<AVMFritzBaseModel> optionalDevice = findModel("Comet DECT");
284         assertTrue(optionalDevice.isPresent());
285         assertTrue(optionalDevice.get() instanceof DeviceModel);
286
287         DeviceModel device = (DeviceModel) optionalDevice.get();
288         assertEquals("Comet DECT", device.getProductName());
289         assertEquals("087610000435", device.getIdentifier());
290         assertEquals("22", device.getDeviceId());
291         assertEquals("03.50", device.getFirmwareVersion());
292         assertEquals("AVM", device.getManufacturer());
293
294         assertEquals(0, device.getPresent());
295         assertEquals("Comet DECT #1", device.getName());
296
297         assertFalse(device.isButton());
298         assertFalse(device.isHANFUNButton());
299         assertFalse(device.isHANFUNAlarmSensor());
300         assertFalse(device.isDectRepeater());
301         assertFalse(device.isSwitchableOutlet());
302         assertTrue(device.isTempSensor());
303         assertFalse(device.isHumiditySensor());
304         assertFalse(device.isPowermeter());
305         assertTrue(device.isHeatingThermostat());
306         assertFalse(device.isHANFUNBlinds());
307
308         assertNull(device.getSwitch());
309
310         assertNotNull(device.getTemperature());
311         assertEquals(new BigDecimal("22.0"), device.getTemperature().getCelsius());
312         assertEquals(new BigDecimal("-1.0"), device.getTemperature().getOffset());
313
314         assertNull(device.getPowermeter());
315
316         validateHeatingModel(device.getHkr());
317     }
318
319     @Test
320     public void validateDECT400Model() {
321         Optional<AVMFritzBaseModel> optionalDevice = findModelByIdentifier("130960007307");
322         assertTrue(optionalDevice.isPresent());
323         assertTrue(optionalDevice.get() instanceof DeviceModel);
324
325         DeviceModel device = (DeviceModel) optionalDevice.get();
326         assertEquals("FRITZ!DECT 400", device.getProductName());
327         assertEquals("130960007307", device.getIdentifier());
328         assertEquals("29", device.getDeviceId());
329         assertEquals("04.90", device.getFirmwareVersion());
330         assertEquals("AVM", device.getManufacturer());
331
332         assertEquals(1, device.getPresent());
333         assertEquals("FRITZ!DECT 400 #14", device.getName());
334
335         assertTrue(device.isButton());
336         assertFalse(device.isHANFUNButton());
337         assertFalse(device.isHANFUNAlarmSensor());
338         assertFalse(device.isDectRepeater());
339         assertFalse(device.isSwitchableOutlet());
340         assertFalse(device.isTempSensor());
341         assertFalse(device.isHumiditySensor());
342         assertFalse(device.isPowermeter());
343         assertFalse(device.isHeatingThermostat());
344         assertFalse(device.isHANFUNBlinds());
345
346         assertEquals(new BigDecimal("100"), device.getBattery());
347         assertEquals(BatteryModel.BATTERY_OFF, device.getBatterylow());
348
349         assertEquals(2, device.getButtons().size());
350         assertEquals("FRITZ!DECT 400 #14: kurz", device.getButtons().get(0).getName());
351         assertEquals(1549195586, device.getButtons().get(0).getLastpressedtimestamp());
352         assertEquals("FRITZ!DECT 400 #14: lang", device.getButtons().get(1).getName());
353         assertEquals(1549195595, device.getButtons().get(1).getLastpressedtimestamp());
354
355         assertNull(device.getAlert());
356
357         assertNull(device.getSwitch());
358
359         assertNull(device.getTemperature());
360
361         assertNull(device.getPowermeter());
362
363         assertNull(device.getHkr());
364
365         assertNull(device.getLevelcontrol());
366     }
367
368     @Test
369     public void validateDECT440Model() {
370         Optional<AVMFritzBaseModel> optionalDevice = findModelByIdentifier("130960007308");
371         assertTrue(optionalDevice.isPresent());
372         assertTrue(optionalDevice.get() instanceof DeviceModel);
373
374         DeviceModel device = (DeviceModel) optionalDevice.get();
375         assertEquals("FRITZ!DECT 440", device.getProductName());
376         assertEquals("130960007308", device.getIdentifier());
377         assertEquals("30", device.getDeviceId());
378         assertEquals("05.10", device.getFirmwareVersion());
379         assertEquals("AVM", device.getManufacturer());
380
381         assertEquals(1, device.getPresent());
382         assertEquals("FRITZ!DECT 440 #15", device.getName());
383
384         assertTrue(device.isButton());
385         assertFalse(device.isHANFUNButton());
386         assertFalse(device.isHANFUNAlarmSensor());
387         assertFalse(device.isDectRepeater());
388         assertFalse(device.isSwitchableOutlet());
389         assertTrue(device.isTempSensor());
390         assertTrue(device.isHumiditySensor());
391         assertFalse(device.isPowermeter());
392         assertFalse(device.isHeatingThermostat());
393         assertFalse(device.isHANFUNBlinds());
394
395         assertEquals(new BigDecimal("100"), device.getBattery());
396         assertEquals(BatteryModel.BATTERY_OFF, device.getBatterylow());
397
398         assertEquals(4, device.getButtons().size());
399         final ButtonModel topRight = device.getButtons().get(0);
400         assertEquals("130960007308-1", topRight.getIdentifier());
401         assertEquals("5000", topRight.getButtonId());
402         assertEquals("FRITZ!DECT 440 #15: Oben rechts", topRight.getName());
403         assertEquals(1549195586, topRight.getLastpressedtimestamp());
404         final ButtonModel bottomRight = device.getButtons().get(1);
405         assertEquals("130960007308-3", bottomRight.getIdentifier());
406         assertEquals("5001", bottomRight.getButtonId());
407         assertEquals("FRITZ!DECT 440 #15: Unten rechts", bottomRight.getName());
408         assertEquals(1549195595, bottomRight.getLastpressedtimestamp());
409         final ButtonModel bottomLeft = device.getButtons().get(2);
410         assertEquals("130960007308-5", bottomLeft.getIdentifier());
411         assertEquals("5002", bottomLeft.getButtonId());
412         assertEquals("FRITZ!DECT 440 #15: Unten links", bottomLeft.getName());
413         assertEquals(1549195586, bottomLeft.getLastpressedtimestamp());
414         final ButtonModel topLeft = device.getButtons().get(3);
415         assertEquals("130960007308-7", topLeft.getIdentifier());
416         assertEquals("5003", topLeft.getButtonId());
417         assertEquals("FRITZ!DECT 440 #15: Oben links", topLeft.getName());
418         assertEquals(1549195595, topLeft.getLastpressedtimestamp());
419
420         assertNull(device.getAlert());
421
422         assertNull(device.getSwitch());
423
424         assertNotNull(device.getTemperature());
425         assertEquals(new BigDecimal("23.0"), device.getTemperature().getCelsius());
426         assertEquals(new BigDecimal("0.0"), device.getTemperature().getOffset());
427
428         assertNotNull(device.getHumidity());
429         assertEquals(new BigDecimal("43"), device.getHumidity().getRelativeHumidity());
430
431         assertNull(device.getPowermeter());
432
433         assertNull(device.getHkr());
434
435         assertNull(device.getLevelcontrol());
436     }
437
438     @Test
439     public void validatePowerline546EModel() {
440         Optional<AVMFritzBaseModel> optionalDevice = findModel("FRITZ!Powerline 546E");
441         assertTrue(optionalDevice.isPresent());
442         assertTrue(optionalDevice.get() instanceof DeviceModel);
443
444         DeviceModel device = (DeviceModel) optionalDevice.get();
445         assertEquals("FRITZ!Powerline 546E", device.getProductName());
446         assertEquals("5C:49:79:F0:A3:84", device.getIdentifier());
447         assertEquals("30", device.getDeviceId());
448         assertEquals("06.92", device.getFirmwareVersion());
449         assertEquals("AVM", device.getManufacturer());
450
451         assertEquals(1, device.getPresent());
452         assertEquals("FRITZ!Powerline 546E #1", device.getName());
453
454         assertFalse(device.isButton());
455         assertFalse(device.isHANFUNButton());
456         assertFalse(device.isHANFUNAlarmSensor());
457         assertFalse(device.isDectRepeater());
458         assertTrue(device.isSwitchableOutlet());
459         assertFalse(device.isTempSensor());
460         assertFalse(device.isHumiditySensor());
461         assertTrue(device.isPowermeter());
462         assertFalse(device.isHeatingThermostat());
463         assertFalse(device.isHANFUNBlinds());
464
465         assertNotNull(device.getSwitch());
466         assertEquals(SwitchModel.OFF, device.getSwitch().getState());
467         assertEquals(MODE_MANUAL, device.getSwitch().getMode());
468         assertEquals(BigDecimal.ZERO, device.getSwitch().getLock());
469         assertEquals(BigDecimal.ONE, device.getSwitch().getDevicelock());
470
471         assertNull(device.getTemperature());
472
473         validatePowerMeter(device.getPowermeter());
474
475         assertNull(device.getHkr());
476
477         assertNull(device.getLevelcontrol());
478     }
479
480     @Test
481     public void validateHANFUNContactModel() {
482         Optional<AVMFritzBaseModel> optionalDevice = findModelByIdentifier("119340059978-1");
483         assertTrue(optionalDevice.isPresent());
484         assertTrue(optionalDevice.get() instanceof DeviceModel);
485
486         DeviceModel device = (DeviceModel) optionalDevice.get();
487         assertEquals("HAN-FUN", device.getProductName());
488         assertEquals("119340059978-1", device.getIdentifier());
489         assertEquals("2000", device.getDeviceId());
490         assertEquals("0.0", device.getFirmwareVersion());
491         assertEquals("0x0feb", device.getManufacturer());
492
493         assertEquals(0, device.getPresent());
494         assertEquals("HAN-FUN #2: Unit #2", device.getName());
495
496         assertFalse(device.isButton());
497         assertFalse(device.isHANFUNButton());
498         assertTrue(device.isHANFUNAlarmSensor());
499         assertFalse(device.isDectRepeater());
500         assertFalse(device.isSwitchableOutlet());
501         assertFalse(device.isTempSensor());
502         assertFalse(device.isHumiditySensor());
503         assertFalse(device.isPowermeter());
504         assertFalse(device.isHeatingThermostat());
505         assertFalse(device.isHANFUNBlinds());
506
507         assertTrue(device.getButtons().isEmpty());
508
509         assertNotNull(device.getAlert());
510         assertEquals(BigDecimal.ONE, device.getAlert().getState());
511
512         assertNull(device.getSwitch());
513
514         assertNull(device.getTemperature());
515
516         assertNull(device.getPowermeter());
517
518         assertNull(device.getHkr());
519
520         assertNull(device.getLevelcontrol());
521     }
522
523     @Test
524     public void validateHANFUNSwitchModel() {
525         Optional<AVMFritzBaseModel> optionalDevice = findModelByIdentifier("119340059979-1");
526         assertTrue(optionalDevice.isPresent());
527         assertTrue(optionalDevice.get() instanceof DeviceModel);
528
529         DeviceModel device = (DeviceModel) optionalDevice.get();
530         assertEquals("HAN-FUN", device.getProductName());
531         assertEquals("119340059979-1", device.getIdentifier());
532         assertEquals("2001", device.getDeviceId());
533         assertEquals("0.0", device.getFirmwareVersion());
534         assertEquals("0x0feb", device.getManufacturer());
535
536         assertEquals(0, device.getPresent());
537         assertEquals("HAN-FUN #2: Unit #2", device.getName());
538
539         assertFalse(device.isButton());
540         assertTrue(device.isHANFUNButton());
541         assertFalse(device.isHANFUNAlarmSensor());
542         assertFalse(device.isDectRepeater());
543         assertFalse(device.isSwitchableOutlet());
544         assertFalse(device.isTempSensor());
545         assertFalse(device.isHumiditySensor());
546         assertFalse(device.isPowermeter());
547         assertFalse(device.isHeatingThermostat());
548         assertFalse(device.isHANFUNBlinds());
549
550         assertEquals(1, device.getButtons().size());
551         assertEquals(1529590797, device.getButtons().get(0).getLastpressedtimestamp());
552
553         assertNull(device.getAlert());
554
555         assertNull(device.getSwitch());
556
557         assertNull(device.getTemperature());
558
559         assertNull(device.getPowermeter());
560
561         assertNull(device.getHkr());
562
563         assertNull(device.getLevelcontrol());
564     }
565
566     @Test
567     public void validateHANFUNBlindModel() {
568         Optional<AVMFritzBaseModel> optionalDevice = findModelByIdentifier("142760503450-1");
569         assertTrue(optionalDevice.isPresent());
570         assertTrue(optionalDevice.get() instanceof DeviceModel);
571
572         DeviceModel device = (DeviceModel) optionalDevice.get();
573         assertEquals("Rollotron 1213", device.getProductName());
574         assertEquals("142760503450-1", device.getIdentifier());
575         assertEquals("2000", device.getDeviceId());
576         assertEquals("0.0", device.getFirmwareVersion());
577         assertEquals("0x37c4", device.getManufacturer());
578
579         assertEquals(1, device.getPresent());
580         assertEquals("Rollotron 1213 #1", device.getName());
581
582         assertFalse(device.isButton());
583         assertFalse(device.isHANFUNButton());
584         assertTrue(device.isHANFUNAlarmSensor());
585         assertFalse(device.isDectRepeater());
586         assertFalse(device.isSwitchableOutlet());
587         assertFalse(device.isTempSensor());
588         assertFalse(device.isHumiditySensor());
589         assertFalse(device.isPowermeter());
590         assertFalse(device.isHeatingThermostat());
591         assertTrue(device.isHANFUNBlinds());
592
593         assertTrue(device.getButtons().isEmpty());
594
595         assertNotNull(device.getAlert());
596         assertEquals(BigDecimal.ZERO, device.getAlert().getState());
597
598         assertNull(device.getSwitch());
599
600         assertNull(device.getTemperature());
601
602         assertNull(device.getPowermeter());
603
604         assertNull(device.getHkr());
605
606         LevelcontrolModel levelcontrol = device.getLevelcontrol();
607         assertNotNull(levelcontrol);
608         assertEquals(BigDecimal.valueOf(26L), levelcontrol.getLevel());
609         assertEquals(BigDecimal.valueOf(10L), levelcontrol.getLevelPercentage());
610     }
611
612     @Test
613     public void validateHeatingGroupModel() {
614         Optional<AVMFritzBaseModel> optionalGroup = findModelByIdentifier("F0:A3:7F-901");
615         assertTrue(optionalGroup.isPresent());
616         assertTrue(optionalGroup.get() instanceof GroupModel);
617
618         GroupModel group = (GroupModel) optionalGroup.get();
619         assertEquals("", group.getProductName());
620         assertEquals("F0:A3:7F-901", group.getIdentifier());
621         assertEquals("20001", group.getDeviceId());
622         assertEquals("1.0", group.getFirmwareVersion());
623         assertEquals("AVM", group.getManufacturer());
624
625         assertEquals(1, group.getPresent());
626         assertEquals("Schlafzimmer", group.getName());
627
628         assertFalse(group.isButton());
629         assertFalse(group.isHANFUNButton());
630         assertFalse(group.isHANFUNAlarmSensor());
631         assertFalse(group.isDectRepeater());
632         assertFalse(group.isSwitchableOutlet());
633         assertFalse(group.isTempSensor());
634         assertFalse(group.isHumiditySensor());
635         assertFalse(group.isPowermeter());
636         assertTrue(group.isHeatingThermostat());
637         assertFalse(group.isHANFUNBlinds());
638
639         assertNull(group.getSwitch());
640
641         assertNull(group.getPowermeter());
642
643         validateHeatingModel(group.getHkr());
644
645         assertNotNull(group.getGroupinfo());
646         assertEquals("0", group.getGroupinfo().getMasterdeviceid());
647         assertEquals("20,21,22", group.getGroupinfo().getMembers());
648     }
649
650     @Test
651     public void validateSwitchGroupModel() {
652         Optional<AVMFritzBaseModel> optionalGroup = findModelByIdentifier("F0:A3:7F-900");
653         assertTrue(optionalGroup.isPresent());
654         assertTrue(optionalGroup.get() instanceof GroupModel);
655
656         GroupModel group = (GroupModel) optionalGroup.get();
657         assertEquals("", group.getProductName());
658         assertEquals("F0:A3:7F-900", group.getIdentifier());
659         assertEquals("20000", group.getDeviceId());
660         assertEquals("1.0", group.getFirmwareVersion());
661         assertEquals("AVM", group.getManufacturer());
662
663         assertEquals(1, group.getPresent());
664         assertEquals("Schlafzimmer", group.getName());
665
666         assertFalse(group.isButton());
667         assertFalse(group.isHANFUNButton());
668         assertFalse(group.isHANFUNAlarmSensor());
669         assertFalse(group.isDectRepeater());
670         assertTrue(group.isSwitchableOutlet());
671         assertFalse(group.isTempSensor());
672         assertFalse(group.isHumiditySensor());
673         assertTrue(group.isPowermeter());
674         assertFalse(group.isHeatingThermostat());
675         assertFalse(group.isHANFUNBlinds());
676
677         assertNotNull(group.getSwitch());
678         assertEquals(SwitchModel.ON, group.getSwitch().getState());
679         assertEquals(MODE_MANUAL, group.getSwitch().getMode());
680         assertEquals(BigDecimal.ZERO, group.getSwitch().getLock());
681         assertEquals(BigDecimal.ZERO, group.getSwitch().getDevicelock());
682
683         validatePowerMeter(group.getPowermeter());
684
685         assertNull(group.getHkr());
686
687         assertNotNull(group.getGroupinfo());
688         assertEquals("17", group.getGroupinfo().getMasterdeviceid());
689         assertEquals("17,18", group.getGroupinfo().getMembers());
690     }
691
692     private Optional<AVMFritzBaseModel> findModel(String name) {
693         return devices.getDevicelist().stream().filter(it -> name.equals(it.getProductName())).findFirst();
694     }
695
696     private Optional<AVMFritzBaseModel> findModelByIdentifier(String identifier) {
697         return devices.getDevicelist().stream().filter(it -> identifier.equals(it.getIdentifier())).findFirst();
698     }
699
700     private void validatePowerMeter(PowerMeterModel model) {
701         assertNotNull(model);
702         assertEquals(new BigDecimal("230.051"), model.getVoltage());
703         assertEquals(new BigDecimal("0.000"), model.getPower());
704         assertEquals(new BigDecimal("2087"), model.getEnergy());
705     }
706
707     private void validateHeatingModel(HeatingModel model) {
708         assertNotNull(model);
709         assertEquals(new BigDecimal(44), model.getTist());
710         assertEquals(new BigDecimal(42), model.getTsoll());
711         assertEquals(new BigDecimal(28), model.getAbsenk());
712         assertEquals(new BigDecimal(42), model.getKomfort());
713         assertEquals(BigDecimal.ONE, model.getLock());
714         assertEquals(BigDecimal.ONE, model.getDevicelock());
715         assertEquals(BigDecimal.ZERO, model.getWindowopenactiv());
716         assertEquals(BigDecimal.ZERO, model.getBoostactive());
717         assertEquals(new BigDecimal("100"), model.getBattery());
718         assertEquals(BatteryModel.BATTERY_OFF, model.getBatterylow());
719         assertEquals(MODE_AUTO, model.getMode());
720         assertEquals(MODE_COMFORT, model.getRadiatorMode());
721
722         assertNotNull(model.getNextchange());
723         assertEquals(1484341200, model.getNextchange().getEndperiod());
724         assertEquals(new BigDecimal(28), model.getNextchange().getTchange());
725     }
726 }