2 * Copyright (c) 2010-2020 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
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
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.avmfritz.internal.dto;
15 import static org.junit.Assert.*;
16 import static org.openhab.binding.avmfritz.internal.AVMFritzBindingConstants.*;
18 import java.io.StringReader;
19 import java.math.BigDecimal;
20 import java.util.Optional;
22 import javax.xml.bind.JAXBException;
23 import javax.xml.bind.Unmarshaller;
25 import org.eclipse.jdt.annotation.NonNullByDefault;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.openhab.binding.avmfritz.internal.util.JAXBUtils;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
33 * Tests for {@link DeviceListModel}.
35 * @author Christoph Weitkamp - Initial contribution
38 public class AVMFritzDeviceListModelTest {
40 private final Logger logger = LoggerFactory.getLogger(AVMFritzDeviceListModelTest.class);
42 private @NonNullByDefault({}) DeviceListModel devices;
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>" +
65 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
66 devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
67 } catch (JAXBException e) {
68 logger.error("Exception creating Unmarshaller: {}", e.getLocalizedMessage(), e);
73 public void validateDeviceListModel() {
74 assertNotNull(devices);
75 assertEquals(12, devices.getDevicelist().size());
76 assertEquals("1", devices.getXmlApiVersion());
80 public void validateDECTRepeater100Model() {
81 Optional<AVMFritzBaseModel> optionalDevice = findModelByIdentifier("087610000439");
82 assertTrue(optionalDevice.isPresent());
83 assertTrue(optionalDevice.get() instanceof DeviceModel);
85 DeviceModel device = (DeviceModel) optionalDevice.get();
86 assertEquals("FRITZ!DECT Repeater 100", device.getProductName());
87 assertEquals("087610000439", device.getIdentifier());
88 assertEquals("40", device.getDeviceId());
89 assertEquals("03.86", device.getFirmwareVersion());
90 assertEquals("AVM", device.getManufacturer());
92 assertEquals(1, device.getPresent());
93 assertEquals("FRITZ!DECT Repeater 100 #5", device.getName());
95 assertFalse(device.isButton());
96 assertFalse(device.isHANFUNButton());
97 assertFalse(device.isHANFUNAlarmSensor());
98 assertTrue(device.isDectRepeater());
99 assertFalse(device.isSwitchableOutlet());
100 assertTrue(device.isTempSensor());
101 assertFalse(device.isPowermeter());
102 assertFalse(device.isHeatingThermostat());
104 assertNull(device.getSwitch());
106 assertNotNull(device.getTemperature());
107 assertEquals(new BigDecimal("23.0"), device.getTemperature().getCelsius());
108 assertEquals(new BigDecimal("0.0"), device.getTemperature().getOffset());
110 assertNull(device.getPowermeter());
112 assertNull(device.getHkr());
116 public void validateDECT200Model() {
117 Optional<AVMFritzBaseModel> optionalDevice = findModel("FRITZ!DECT 200");
118 assertTrue(optionalDevice.isPresent());
119 assertTrue(optionalDevice.get() instanceof DeviceModel);
121 DeviceModel device = (DeviceModel) optionalDevice.get();
122 assertEquals("FRITZ!DECT 200", device.getProductName());
123 assertEquals("087610000434", device.getIdentifier());
124 assertEquals("17", device.getDeviceId());
125 assertEquals("03.83", device.getFirmwareVersion());
126 assertEquals("AVM", device.getManufacturer());
128 assertEquals(1, device.getPresent());
129 assertEquals("FRITZ!DECT 200 #1", device.getName());
131 assertFalse(device.isButton());
132 assertFalse(device.isHANFUNButton());
133 assertFalse(device.isHANFUNAlarmSensor());
134 assertFalse(device.isDectRepeater());
135 assertTrue(device.isSwitchableOutlet());
136 assertTrue(device.isTempSensor());
137 assertTrue(device.isPowermeter());
138 assertFalse(device.isHeatingThermostat());
140 assertNotNull(device.getSwitch());
141 assertEquals(SwitchModel.ON, device.getSwitch().getState());
142 assertEquals(MODE_MANUAL, device.getSwitch().getMode());
143 assertEquals(BigDecimal.ZERO, device.getSwitch().getLock());
144 assertEquals(BigDecimal.ZERO, device.getSwitch().getDevicelock());
146 assertNotNull(device.getTemperature());
147 assertEquals(new BigDecimal("25.5"), device.getTemperature().getCelsius());
148 assertEquals(new BigDecimal("0.0"), device.getTemperature().getOffset());
150 validatePowerMeter(device.getPowermeter());
152 assertNull(device.getHkr());
156 public void validateDECT210Model() {
157 Optional<AVMFritzBaseModel> optionalDevice = findModel("FRITZ!DECT 210");
158 assertTrue(optionalDevice.isPresent());
159 assertTrue(optionalDevice.get() instanceof DeviceModel);
161 DeviceModel device = (DeviceModel) optionalDevice.get();
162 assertEquals("FRITZ!DECT 210", device.getProductName());
163 assertEquals("087610000438", device.getIdentifier());
164 assertEquals("18", device.getDeviceId());
165 assertEquals("03.83", device.getFirmwareVersion());
166 assertEquals("AVM", device.getManufacturer());
168 assertEquals(1, device.getPresent());
169 assertEquals("FRITZ!DECT 210 #8", device.getName());
171 assertFalse(device.isButton());
172 assertFalse(device.isHANFUNButton());
173 assertFalse(device.isHANFUNAlarmSensor());
174 assertFalse(device.isDectRepeater());
175 assertTrue(device.isSwitchableOutlet());
176 assertTrue(device.isTempSensor());
177 assertTrue(device.isPowermeter());
178 assertFalse(device.isHeatingThermostat());
180 assertNotNull(device.getSwitch());
181 assertEquals(SwitchModel.ON, device.getSwitch().getState());
182 assertEquals(MODE_MANUAL, device.getSwitch().getMode());
183 assertEquals(BigDecimal.ZERO, device.getSwitch().getLock());
184 assertEquals(BigDecimal.ZERO, device.getSwitch().getDevicelock());
186 assertNotNull(device.getTemperature());
187 assertEquals(new BigDecimal("25.5"), device.getTemperature().getCelsius());
188 assertEquals(new BigDecimal("0.0"), device.getTemperature().getOffset());
190 validatePowerMeter(device.getPowermeter());
192 assertNull(device.getHkr());
196 public void validateDECT300Model() {
197 Optional<AVMFritzBaseModel> optionalDevice = findModel("FRITZ!DECT 300");
198 assertTrue(optionalDevice.isPresent());
199 assertTrue(optionalDevice.get() instanceof DeviceModel);
201 DeviceModel device = (DeviceModel) optionalDevice.get();
202 assertEquals("FRITZ!DECT 300", device.getProductName());
203 assertEquals("087610000437", device.getIdentifier());
204 assertEquals("20", device.getDeviceId());
205 assertEquals("03.50", device.getFirmwareVersion());
206 assertEquals("AVM", device.getManufacturer());
208 assertEquals(0, device.getPresent());
209 assertEquals("FRITZ!DECT 300 #1", device.getName());
211 assertFalse(device.isButton());
212 assertFalse(device.isHANFUNButton());
213 assertFalse(device.isHANFUNAlarmSensor());
214 assertFalse(device.isDectRepeater());
215 assertFalse(device.isSwitchableOutlet());
216 assertTrue(device.isTempSensor());
217 assertFalse(device.isPowermeter());
218 assertTrue(device.isHeatingThermostat());
220 assertNull(device.getSwitch());
222 assertNotNull(device.getTemperature());
223 assertEquals(new BigDecimal("22.0"), device.getTemperature().getCelsius());
224 assertEquals(new BigDecimal("-1.0"), device.getTemperature().getOffset());
226 assertNull(device.getPowermeter());
228 validateHeatingModel(device.getHkr());
232 public void validateDECT301Model() {
233 Optional<AVMFritzBaseModel> optionalDevice = findModel("FRITZ!DECT 301");
234 assertTrue(optionalDevice.isPresent());
235 assertTrue(optionalDevice.get() instanceof DeviceModel);
237 DeviceModel device = (DeviceModel) optionalDevice.get();
238 assertEquals("FRITZ!DECT 301", device.getProductName());
239 assertEquals("087610000436", device.getIdentifier());
240 assertEquals("21", device.getDeviceId());
241 assertEquals("03.50", device.getFirmwareVersion());
242 assertEquals("AVM", device.getManufacturer());
244 assertEquals(0, device.getPresent());
245 assertEquals("FRITZ!DECT 301 #1", device.getName());
247 assertFalse(device.isButton());
248 assertFalse(device.isHANFUNButton());
249 assertFalse(device.isHANFUNAlarmSensor());
250 assertFalse(device.isDectRepeater());
251 assertFalse(device.isSwitchableOutlet());
252 assertTrue(device.isTempSensor());
253 assertFalse(device.isPowermeter());
254 assertTrue(device.isHeatingThermostat());
256 assertNull(device.getSwitch());
258 assertNotNull(device.getTemperature());
259 assertEquals(new BigDecimal("22.0"), device.getTemperature().getCelsius());
260 assertEquals(new BigDecimal("-1.0"), device.getTemperature().getOffset());
262 assertNull(device.getPowermeter());
264 validateHeatingModel(device.getHkr());
268 public void validateCometDECTModel() {
269 Optional<AVMFritzBaseModel> optionalDevice = findModel("Comet DECT");
270 assertTrue(optionalDevice.isPresent());
271 assertTrue(optionalDevice.get() instanceof DeviceModel);
273 DeviceModel device = (DeviceModel) optionalDevice.get();
274 assertEquals("Comet DECT", device.getProductName());
275 assertEquals("087610000435", device.getIdentifier());
276 assertEquals("22", device.getDeviceId());
277 assertEquals("03.50", device.getFirmwareVersion());
278 assertEquals("AVM", device.getManufacturer());
280 assertEquals(0, device.getPresent());
281 assertEquals("Comet DECT #1", device.getName());
283 assertFalse(device.isButton());
284 assertFalse(device.isHANFUNButton());
285 assertFalse(device.isHANFUNAlarmSensor());
286 assertFalse(device.isDectRepeater());
287 assertFalse(device.isSwitchableOutlet());
288 assertTrue(device.isTempSensor());
289 assertFalse(device.isPowermeter());
290 assertTrue(device.isHeatingThermostat());
292 assertNull(device.getSwitch());
294 assertNotNull(device.getTemperature());
295 assertEquals(new BigDecimal("22.0"), device.getTemperature().getCelsius());
296 assertEquals(new BigDecimal("-1.0"), device.getTemperature().getOffset());
298 assertNull(device.getPowermeter());
300 validateHeatingModel(device.getHkr());
304 public void validateDECT400Model() {
305 Optional<AVMFritzBaseModel> optionalDevice = findModelByIdentifier("130960007307");
306 assertTrue(optionalDevice.isPresent());
307 assertTrue(optionalDevice.get() instanceof DeviceModel);
309 DeviceModel device = (DeviceModel) optionalDevice.get();
310 assertEquals("FRITZ!DECT 400", device.getProductName());
311 assertEquals("130960007307", device.getIdentifier());
312 assertEquals("29", device.getDeviceId());
313 assertEquals("04.90", device.getFirmwareVersion());
314 assertEquals("AVM", device.getManufacturer());
316 assertEquals(1, device.getPresent());
317 assertEquals("FRITZ!DECT 400 #14", device.getName());
319 assertTrue(device.isButton());
320 assertFalse(device.isHANFUNButton());
321 assertFalse(device.isHANFUNAlarmSensor());
322 assertFalse(device.isDectRepeater());
323 assertFalse(device.isSwitchableOutlet());
324 assertFalse(device.isTempSensor());
325 assertFalse(device.isPowermeter());
326 assertFalse(device.isHeatingThermostat());
328 assertEquals(new BigDecimal("100"), device.getBattery());
329 assertEquals(BatteryModel.BATTERY_OFF, device.getBatterylow());
331 assertEquals(2, device.getButtons().size());
332 assertEquals("FRITZ!DECT 400 #14: kurz", device.getButtons().get(0).getName());
333 assertEquals(1549195586, device.getButtons().get(0).getLastpressedtimestamp());
334 assertEquals("FRITZ!DECT 400 #14: lang", device.getButtons().get(1).getName());
335 assertEquals(1549195595, device.getButtons().get(1).getLastpressedtimestamp());
337 assertNull(device.getAlert());
339 assertNull(device.getSwitch());
341 assertNull(device.getTemperature());
343 assertNull(device.getPowermeter());
345 assertNull(device.getHkr());
349 public void validatePowerline546EModel() {
350 Optional<AVMFritzBaseModel> optionalDevice = findModel("FRITZ!Powerline 546E");
351 assertTrue(optionalDevice.isPresent());
352 assertTrue(optionalDevice.get() instanceof DeviceModel);
354 DeviceModel device = (DeviceModel) optionalDevice.get();
355 assertEquals("FRITZ!Powerline 546E", device.getProductName());
356 assertEquals("5C:49:79:F0:A3:84", device.getIdentifier());
357 assertEquals("30", device.getDeviceId());
358 assertEquals("06.92", device.getFirmwareVersion());
359 assertEquals("AVM", device.getManufacturer());
361 assertEquals(1, device.getPresent());
362 assertEquals("FRITZ!Powerline 546E #1", device.getName());
364 assertFalse(device.isButton());
365 assertFalse(device.isHANFUNButton());
366 assertFalse(device.isHANFUNAlarmSensor());
367 assertFalse(device.isDectRepeater());
368 assertTrue(device.isSwitchableOutlet());
369 assertFalse(device.isTempSensor());
370 assertTrue(device.isPowermeter());
371 assertFalse(device.isHeatingThermostat());
373 assertNotNull(device.getSwitch());
374 assertEquals(SwitchModel.OFF, device.getSwitch().getState());
375 assertEquals(MODE_MANUAL, device.getSwitch().getMode());
376 assertEquals(BigDecimal.ZERO, device.getSwitch().getLock());
377 assertEquals(BigDecimal.ONE, device.getSwitch().getDevicelock());
379 assertNull(device.getTemperature());
381 validatePowerMeter(device.getPowermeter());
383 assertNull(device.getHkr());
387 public void validateHANFUNContactModel() {
388 Optional<AVMFritzBaseModel> optionalDevice = findModelByIdentifier("119340059978-1");
389 assertTrue(optionalDevice.isPresent());
390 assertTrue(optionalDevice.get() instanceof DeviceModel);
392 DeviceModel device = (DeviceModel) optionalDevice.get();
393 assertEquals("HAN-FUN", device.getProductName());
394 assertEquals("119340059978-1", device.getIdentifier());
395 assertEquals("2000", device.getDeviceId());
396 assertEquals("0.0", device.getFirmwareVersion());
397 assertEquals("0x0feb", device.getManufacturer());
399 assertEquals(0, device.getPresent());
400 assertEquals("HAN-FUN #2: Unit #2", device.getName());
402 assertFalse(device.isButton());
403 assertFalse(device.isHANFUNButton());
404 assertTrue(device.isHANFUNAlarmSensor());
405 assertFalse(device.isDectRepeater());
406 assertFalse(device.isSwitchableOutlet());
407 assertFalse(device.isTempSensor());
408 assertFalse(device.isPowermeter());
409 assertFalse(device.isHeatingThermostat());
411 assertTrue(device.getButtons().isEmpty());
413 assertNotNull(device.getAlert());
414 assertEquals(BigDecimal.ONE, device.getAlert().getState());
416 assertNull(device.getSwitch());
418 assertNull(device.getTemperature());
420 assertNull(device.getPowermeter());
422 assertNull(device.getHkr());
426 public void validateHANFUNSwitchModel() {
427 Optional<AVMFritzBaseModel> optionalDevice = findModelByIdentifier("119340059979-1");
428 assertTrue(optionalDevice.isPresent());
429 assertTrue(optionalDevice.get() instanceof DeviceModel);
431 DeviceModel device = (DeviceModel) optionalDevice.get();
432 assertEquals("HAN-FUN", device.getProductName());
433 assertEquals("119340059979-1", device.getIdentifier());
434 assertEquals("2001", device.getDeviceId());
435 assertEquals("0.0", device.getFirmwareVersion());
436 assertEquals("0x0feb", device.getManufacturer());
438 assertEquals(0, device.getPresent());
439 assertEquals("HAN-FUN #2: Unit #2", device.getName());
441 assertFalse(device.isButton());
442 assertTrue(device.isHANFUNButton());
443 assertFalse(device.isHANFUNAlarmSensor());
444 assertFalse(device.isDectRepeater());
445 assertFalse(device.isSwitchableOutlet());
446 assertFalse(device.isTempSensor());
447 assertFalse(device.isPowermeter());
448 assertFalse(device.isHeatingThermostat());
450 assertEquals(1, device.getButtons().size());
451 assertEquals(1529590797, device.getButtons().get(0).getLastpressedtimestamp());
453 assertNull(device.getAlert());
455 assertNull(device.getSwitch());
457 assertNull(device.getTemperature());
459 assertNull(device.getPowermeter());
461 assertNull(device.getHkr());
465 public void validateHeatingGroupModel() {
466 Optional<AVMFritzBaseModel> optionalGroup = findModelByIdentifier("F0:A3:7F-901");
467 assertTrue(optionalGroup.isPresent());
468 assertTrue(optionalGroup.get() instanceof GroupModel);
470 GroupModel group = (GroupModel) optionalGroup.get();
471 assertEquals("", group.getProductName());
472 assertEquals("F0:A3:7F-901", group.getIdentifier());
473 assertEquals("20001", group.getDeviceId());
474 assertEquals("1.0", group.getFirmwareVersion());
475 assertEquals("AVM", group.getManufacturer());
477 assertEquals(1, group.getPresent());
478 assertEquals("Schlafzimmer", group.getName());
480 assertFalse(group.isButton());
481 assertFalse(group.isHANFUNButton());
482 assertFalse(group.isHANFUNAlarmSensor());
483 assertFalse(group.isDectRepeater());
484 assertFalse(group.isSwitchableOutlet());
485 assertFalse(group.isTempSensor());
486 assertFalse(group.isPowermeter());
487 assertTrue(group.isHeatingThermostat());
489 assertNull(group.getSwitch());
491 assertNull(group.getPowermeter());
493 validateHeatingModel(group.getHkr());
495 assertNotNull(group.getGroupinfo());
496 assertEquals("0", group.getGroupinfo().getMasterdeviceid());
497 assertEquals("20,21,22", group.getGroupinfo().getMembers());
501 public void validateSwitchGroupModel() {
502 Optional<AVMFritzBaseModel> optionalGroup = findModelByIdentifier("F0:A3:7F-900");
503 assertTrue(optionalGroup.isPresent());
504 assertTrue(optionalGroup.get() instanceof GroupModel);
506 GroupModel group = (GroupModel) optionalGroup.get();
507 assertEquals("", group.getProductName());
508 assertEquals("F0:A3:7F-900", group.getIdentifier());
509 assertEquals("20000", group.getDeviceId());
510 assertEquals("1.0", group.getFirmwareVersion());
511 assertEquals("AVM", group.getManufacturer());
513 assertEquals(1, group.getPresent());
514 assertEquals("Schlafzimmer", group.getName());
516 assertFalse(group.isButton());
517 assertFalse(group.isHANFUNButton());
518 assertFalse(group.isHANFUNAlarmSensor());
519 assertFalse(group.isDectRepeater());
520 assertTrue(group.isSwitchableOutlet());
521 assertFalse(group.isTempSensor());
522 assertTrue(group.isPowermeter());
523 assertFalse(group.isHeatingThermostat());
525 assertNotNull(group.getSwitch());
526 assertEquals(SwitchModel.ON, group.getSwitch().getState());
527 assertEquals(MODE_MANUAL, group.getSwitch().getMode());
528 assertEquals(BigDecimal.ZERO, group.getSwitch().getLock());
529 assertEquals(BigDecimal.ZERO, group.getSwitch().getDevicelock());
531 validatePowerMeter(group.getPowermeter());
533 assertNull(group.getHkr());
535 assertNotNull(group.getGroupinfo());
536 assertEquals("17", group.getGroupinfo().getMasterdeviceid());
537 assertEquals("17,18", group.getGroupinfo().getMembers());
540 private Optional<AVMFritzBaseModel> findModel(String name) {
541 return devices.getDevicelist().stream().filter(it -> name.equals(it.getProductName())).findFirst();
544 private Optional<AVMFritzBaseModel> findModelByIdentifier(String identifier) {
545 return devices.getDevicelist().stream().filter(it -> identifier.equals(it.getIdentifier())).findFirst();
548 private void validatePowerMeter(PowerMeterModel model) {
549 assertNotNull(model);
550 assertEquals(new BigDecimal("230.051"), model.getVoltage());
551 assertEquals(new BigDecimal("0.000"), model.getPower());
552 assertEquals(new BigDecimal("2087"), model.getEnergy());
555 private void validateHeatingModel(HeatingModel model) {
556 assertNotNull(model);
557 assertEquals(new BigDecimal(44), model.getTist());
558 assertEquals(new BigDecimal(42), model.getTsoll());
559 assertEquals(new BigDecimal(28), model.getAbsenk());
560 assertEquals(new BigDecimal(42), model.getKomfort());
561 assertEquals(BigDecimal.ONE, model.getLock());
562 assertEquals(BigDecimal.ONE, model.getDevicelock());
563 assertEquals(BigDecimal.ZERO, model.getWindowopenactiv());
564 assertEquals(BigDecimal.ZERO, model.getBoostactive());
565 assertEquals(new BigDecimal("100"), model.getBattery());
566 assertEquals(BatteryModel.BATTERY_OFF, model.getBatterylow());
567 assertEquals(MODE_AUTO, model.getMode());
568 assertEquals(MODE_COMFORT, model.getRadiatorMode());
570 assertNotNull(model.getNextchange());
571 assertEquals(1484341200, model.getNextchange().getEndperiod());
572 assertEquals(new BigDecimal(28), model.getNextchange().getTchange());