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
48 public class AVMFritzDiscoveryServiceOSGiTest extends AVMFritzThingHandlerOSGiTest {
50 private static final ThingUID BRIGE_THING_ID = new ThingUID("avmfritz:fritzbox:1");
52 private @Nullable DiscoveryResult discoveryResult;
53 private @NonNullByDefault({}) AVMFritzDiscoveryService discovery;
55 private final DiscoveryListener listener = new DiscoveryListener() {
57 public void thingRemoved(DiscoveryService source, ThingUID thingUID) {
58 discoveryResult = null;
62 public void thingDiscovered(DiscoveryService source, DiscoveryResult result) {
63 discoveryResult = result;
67 public @Nullable Collection<ThingUID> removeOlderResults(DiscoveryService source, long timestamp,
68 @Nullable Collection<ThingTypeUID> thingTypeUIDs, @Nullable ThingUID bridgeUID) {
69 return Collections.emptyList();
77 discovery = new AVMFritzDiscoveryService();
78 discovery.setThingHandler(bridgeHandler);
79 discovery.addDiscoveryListener(listener);
83 public void cleanUp() {
84 discoveryResult = null;
88 public void correctSupportedTypes() {
89 assertEquals(13, discovery.getSupportedThingTypes().size());
90 assertTrue(discovery.getSupportedThingTypes().contains(DECT100_THING_TYPE));
91 assertTrue(discovery.getSupportedThingTypes().contains(DECT200_THING_TYPE));
92 assertTrue(discovery.getSupportedThingTypes().contains(DECT210_THING_TYPE));
93 assertTrue(discovery.getSupportedThingTypes().contains(DECT300_THING_TYPE));
94 assertTrue(discovery.getSupportedThingTypes().contains(DECT301_THING_TYPE));
95 assertTrue(discovery.getSupportedThingTypes().contains(DECT400_THING_TYPE));
96 assertTrue(discovery.getSupportedThingTypes().contains(DECT440_THING_TYPE));
97 assertTrue(discovery.getSupportedThingTypes().contains(PL546E_THING_TYPE));
98 assertTrue(discovery.getSupportedThingTypes().contains(COMETDECT_THING_TYPE));
99 assertTrue(discovery.getSupportedThingTypes().contains(HAN_FUN_CONTACT_THING_TYPE));
100 assertTrue(discovery.getSupportedThingTypes().contains(HAN_FUN_SWITCH_THING_TYPE));
101 assertTrue(discovery.getSupportedThingTypes().contains(GROUP_HEATING_THING_TYPE));
102 assertTrue(discovery.getSupportedThingTypes().contains(GROUP_SWITCH_THING_TYPE));
106 public void invalidDiscoveryResult() throws JAXBException {
107 // attribute productname is important for a valid discovery result
110 "<devicelist version=\"1\">" +
111 "<device identifier=\"08761 0954669\" id=\"20\" functionbitmask=\"1280\" fwversion=\"03.86\" manufacturer=\"AVM\" productname=\"\">" +
112 "<present>1</present>" +
113 "<name>FRITZ!DECT Repeater 100 #5</name>" +
115 "<celsius>230</celsius>" +
116 "<offset>0</offset>" +
122 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
123 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
124 assertNotNull(devices);
125 assertEquals(1, devices.getDevicelist().size());
127 AVMFritzBaseModel device = devices.getDevicelist().get(0);
128 assertNotNull(device);
130 discovery.onDeviceAdded(device);
131 assertNull(discoveryResult);
135 public void validDECTRepeater100Result() throws JAXBException {
138 "<devicelist version=\"1\">" +
139 "<device identifier=\"08761 0954669\" id=\"20\" functionbitmask=\"1280\" fwversion=\"03.86\" manufacturer=\"AVM\" productname=\"FRITZ!DECT Repeater 100\">" +
140 "<present>1</present>" +
141 "<name>FRITZ!DECT Repeater 100 #5</name>" +
143 "<celsius>230</celsius>" +
144 "<offset>0</offset>" +
150 final Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
151 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
152 assertNotNull(devices);
153 assertEquals(1, devices.getDevicelist().size());
155 AVMFritzBaseModel device = devices.getDevicelist().get(0);
156 assertNotNull(device);
157 assertEquals(1, device.getPresent());
159 discovery.onDeviceAdded(device);
160 assertNotNull(discoveryResult);
162 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
163 assertEquals(new ThingUID("avmfritz:FRITZ_DECT_Repeater_100:1:087610954669"), discoveryResult.getThingUID());
164 assertEquals(DECT100_THING_TYPE, discoveryResult.getThingTypeUID());
165 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
166 assertEquals("087610954669", discoveryResult.getProperties().get(CONFIG_AIN));
167 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
168 assertEquals("FRITZ!DECT Repeater 100", discoveryResult.getProperties().get(PRODUCT_NAME));
169 assertEquals("087610954669", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
170 assertEquals("03.86", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
171 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
173 final String deviceNotPresentXml = xml.replace("<present>1</present>", "<present>0</present>");
174 devices = (DeviceListModel) u.unmarshal(new StringReader(deviceNotPresentXml));
175 assertNotNull(devices);
176 assertEquals(1, devices.getDevicelist().size());
178 device = devices.getDevicelist().get(0);
179 assertNotNull(device);
180 assertEquals(0, device.getPresent());
182 discovery.onDeviceAdded(device);
183 assertNull(discoveryResult);
187 public void validDECT200DiscoveryResult() throws JAXBException {
190 "<devicelist version=\"1\">" +
191 "<device identifier=\"08761 0000434\" id=\"17\" functionbitmask=\"2944\" fwversion=\"03.83\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 200\">" +
192 "<present>1</present>" +
193 "<name>FRITZ!DECT 200 #1</name>" +
196 "<mode>manuell</mode>" +
198 "<devicelock>1</devicelock>" +
201 "<voltage>232850</voltage>" +
202 "<power>45</power>" +
203 "<energy>166</energy>" +
206 "<celsius>255</celsius>" +
207 "<offset>0</offset>" +
213 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
214 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
215 assertNotNull(devices);
216 assertEquals(1, devices.getDevicelist().size());
218 AVMFritzBaseModel device = devices.getDevicelist().get(0);
219 assertNotNull(device);
221 discovery.onDeviceAdded(device);
222 assertNotNull(discoveryResult);
224 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
225 assertEquals(new ThingUID("avmfritz:FRITZ_DECT_200:1:087610000434"), discoveryResult.getThingUID());
226 assertEquals(DECT200_THING_TYPE, discoveryResult.getThingTypeUID());
227 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
228 assertEquals("087610000434", discoveryResult.getProperties().get(CONFIG_AIN));
229 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
230 assertEquals("FRITZ!DECT 200", discoveryResult.getProperties().get(PRODUCT_NAME));
231 assertEquals("087610000434", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
232 assertEquals("03.83", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
233 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
237 public void validDECT210DiscoveryResult() throws JAXBException {
240 "<devicelist version=\"1\">" +
241 "<device identifier=\"08761 0000434\" id=\"17\" functionbitmask=\"2944\" fwversion=\"03.83\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 210\">" +
242 "<present>1</present>" +
243 "<name>FRITZ!DECT 210 #1</name>" +
246 "<mode>manuell</mode>" +
248 "<devicelock>1</devicelock>" +
251 "<voltage>232850</voltage>" +
252 "<power>45</power>" +
253 "<energy>166</energy>" +
256 "<celsius>255</celsius>" +
257 "<offset>0</offset>" +
263 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
264 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
265 assertNotNull(devices);
266 assertEquals(1, devices.getDevicelist().size());
268 AVMFritzBaseModel device = devices.getDevicelist().get(0);
269 assertNotNull(device);
271 discovery.onDeviceAdded(device);
272 assertNotNull(discoveryResult);
274 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
275 assertEquals(new ThingUID("avmfritz:FRITZ_DECT_210:1:087610000434"), discoveryResult.getThingUID());
276 assertEquals(DECT210_THING_TYPE, discoveryResult.getThingTypeUID());
277 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
278 assertEquals("087610000434", discoveryResult.getProperties().get(CONFIG_AIN));
279 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
280 assertEquals("FRITZ!DECT 210", discoveryResult.getProperties().get(PRODUCT_NAME));
281 assertEquals("087610000434", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
282 assertEquals("03.83", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
283 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
287 public void validCometDECTDiscoveryResult() throws JAXBException {
290 "<devicelist version=\"1\">" +
291 "<device identifier=\"08761 0000435\" id=\"18\" functionbitmask=\"320\" fwversion=\"03.50\" manufacturer=\"AVM\" productname=\"Comet DECT\">" +
292 "<present>1</present>" +
293 "<name>Comet DECT #1</name>" +
295 "<celsius>220</celsius>" +
296 "<offset>-10</offset>" +
300 "<tsoll>42</tsoll>" +
301 "<absenk>28</absenk>" +
302 "<komfort>42</komfort>" +
304 "<devicelock>0</devicelock>" +
305 "<errorcode>0</errorcode>" +
306 "<batterylow>0</batterylow>" +
308 "<endperiod>1484341200</endperiod>" +
309 "<tchange>28</tchange>" +
316 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
317 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
318 assertNotNull(devices);
319 assertEquals(1, devices.getDevicelist().size());
321 AVMFritzBaseModel device = devices.getDevicelist().get(0);
322 assertNotNull(device);
324 discovery.onDeviceAdded(device);
325 assertNotNull(discoveryResult);
327 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
328 assertEquals(new ThingUID("avmfritz:Comet_DECT:1:087610000435"), discoveryResult.getThingUID());
329 assertEquals(COMETDECT_THING_TYPE, discoveryResult.getThingTypeUID());
330 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
331 assertEquals("087610000435", discoveryResult.getProperties().get(CONFIG_AIN));
332 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
333 assertEquals("Comet DECT", discoveryResult.getProperties().get(PRODUCT_NAME));
334 assertEquals("087610000435", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
335 assertEquals("03.50", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
336 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
340 public void validDECT300DiscoveryResult() throws JAXBException {
343 "<devicelist version=\"1\">" +
344 "<device identifier=\"08761 0000435\" id=\"18\" functionbitmask=\"320\" fwversion=\"03.50\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 300\">" +
345 "<present>1</present>" +
346 "<name>FRITZ!DECT 300 #1</name>" +
348 "<celsius>220</celsius>" +
349 "<offset>-10</offset>" +
353 "<tsoll>42</tsoll>" +
354 "<absenk>28</absenk>" +
355 "<komfort>42</komfort>" +
357 "<devicelock>0</devicelock>" +
358 "<errorcode>0</errorcode>" +
359 "<batterylow>0</batterylow>" +
361 "<endperiod>1484341200</endperiod>" +
362 "<tchange>28</tchange>" +
369 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
370 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
371 assertNotNull(devices);
372 assertEquals(1, devices.getDevicelist().size());
374 AVMFritzBaseModel device = devices.getDevicelist().get(0);
375 assertNotNull(device);
377 discovery.onDeviceAdded(device);
378 assertNotNull(discoveryResult);
380 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
381 assertEquals(new ThingUID("avmfritz:FRITZ_DECT_300:1:087610000435"), discoveryResult.getThingUID());
382 assertEquals(DECT300_THING_TYPE, discoveryResult.getThingTypeUID());
383 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
384 assertEquals("087610000435", discoveryResult.getProperties().get(CONFIG_AIN));
385 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
386 assertEquals("FRITZ!DECT 300", discoveryResult.getProperties().get(PRODUCT_NAME));
387 assertEquals("087610000435", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
388 assertEquals("03.50", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
389 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
393 public void validDECT301DiscoveryResult() throws JAXBException {
396 "<devicelist version=\"1\">" +
397 "<device identifier=\"08761 0000435\" id=\"18\" functionbitmask=\"320\" fwversion=\"03.50\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 301\">" +
398 "<present>1</present>" +
399 "<name>FRITZ!DECT 301 #1</name>" +
401 "<celsius>220</celsius>" +
402 "<offset>-10</offset>" +
406 "<tsoll>42</tsoll>" +
407 "<absenk>28</absenk>" +
408 "<komfort>42</komfort>" +
410 "<devicelock>0</devicelock>" +
411 "<errorcode>0</errorcode>" +
412 "<batterylow>0</batterylow>" +
414 "<endperiod>1484341200</endperiod>" +
415 "<tchange>28</tchange>" +
422 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
423 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
424 assertNotNull(devices);
425 assertEquals(1, devices.getDevicelist().size());
427 AVMFritzBaseModel device = devices.getDevicelist().get(0);
428 assertNotNull(device);
430 discovery.onDeviceAdded(device);
431 assertNotNull(discoveryResult);
433 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
434 assertEquals(new ThingUID("avmfritz:FRITZ_DECT_301:1:087610000435"), discoveryResult.getThingUID());
435 assertEquals(DECT301_THING_TYPE, discoveryResult.getThingTypeUID());
436 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
437 assertEquals("087610000435", discoveryResult.getProperties().get(CONFIG_AIN));
438 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
439 assertEquals("FRITZ!DECT 301", discoveryResult.getProperties().get(PRODUCT_NAME));
440 assertEquals("087610000435", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
441 assertEquals("03.50", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
442 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
446 public void validPowerline546EDiscoveryResult() throws JAXBException {
449 "<devicelist version=\"1\">" +
450 "<device identifier=\"5C:49:79:F0:A3:84\" id=\"19\" functionbitmask=\"640\" fwversion=\"06.92\" manufacturer=\"AVM\" productname=\"FRITZ!Powerline 546E\">" +
451 "<present>1</present>" +
452 "<name>FRITZ!Powerline 546E #1</name>" +
455 "<mode>manuell</mode>" +
457 "<devicelock>1</devicelock>" +
460 "<voltage>232850</voltage>" +
462 "<energy>2087</energy>" +
468 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
469 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
470 assertNotNull(devices);
471 assertEquals(1, devices.getDevicelist().size());
473 AVMFritzBaseModel device = devices.getDevicelist().get(0);
474 assertNotNull(device);
476 discovery.onDeviceAdded(device);
477 assertNotNull(discoveryResult);
479 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
480 assertEquals(new ThingUID("avmfritz:FRITZ_Powerline_546E:1:5C_49_79_F0_A3_84"), discoveryResult.getThingUID());
481 assertEquals(PL546E_THING_TYPE, discoveryResult.getThingTypeUID());
482 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
483 assertEquals("5C:49:79:F0:A3:84", discoveryResult.getProperties().get(CONFIG_AIN));
484 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
485 assertEquals("FRITZ!Powerline 546E", discoveryResult.getProperties().get(PRODUCT_NAME));
486 assertEquals("5C:49:79:F0:A3:84", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
487 assertEquals("06.92", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
488 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
492 public void invalidHANFUNContactDiscoveryResult() throws JAXBException {
495 "<devicelist version=\"1\">" +
496 "<device identifier=\"11934 0059578\" id=\"406\" functionbitmask=\"1\" fwversion=\"00.00\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\">" +
497 "<present>1</present>" +
498 "<name>HAN-FUN #2</name>" +
503 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
504 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
505 assertNotNull(devices);
506 assertEquals(1, devices.getDevicelist().size());
508 AVMFritzBaseModel device = devices.getDevicelist().get(0);
509 assertNotNull(device);
511 discovery.onDeviceAdded(device);
512 assertNull(discoveryResult);
516 public void validHANFUNMagneticContactDiscoveryResult() throws JAXBException {
519 "<devicelist version=\"1\">" +
520 "<device identifier=\"11934 0059578-1\" id=\"2000\" functionbitmask=\"8208\" fwversion=\"0.0\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\">" +
521 "<present>1</present>" +
522 "<name>HAN-FUN #2: Unit #2</name>" +
524 "<etsideviceid>406</etsideviceid>" +
525 "<unittype>513</unittype>" +
526 "<interfaces>256</interfaces>" +
535 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
536 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
537 assertNotNull(devices);
538 assertEquals(1, devices.getDevicelist().size());
540 AVMFritzBaseModel device = devices.getDevicelist().get(0);
541 assertNotNull(device);
543 discovery.onDeviceAdded(device);
544 assertNotNull(discoveryResult);
546 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
547 assertEquals(new ThingUID("avmfritz:HAN_FUN_CONTACT:1:119340059578_1"), discoveryResult.getThingUID());
548 assertEquals(HAN_FUN_CONTACT_THING_TYPE, discoveryResult.getThingTypeUID());
549 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
550 assertEquals("119340059578-1", discoveryResult.getProperties().get(CONFIG_AIN));
551 assertEquals("0x0feb", discoveryResult.getProperties().get(PROPERTY_VENDOR));
552 assertEquals("HAN-FUN", discoveryResult.getProperties().get(PRODUCT_NAME));
553 assertEquals("119340059578-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
554 assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
555 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
559 public void validHANFUNOpticalContactDiscoveryResult() throws JAXBException {
562 "<devicelist version=\"1\">" +
563 "<device identifier=\"11934 0059578-1\" id=\"2001\" functionbitmask=\"8208\" fwversion=\"0.0\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\">" +
564 "<present>1</present>" +
565 "<name>HAN-FUN #3: Unit #3</name>" +
567 "<etsideviceid>406</etsideviceid>" +
568 "<unittype>514</unittype>" +
569 "<interfaces>256</interfaces>" +
578 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
579 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
580 assertNotNull(devices);
581 assertEquals(1, devices.getDevicelist().size());
583 AVMFritzBaseModel device = devices.getDevicelist().get(0);
584 assertNotNull(device);
586 discovery.onDeviceAdded(device);
587 assertNotNull(discoveryResult);
589 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
590 assertEquals(new ThingUID("avmfritz:HAN_FUN_CONTACT:1:119340059578_1"), discoveryResult.getThingUID());
591 assertEquals(HAN_FUN_CONTACT_THING_TYPE, discoveryResult.getThingTypeUID());
592 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
593 assertEquals("119340059578-1", discoveryResult.getProperties().get(CONFIG_AIN));
594 assertEquals("0x0feb", discoveryResult.getProperties().get(PROPERTY_VENDOR));
595 assertEquals("HAN-FUN", discoveryResult.getProperties().get(PRODUCT_NAME));
596 assertEquals("119340059578-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
597 assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
598 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
602 public void validHANFUNMotionSensorDiscoveryResult() throws JAXBException {
605 "<devicelist version=\"1\">" +
606 "<device identifier=\"11934 0059578-1\" id=\"2002\" functionbitmask=\"8208\" fwversion=\"0.0\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\">" +
607 "<present>1</present>" +
608 "<name>HAN-FUN #3: Unit #3</name>" +
610 "<etsideviceid>408</etsideviceid>" +
611 "<unittype>515</unittype>" +
612 "<interfaces>32513,256</interfaces>" +
621 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
622 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
623 assertNotNull(devices);
624 assertEquals(1, devices.getDevicelist().size());
626 AVMFritzBaseModel device = devices.getDevicelist().get(0);
627 assertNotNull(device);
629 discovery.onDeviceAdded(device);
630 assertNotNull(discoveryResult);
632 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
633 assertEquals(new ThingUID("avmfritz:HAN_FUN_CONTACT:1:119340059578_1"), discoveryResult.getThingUID());
634 assertEquals(HAN_FUN_CONTACT_THING_TYPE, discoveryResult.getThingTypeUID());
635 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
636 assertEquals("119340059578-1", discoveryResult.getProperties().get(CONFIG_AIN));
637 assertEquals("0x0feb", discoveryResult.getProperties().get(PROPERTY_VENDOR));
638 assertEquals("HAN-FUN", discoveryResult.getProperties().get(PRODUCT_NAME));
639 assertEquals("119340059578-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
640 assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
641 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
645 public void validHANFUNMSmokeDetectorDiscoveryResult() throws JAXBException {
648 "<devicelist version=\"1\">" +
649 "<device identifier=\"11324 0059952-1\" id=\"2003\" functionbitmask=\"8208\" fwversion=\"0.0\" manufacturer=\"0x2c3c\" productname=\"HAN-FUN\">" +
650 "<present>1</present>" +
651 "<name>HAN-FUN #4: Unit #4</name>" +
653 "<etsideviceid>407</etsideviceid>" +
654 "<unittype>516</unittype>" +
655 "<interfaces>256</interfaces>" +
664 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
665 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
666 assertNotNull(devices);
667 assertEquals(1, devices.getDevicelist().size());
669 AVMFritzBaseModel device = devices.getDevicelist().get(0);
670 assertNotNull(device);
672 discovery.onDeviceAdded(device);
673 assertNotNull(discoveryResult);
675 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
676 assertEquals(new ThingUID("avmfritz:HAN_FUN_CONTACT:1:113240059952_1"), discoveryResult.getThingUID());
677 assertEquals(HAN_FUN_CONTACT_THING_TYPE, discoveryResult.getThingTypeUID());
678 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
679 assertEquals("113240059952-1", discoveryResult.getProperties().get(CONFIG_AIN));
680 assertEquals("0x2c3c", discoveryResult.getProperties().get(PROPERTY_VENDOR));
681 assertEquals("HAN-FUN", discoveryResult.getProperties().get(PRODUCT_NAME));
682 assertEquals("113240059952-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
683 assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
684 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
688 public void validHANFUNSwitchtDiscoveryResult() throws JAXBException {
691 "<devicelist version=\"1\">" +
692 "<device identifier=\"11934 0059578-1\" id=\"2001\" functionbitmask=\"8200\" fwversion=\"0.0\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\">" +
693 "<present>1</present>" +
694 "<name>HAN-FUN #2: Unit #2</name>" +
696 "<etsideviceid>412</etsideviceid>" +
697 "<unittype>273</unittype>" +
698 "<interfaces>772</interfaces>" +
701 "<lastpressedtimestamp>1529590797</lastpressedtimestamp>" +
707 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
708 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
709 assertNotNull(devices);
710 assertEquals(1, devices.getDevicelist().size());
712 AVMFritzBaseModel device = devices.getDevicelist().get(0);
713 assertNotNull(device);
715 discovery.onDeviceAdded(device);
716 assertNotNull(discoveryResult);
718 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
719 assertEquals(new ThingUID("avmfritz:HAN_FUN_SWITCH:1:119340059578_1"), discoveryResult.getThingUID());
720 assertEquals(HAN_FUN_SWITCH_THING_TYPE, discoveryResult.getThingTypeUID());
721 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
722 assertEquals("119340059578-1", discoveryResult.getProperties().get(CONFIG_AIN));
723 assertEquals("0x0feb", discoveryResult.getProperties().get(PROPERTY_VENDOR));
724 assertEquals("HAN-FUN", discoveryResult.getProperties().get(PRODUCT_NAME));
725 assertEquals("119340059578-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
726 assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
727 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
731 public void validHeatingGroupDiscoveryResult() throws JAXBException {
734 "<devicelist version=\"1\">" +
735 "<group identifier=\"F0:A3:7F-900\" id=\"20000\" functionbitmask=\"4160\" fwversion=\"1.0\" manufacturer=\"AVM\" productname=\"\">" +
736 "<present>1</present>" +
737 "<name>Schlafzimmer</name>" +
740 "<tsoll>253</tsoll>" +
741 "<absenk>33</absenk>" +
742 "<komfort>40</komfort>" +
744 "<devicelock>0</devicelock>" +
745 "<errorcode>0</errorcode>" +
746 "<batterylow>0</batterylow>" +
747 "<windowopenactiv>0</windowopenactiv>" +
748 "<battery>1</battery>" +
750 "<endperiod>1546293600</endperiod>" +
751 "<tchange>33</tchange>" +
753 "<summeractive>1</summeractive>" +
754 "<holidayactive>0</holidayactive>" +
757 "<masterdeviceid>1000</masterdeviceid>" +
758 "<members>20000</members>" +
764 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
765 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
766 assertNotNull(devices);
767 assertEquals(1, devices.getDevicelist().size());
769 AVMFritzBaseModel device = devices.getDevicelist().get(0);
770 assertNotNull(device);
772 discovery.onDeviceAdded(device);
773 assertNotNull(discoveryResult);
775 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
776 assertEquals(new ThingUID("avmfritz:FRITZ_GROUP_HEATING:1:F0_A3_7F_900"), discoveryResult.getThingUID());
777 assertEquals(GROUP_HEATING_THING_TYPE, discoveryResult.getThingTypeUID());
778 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
779 assertEquals("F0:A3:7F-900", discoveryResult.getProperties().get(CONFIG_AIN));
780 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
781 assertEquals("", discoveryResult.getProperties().get(PRODUCT_NAME));
782 assertEquals("F0:A3:7F-900", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
783 assertEquals("1.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
784 assertEquals("1000", discoveryResult.getProperties().get(PROPERTY_MASTER));
785 assertEquals("20000", discoveryResult.getProperties().get(PROPERTY_MEMBERS));
786 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
790 public void validSwitchGroupDiscoveryResult() throws JAXBException {
793 "<devicelist version=\"1\">" +
794 "<group identifier=\"F0:A3:7F-900\" id=\"20001\" functionbitmask=\"6784\" fwversion=\"1.0\" manufacturer=\"AVM\" productname=\"\">" +
795 "<present>1</present>" +
796 "<name>Schlafzimmer</name>" +
799 "<mode>manuell</mode>" +
801 "<devicelock>0</devicelock>" +
804 "<voltage>232850</voltage>" +
806 "<energy>2087</energy>" +
809 "<masterdeviceid>1000</masterdeviceid>" +
810 "<members>20000</members>" +
816 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
817 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
818 assertNotNull(devices);
819 assertEquals(1, devices.getDevicelist().size());
821 AVMFritzBaseModel device = devices.getDevicelist().get(0);
822 assertNotNull(device);
824 discovery.onDeviceAdded(device);
825 assertNotNull(discoveryResult);
827 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
828 assertEquals(new ThingUID("avmfritz:FRITZ_GROUP_SWITCH:1:F0_A3_7F_900"), discoveryResult.getThingUID());
829 assertEquals(GROUP_SWITCH_THING_TYPE, discoveryResult.getThingTypeUID());
830 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
831 assertEquals("F0:A3:7F-900", discoveryResult.getProperties().get(CONFIG_AIN));
832 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
833 assertEquals("", discoveryResult.getProperties().get(PRODUCT_NAME));
834 assertEquals("F0:A3:7F-900", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
835 assertEquals("1.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
836 assertEquals("1000", discoveryResult.getProperties().get(PROPERTY_MASTER));
837 assertEquals("20000", discoveryResult.getProperties().get(PROPERTY_MEMBERS));
838 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());