2 * Copyright (c) 2010-2021 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.discovery;
15 import static org.junit.jupiter.api.Assertions.*;
16 import static org.openhab.binding.avmfritz.internal.AVMFritzBindingConstants.*;
17 import static org.openhab.core.thing.Thing.*;
19 import java.io.StringReader;
20 import java.util.Collection;
21 import java.util.Collections;
23 import javax.xml.bind.JAXBException;
24 import javax.xml.bind.Unmarshaller;
26 import org.eclipse.jdt.annotation.NonNullByDefault;
27 import org.eclipse.jdt.annotation.Nullable;
28 import org.junit.jupiter.api.AfterEach;
29 import org.junit.jupiter.api.BeforeEach;
30 import org.junit.jupiter.api.Test;
31 import org.openhab.binding.avmfritz.internal.dto.AVMFritzBaseModel;
32 import org.openhab.binding.avmfritz.internal.dto.DeviceListModel;
33 import org.openhab.binding.avmfritz.internal.handler.AVMFritzThingHandlerOSGiTest;
34 import org.openhab.binding.avmfritz.internal.util.JAXBUtils;
35 import org.openhab.core.config.discovery.DiscoveryListener;
36 import org.openhab.core.config.discovery.DiscoveryResult;
37 import org.openhab.core.config.discovery.DiscoveryResultFlag;
38 import org.openhab.core.config.discovery.DiscoveryService;
39 import org.openhab.core.thing.ThingTypeUID;
40 import org.openhab.core.thing.ThingUID;
43 * Tests for {@link AVMFritzDiscoveryService}.
45 * @author Christoph Weitkamp - Initial contribution
46 * @author Ulrich Mertin - Added support for HAN-FUN blinds
49 public class AVMFritzDiscoveryServiceOSGiTest extends AVMFritzThingHandlerOSGiTest {
51 private static final ThingUID BRIGE_THING_ID = new ThingUID("avmfritz:fritzbox:1");
53 private @Nullable DiscoveryResult discoveryResult;
54 private @NonNullByDefault({}) AVMFritzDiscoveryService discovery;
56 private final DiscoveryListener listener = new DiscoveryListener() {
58 public void thingRemoved(DiscoveryService source, ThingUID thingUID) {
59 discoveryResult = null;
63 public void thingDiscovered(DiscoveryService source, DiscoveryResult result) {
64 discoveryResult = result;
68 public @Nullable Collection<ThingUID> removeOlderResults(DiscoveryService source, long timestamp,
69 @Nullable Collection<ThingTypeUID> thingTypeUIDs, @Nullable ThingUID bridgeUID) {
70 return Collections.emptyList();
78 discovery = new AVMFritzDiscoveryService();
79 discovery.setThingHandler(bridgeHandler);
80 discovery.addDiscoveryListener(listener);
84 public void cleanUp() {
85 discoveryResult = null;
89 public void correctSupportedTypes() {
90 assertEquals(14, discovery.getSupportedThingTypes().size());
91 assertTrue(discovery.getSupportedThingTypes().contains(DECT100_THING_TYPE));
92 assertTrue(discovery.getSupportedThingTypes().contains(DECT200_THING_TYPE));
93 assertTrue(discovery.getSupportedThingTypes().contains(DECT210_THING_TYPE));
94 assertTrue(discovery.getSupportedThingTypes().contains(DECT300_THING_TYPE));
95 assertTrue(discovery.getSupportedThingTypes().contains(DECT301_THING_TYPE));
96 assertTrue(discovery.getSupportedThingTypes().contains(DECT400_THING_TYPE));
97 assertTrue(discovery.getSupportedThingTypes().contains(DECT440_THING_TYPE));
98 assertTrue(discovery.getSupportedThingTypes().contains(PL546E_THING_TYPE));
99 assertTrue(discovery.getSupportedThingTypes().contains(COMETDECT_THING_TYPE));
100 assertTrue(discovery.getSupportedThingTypes().contains(HAN_FUN_CONTACT_THING_TYPE));
101 assertTrue(discovery.getSupportedThingTypes().contains(HAN_FUN_SWITCH_THING_TYPE));
102 assertTrue(discovery.getSupportedThingTypes().contains(HAN_FUN_BLINDS_THING_TYPE));
103 assertTrue(discovery.getSupportedThingTypes().contains(GROUP_HEATING_THING_TYPE));
104 assertTrue(discovery.getSupportedThingTypes().contains(GROUP_SWITCH_THING_TYPE));
108 public void invalidDiscoveryResult() throws JAXBException {
109 // attribute productname is important for a valid discovery result
112 "<devicelist version=\"1\">" +
113 "<device identifier=\"08761 0954669\" id=\"20\" functionbitmask=\"1280\" fwversion=\"03.86\" manufacturer=\"AVM\" productname=\"\">" +
114 "<present>1</present>" +
115 "<name>FRITZ!DECT Repeater 100 #5</name>" +
117 "<celsius>230</celsius>" +
118 "<offset>0</offset>" +
124 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
125 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
126 assertNotNull(devices);
127 assertEquals(1, devices.getDevicelist().size());
129 AVMFritzBaseModel device = devices.getDevicelist().get(0);
130 assertNotNull(device);
132 discovery.onDeviceAdded(device);
133 assertNull(discoveryResult);
137 public void validDECTRepeater100Result() throws JAXBException {
140 "<devicelist version=\"1\">" +
141 "<device identifier=\"08761 0954669\" id=\"20\" functionbitmask=\"1280\" fwversion=\"03.86\" manufacturer=\"AVM\" productname=\"FRITZ!DECT Repeater 100\">" +
142 "<present>1</present>" +
143 "<name>FRITZ!DECT Repeater 100 #5</name>" +
145 "<celsius>230</celsius>" +
146 "<offset>0</offset>" +
152 final Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
153 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
154 assertNotNull(devices);
155 assertEquals(1, devices.getDevicelist().size());
157 AVMFritzBaseModel device = devices.getDevicelist().get(0);
158 assertNotNull(device);
159 assertEquals(1, device.getPresent());
161 discovery.onDeviceAdded(device);
162 assertNotNull(discoveryResult);
164 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
165 assertEquals(new ThingUID("avmfritz:FRITZ_DECT_Repeater_100:1:087610954669"), discoveryResult.getThingUID());
166 assertEquals(DECT100_THING_TYPE, discoveryResult.getThingTypeUID());
167 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
168 assertEquals("087610954669", discoveryResult.getProperties().get(CONFIG_AIN));
169 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
170 assertEquals("FRITZ!DECT Repeater 100", discoveryResult.getProperties().get(PRODUCT_NAME));
171 assertEquals("087610954669", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
172 assertEquals("03.86", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
173 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
175 final String deviceNotPresentXml = xml.replace("<present>1</present>", "<present>0</present>");
176 devices = (DeviceListModel) u.unmarshal(new StringReader(deviceNotPresentXml));
177 assertNotNull(devices);
178 assertEquals(1, devices.getDevicelist().size());
180 device = devices.getDevicelist().get(0);
181 assertNotNull(device);
182 assertEquals(0, device.getPresent());
184 discovery.onDeviceAdded(device);
185 assertNull(discoveryResult);
189 public void validDECT200DiscoveryResult() throws JAXBException {
192 "<devicelist version=\"1\">" +
193 "<device identifier=\"08761 0000434\" id=\"17\" functionbitmask=\"2944\" fwversion=\"03.83\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 200\">" +
194 "<present>1</present>" +
195 "<name>FRITZ!DECT 200 #1</name>" +
198 "<mode>manuell</mode>" +
200 "<devicelock>1</devicelock>" +
203 "<voltage>232850</voltage>" +
204 "<power>45</power>" +
205 "<energy>166</energy>" +
208 "<celsius>255</celsius>" +
209 "<offset>0</offset>" +
215 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
216 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
217 assertNotNull(devices);
218 assertEquals(1, devices.getDevicelist().size());
220 AVMFritzBaseModel device = devices.getDevicelist().get(0);
221 assertNotNull(device);
223 discovery.onDeviceAdded(device);
224 assertNotNull(discoveryResult);
226 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
227 assertEquals(new ThingUID("avmfritz:FRITZ_DECT_200:1:087610000434"), discoveryResult.getThingUID());
228 assertEquals(DECT200_THING_TYPE, discoveryResult.getThingTypeUID());
229 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
230 assertEquals("087610000434", discoveryResult.getProperties().get(CONFIG_AIN));
231 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
232 assertEquals("FRITZ!DECT 200", discoveryResult.getProperties().get(PRODUCT_NAME));
233 assertEquals("087610000434", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
234 assertEquals("03.83", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
235 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
239 public void validDECT210DiscoveryResult() throws JAXBException {
242 "<devicelist version=\"1\">" +
243 "<device identifier=\"08761 0000434\" id=\"17\" functionbitmask=\"2944\" fwversion=\"03.83\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 210\">" +
244 "<present>1</present>" +
245 "<name>FRITZ!DECT 210 #1</name>" +
248 "<mode>manuell</mode>" +
250 "<devicelock>1</devicelock>" +
253 "<voltage>232850</voltage>" +
254 "<power>45</power>" +
255 "<energy>166</energy>" +
258 "<celsius>255</celsius>" +
259 "<offset>0</offset>" +
265 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
266 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
267 assertNotNull(devices);
268 assertEquals(1, devices.getDevicelist().size());
270 AVMFritzBaseModel device = devices.getDevicelist().get(0);
271 assertNotNull(device);
273 discovery.onDeviceAdded(device);
274 assertNotNull(discoveryResult);
276 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
277 assertEquals(new ThingUID("avmfritz:FRITZ_DECT_210:1:087610000434"), discoveryResult.getThingUID());
278 assertEquals(DECT210_THING_TYPE, discoveryResult.getThingTypeUID());
279 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
280 assertEquals("087610000434", discoveryResult.getProperties().get(CONFIG_AIN));
281 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
282 assertEquals("FRITZ!DECT 210", discoveryResult.getProperties().get(PRODUCT_NAME));
283 assertEquals("087610000434", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
284 assertEquals("03.83", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
285 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
289 public void validCometDECTDiscoveryResult() throws JAXBException {
292 "<devicelist version=\"1\">" +
293 "<device identifier=\"08761 0000435\" id=\"18\" functionbitmask=\"320\" fwversion=\"03.50\" manufacturer=\"AVM\" productname=\"Comet DECT\">" +
294 "<present>1</present>" +
295 "<name>Comet DECT #1</name>" +
297 "<celsius>220</celsius>" +
298 "<offset>-10</offset>" +
302 "<tsoll>42</tsoll>" +
303 "<absenk>28</absenk>" +
304 "<komfort>42</komfort>" +
306 "<devicelock>0</devicelock>" +
307 "<errorcode>0</errorcode>" +
308 "<batterylow>0</batterylow>" +
310 "<endperiod>1484341200</endperiod>" +
311 "<tchange>28</tchange>" +
318 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
319 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
320 assertNotNull(devices);
321 assertEquals(1, devices.getDevicelist().size());
323 AVMFritzBaseModel device = devices.getDevicelist().get(0);
324 assertNotNull(device);
326 discovery.onDeviceAdded(device);
327 assertNotNull(discoveryResult);
329 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
330 assertEquals(new ThingUID("avmfritz:Comet_DECT:1:087610000435"), discoveryResult.getThingUID());
331 assertEquals(COMETDECT_THING_TYPE, discoveryResult.getThingTypeUID());
332 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
333 assertEquals("087610000435", discoveryResult.getProperties().get(CONFIG_AIN));
334 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
335 assertEquals("Comet DECT", discoveryResult.getProperties().get(PRODUCT_NAME));
336 assertEquals("087610000435", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
337 assertEquals("03.50", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
338 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
342 public void validDECT300DiscoveryResult() throws JAXBException {
345 "<devicelist version=\"1\">" +
346 "<device identifier=\"08761 0000435\" id=\"18\" functionbitmask=\"320\" fwversion=\"03.50\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 300\">" +
347 "<present>1</present>" +
348 "<name>FRITZ!DECT 300 #1</name>" +
350 "<celsius>220</celsius>" +
351 "<offset>-10</offset>" +
355 "<tsoll>42</tsoll>" +
356 "<absenk>28</absenk>" +
357 "<komfort>42</komfort>" +
359 "<devicelock>0</devicelock>" +
360 "<errorcode>0</errorcode>" +
361 "<batterylow>0</batterylow>" +
363 "<endperiod>1484341200</endperiod>" +
364 "<tchange>28</tchange>" +
371 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
372 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
373 assertNotNull(devices);
374 assertEquals(1, devices.getDevicelist().size());
376 AVMFritzBaseModel device = devices.getDevicelist().get(0);
377 assertNotNull(device);
379 discovery.onDeviceAdded(device);
380 assertNotNull(discoveryResult);
382 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
383 assertEquals(new ThingUID("avmfritz:FRITZ_DECT_300:1:087610000435"), discoveryResult.getThingUID());
384 assertEquals(DECT300_THING_TYPE, discoveryResult.getThingTypeUID());
385 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
386 assertEquals("087610000435", discoveryResult.getProperties().get(CONFIG_AIN));
387 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
388 assertEquals("FRITZ!DECT 300", discoveryResult.getProperties().get(PRODUCT_NAME));
389 assertEquals("087610000435", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
390 assertEquals("03.50", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
391 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
395 public void validDECT301DiscoveryResult() throws JAXBException {
398 "<devicelist version=\"1\">" +
399 "<device identifier=\"08761 0000435\" id=\"18\" functionbitmask=\"320\" fwversion=\"03.50\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 301\">" +
400 "<present>1</present>" +
401 "<name>FRITZ!DECT 301 #1</name>" +
403 "<celsius>220</celsius>" +
404 "<offset>-10</offset>" +
408 "<tsoll>42</tsoll>" +
409 "<absenk>28</absenk>" +
410 "<komfort>42</komfort>" +
412 "<devicelock>0</devicelock>" +
413 "<errorcode>0</errorcode>" +
414 "<batterylow>0</batterylow>" +
416 "<endperiod>1484341200</endperiod>" +
417 "<tchange>28</tchange>" +
424 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
425 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
426 assertNotNull(devices);
427 assertEquals(1, devices.getDevicelist().size());
429 AVMFritzBaseModel device = devices.getDevicelist().get(0);
430 assertNotNull(device);
432 discovery.onDeviceAdded(device);
433 assertNotNull(discoveryResult);
435 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
436 assertEquals(new ThingUID("avmfritz:FRITZ_DECT_301:1:087610000435"), discoveryResult.getThingUID());
437 assertEquals(DECT301_THING_TYPE, discoveryResult.getThingTypeUID());
438 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
439 assertEquals("087610000435", discoveryResult.getProperties().get(CONFIG_AIN));
440 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
441 assertEquals("FRITZ!DECT 301", discoveryResult.getProperties().get(PRODUCT_NAME));
442 assertEquals("087610000435", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
443 assertEquals("03.50", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
444 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
448 public void validPowerline546EDiscoveryResult() throws JAXBException {
451 "<devicelist version=\"1\">" +
452 "<device identifier=\"5C:49:79:F0:A3:84\" id=\"19\" functionbitmask=\"640\" fwversion=\"06.92\" manufacturer=\"AVM\" productname=\"FRITZ!Powerline 546E\">" +
453 "<present>1</present>" +
454 "<name>FRITZ!Powerline 546E #1</name>" +
457 "<mode>manuell</mode>" +
459 "<devicelock>1</devicelock>" +
462 "<voltage>232850</voltage>" +
464 "<energy>2087</energy>" +
470 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
471 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
472 assertNotNull(devices);
473 assertEquals(1, devices.getDevicelist().size());
475 AVMFritzBaseModel device = devices.getDevicelist().get(0);
476 assertNotNull(device);
478 discovery.onDeviceAdded(device);
479 assertNotNull(discoveryResult);
481 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
482 assertEquals(new ThingUID("avmfritz:FRITZ_Powerline_546E:1:5C_49_79_F0_A3_84"), discoveryResult.getThingUID());
483 assertEquals(PL546E_THING_TYPE, discoveryResult.getThingTypeUID());
484 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
485 assertEquals("5C:49:79:F0:A3:84", discoveryResult.getProperties().get(CONFIG_AIN));
486 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
487 assertEquals("FRITZ!Powerline 546E", discoveryResult.getProperties().get(PRODUCT_NAME));
488 assertEquals("5C:49:79:F0:A3:84", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
489 assertEquals("06.92", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
490 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
494 public void invalidHANFUNContactDiscoveryResult() throws JAXBException {
497 "<devicelist version=\"1\">" +
498 "<device identifier=\"11934 0059578\" id=\"406\" functionbitmask=\"1\" fwversion=\"00.00\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\">" +
499 "<present>1</present>" +
500 "<name>HAN-FUN #2</name>" +
505 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
506 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
507 assertNotNull(devices);
508 assertEquals(1, devices.getDevicelist().size());
510 AVMFritzBaseModel device = devices.getDevicelist().get(0);
511 assertNotNull(device);
513 discovery.onDeviceAdded(device);
514 assertNull(discoveryResult);
518 public void validHANFUNMagneticContactDiscoveryResult() throws JAXBException {
521 "<devicelist version=\"1\">" +
522 "<device identifier=\"11934 0059578-1\" id=\"2000\" functionbitmask=\"8208\" fwversion=\"0.0\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\">" +
523 "<present>1</present>" +
524 "<name>HAN-FUN #2: Unit #2</name>" +
526 "<etsideviceid>406</etsideviceid>" +
527 "<unittype>513</unittype>" +
528 "<interfaces>256</interfaces>" +
537 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
538 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
539 assertNotNull(devices);
540 assertEquals(1, devices.getDevicelist().size());
542 AVMFritzBaseModel device = devices.getDevicelist().get(0);
543 assertNotNull(device);
545 discovery.onDeviceAdded(device);
546 assertNotNull(discoveryResult);
548 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
549 assertEquals(new ThingUID("avmfritz:HAN_FUN_CONTACT:1:119340059578_1"), discoveryResult.getThingUID());
550 assertEquals(HAN_FUN_CONTACT_THING_TYPE, discoveryResult.getThingTypeUID());
551 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
552 assertEquals("119340059578-1", discoveryResult.getProperties().get(CONFIG_AIN));
553 assertEquals("0x0feb", discoveryResult.getProperties().get(PROPERTY_VENDOR));
554 assertEquals("HAN-FUN", discoveryResult.getProperties().get(PRODUCT_NAME));
555 assertEquals("119340059578-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
556 assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
557 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
561 public void validHANFUNOpticalContactDiscoveryResult() throws JAXBException {
564 "<devicelist version=\"1\">" +
565 "<device identifier=\"11934 0059578-1\" id=\"2001\" functionbitmask=\"8208\" fwversion=\"0.0\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\">" +
566 "<present>1</present>" +
567 "<name>HAN-FUN #3: Unit #3</name>" +
569 "<etsideviceid>406</etsideviceid>" +
570 "<unittype>514</unittype>" +
571 "<interfaces>256</interfaces>" +
580 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
581 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
582 assertNotNull(devices);
583 assertEquals(1, devices.getDevicelist().size());
585 AVMFritzBaseModel device = devices.getDevicelist().get(0);
586 assertNotNull(device);
588 discovery.onDeviceAdded(device);
589 assertNotNull(discoveryResult);
591 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
592 assertEquals(new ThingUID("avmfritz:HAN_FUN_CONTACT:1:119340059578_1"), discoveryResult.getThingUID());
593 assertEquals(HAN_FUN_CONTACT_THING_TYPE, discoveryResult.getThingTypeUID());
594 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
595 assertEquals("119340059578-1", discoveryResult.getProperties().get(CONFIG_AIN));
596 assertEquals("0x0feb", discoveryResult.getProperties().get(PROPERTY_VENDOR));
597 assertEquals("HAN-FUN", discoveryResult.getProperties().get(PRODUCT_NAME));
598 assertEquals("119340059578-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
599 assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
600 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
604 public void validHANFUNMotionSensorDiscoveryResult() throws JAXBException {
607 "<devicelist version=\"1\">" +
608 "<device identifier=\"11934 0059578-1\" id=\"2002\" functionbitmask=\"8208\" fwversion=\"0.0\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\">" +
609 "<present>1</present>" +
610 "<name>HAN-FUN #3: Unit #3</name>" +
612 "<etsideviceid>408</etsideviceid>" +
613 "<unittype>515</unittype>" +
614 "<interfaces>32513,256</interfaces>" +
623 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
624 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
625 assertNotNull(devices);
626 assertEquals(1, devices.getDevicelist().size());
628 AVMFritzBaseModel device = devices.getDevicelist().get(0);
629 assertNotNull(device);
631 discovery.onDeviceAdded(device);
632 assertNotNull(discoveryResult);
634 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
635 assertEquals(new ThingUID("avmfritz:HAN_FUN_CONTACT:1:119340059578_1"), discoveryResult.getThingUID());
636 assertEquals(HAN_FUN_CONTACT_THING_TYPE, discoveryResult.getThingTypeUID());
637 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
638 assertEquals("119340059578-1", discoveryResult.getProperties().get(CONFIG_AIN));
639 assertEquals("0x0feb", discoveryResult.getProperties().get(PROPERTY_VENDOR));
640 assertEquals("HAN-FUN", discoveryResult.getProperties().get(PRODUCT_NAME));
641 assertEquals("119340059578-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
642 assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
643 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
647 public void validHANFUNMSmokeDetectorDiscoveryResult() throws JAXBException {
650 "<devicelist version=\"1\">" +
651 "<device identifier=\"11324 0059952-1\" id=\"2003\" functionbitmask=\"8208\" fwversion=\"0.0\" manufacturer=\"0x2c3c\" productname=\"HAN-FUN\">" +
652 "<present>1</present>" +
653 "<name>HAN-FUN #4: Unit #4</name>" +
655 "<etsideviceid>407</etsideviceid>" +
656 "<unittype>516</unittype>" +
657 "<interfaces>256</interfaces>" +
666 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
667 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
668 assertNotNull(devices);
669 assertEquals(1, devices.getDevicelist().size());
671 AVMFritzBaseModel device = devices.getDevicelist().get(0);
672 assertNotNull(device);
674 discovery.onDeviceAdded(device);
675 assertNotNull(discoveryResult);
677 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
678 assertEquals(new ThingUID("avmfritz:HAN_FUN_CONTACT:1:113240059952_1"), discoveryResult.getThingUID());
679 assertEquals(HAN_FUN_CONTACT_THING_TYPE, discoveryResult.getThingTypeUID());
680 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
681 assertEquals("113240059952-1", discoveryResult.getProperties().get(CONFIG_AIN));
682 assertEquals("0x2c3c", discoveryResult.getProperties().get(PROPERTY_VENDOR));
683 assertEquals("HAN-FUN", discoveryResult.getProperties().get(PRODUCT_NAME));
684 assertEquals("113240059952-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
685 assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
686 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
690 public void validHANFUNSwitchtDiscoveryResult() throws JAXBException {
693 "<devicelist version=\"1\">" +
694 "<device identifier=\"11934 0059578-1\" id=\"2001\" functionbitmask=\"8200\" fwversion=\"0.0\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\">" +
695 "<present>1</present>" +
696 "<name>HAN-FUN #2: Unit #2</name>" +
698 "<etsideviceid>412</etsideviceid>" +
699 "<unittype>273</unittype>" +
700 "<interfaces>772</interfaces>" +
703 "<lastpressedtimestamp>1529590797</lastpressedtimestamp>" +
709 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
710 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
711 assertNotNull(devices);
712 assertEquals(1, devices.getDevicelist().size());
714 AVMFritzBaseModel device = devices.getDevicelist().get(0);
715 assertNotNull(device);
717 discovery.onDeviceAdded(device);
718 assertNotNull(discoveryResult);
720 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
721 assertEquals(new ThingUID("avmfritz:HAN_FUN_SWITCH:1:119340059578_1"), discoveryResult.getThingUID());
722 assertEquals(HAN_FUN_SWITCH_THING_TYPE, discoveryResult.getThingTypeUID());
723 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
724 assertEquals("119340059578-1", discoveryResult.getProperties().get(CONFIG_AIN));
725 assertEquals("0x0feb", discoveryResult.getProperties().get(PROPERTY_VENDOR));
726 assertEquals("HAN-FUN", discoveryResult.getProperties().get(PRODUCT_NAME));
727 assertEquals("119340059578-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
728 assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
729 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
733 public void validHANFUNBlindDiscoveryResult() throws JAXBException {
736 "<devicelist version=\"1\">" +
737 "<device identifier=\"14276 0503450-1\" id=\"2000\" functionbitmask=\"335888\" fwversion=\"0.0\" manufacturer=\"0x37c4\" productname=\"Rollotron 1213\">"+
738 "<present>1</present>"+
739 "<txbusy>0</txbusy>"+
740 "<name>Rollotron 1213 #1</name>"+
742 "<endpositionsset>1</endpositionsset>"+
743 "<mode>manuell</mode>"+
747 "<levelpercentage>10</levelpercentage>"+
750 "<etsideviceid>406</etsideviceid>"+
751 "<unittype>281</unittype>"+
752 "<interfaces>256,513,516,517</interfaces>"+
756 "<lastalertchgtimestamp></lastalertchgtimestamp>"+
762 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
763 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
764 assertNotNull(devices);
765 assertEquals(1, devices.getDevicelist().size());
767 AVMFritzBaseModel device = devices.getDevicelist().get(0);
768 assertNotNull(device);
770 discovery.onDeviceAdded(device);
771 assertNotNull(discoveryResult);
773 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
774 assertEquals(new ThingUID("avmfritz:HAN_FUN_BLINDS:1:142760503450_1"), discoveryResult.getThingUID());
775 assertEquals(HAN_FUN_BLINDS_THING_TYPE, discoveryResult.getThingTypeUID());
776 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
777 assertEquals("142760503450-1", discoveryResult.getProperties().get(CONFIG_AIN));
778 assertEquals("0x37c4", discoveryResult.getProperties().get(PROPERTY_VENDOR));
779 assertEquals("Rollotron 1213", discoveryResult.getProperties().get(PRODUCT_NAME));
780 assertEquals("142760503450-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
781 assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
782 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
786 public void validHeatingGroupDiscoveryResult() throws JAXBException {
789 "<devicelist version=\"1\">" +
790 "<group identifier=\"F0:A3:7F-900\" id=\"20000\" functionbitmask=\"4160\" fwversion=\"1.0\" manufacturer=\"AVM\" productname=\"\">" +
791 "<present>1</present>" +
792 "<name>Schlafzimmer</name>" +
795 "<tsoll>253</tsoll>" +
796 "<absenk>33</absenk>" +
797 "<komfort>40</komfort>" +
799 "<devicelock>0</devicelock>" +
800 "<errorcode>0</errorcode>" +
801 "<batterylow>0</batterylow>" +
802 "<windowopenactiv>0</windowopenactiv>" +
803 "<battery>1</battery>" +
805 "<endperiod>1546293600</endperiod>" +
806 "<tchange>33</tchange>" +
808 "<summeractive>1</summeractive>" +
809 "<holidayactive>0</holidayactive>" +
812 "<masterdeviceid>1000</masterdeviceid>" +
813 "<members>20000</members>" +
819 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
820 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
821 assertNotNull(devices);
822 assertEquals(1, devices.getDevicelist().size());
824 AVMFritzBaseModel device = devices.getDevicelist().get(0);
825 assertNotNull(device);
827 discovery.onDeviceAdded(device);
828 assertNotNull(discoveryResult);
830 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
831 assertEquals(new ThingUID("avmfritz:FRITZ_GROUP_HEATING:1:F0_A3_7F_900"), discoveryResult.getThingUID());
832 assertEquals(GROUP_HEATING_THING_TYPE, discoveryResult.getThingTypeUID());
833 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
834 assertEquals("F0:A3:7F-900", discoveryResult.getProperties().get(CONFIG_AIN));
835 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
836 assertEquals("", discoveryResult.getProperties().get(PRODUCT_NAME));
837 assertEquals("F0:A3:7F-900", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
838 assertEquals("1.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
839 assertEquals("1000", discoveryResult.getProperties().get(PROPERTY_MASTER));
840 assertEquals("20000", discoveryResult.getProperties().get(PROPERTY_MEMBERS));
841 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
845 public void validSwitchGroupDiscoveryResult() throws JAXBException {
848 "<devicelist version=\"1\">" +
849 "<group identifier=\"F0:A3:7F-900\" id=\"20001\" functionbitmask=\"6784\" fwversion=\"1.0\" manufacturer=\"AVM\" productname=\"\">" +
850 "<present>1</present>" +
851 "<name>Schlafzimmer</name>" +
854 "<mode>manuell</mode>" +
856 "<devicelock>0</devicelock>" +
859 "<voltage>232850</voltage>" +
861 "<energy>2087</energy>" +
864 "<masterdeviceid>1000</masterdeviceid>" +
865 "<members>20000</members>" +
871 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
872 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
873 assertNotNull(devices);
874 assertEquals(1, devices.getDevicelist().size());
876 AVMFritzBaseModel device = devices.getDevicelist().get(0);
877 assertNotNull(device);
879 discovery.onDeviceAdded(device);
880 assertNotNull(discoveryResult);
882 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
883 assertEquals(new ThingUID("avmfritz:FRITZ_GROUP_SWITCH:1:F0_A3_7F_900"), discoveryResult.getThingUID());
884 assertEquals(GROUP_SWITCH_THING_TYPE, discoveryResult.getThingTypeUID());
885 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
886 assertEquals("F0:A3:7F-900", discoveryResult.getProperties().get(CONFIG_AIN));
887 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
888 assertEquals("", discoveryResult.getProperties().get(PRODUCT_NAME));
889 assertEquals("F0:A3:7F-900", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
890 assertEquals("1.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
891 assertEquals("1000", discoveryResult.getProperties().get(PROPERTY_MASTER));
892 assertEquals("20000", discoveryResult.getProperties().get(PROPERTY_MEMBERS));
893 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());