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.discovery;
15 import static org.openhab.core.thing.Thing.*;
16 import static org.junit.Assert.*;
17 import static org.openhab.binding.avmfritz.internal.AVMFritzBindingConstants.*;
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.openhab.core.config.discovery.DiscoveryListener;
29 import org.openhab.core.config.discovery.DiscoveryResult;
30 import org.openhab.core.config.discovery.DiscoveryResultFlag;
31 import org.openhab.core.config.discovery.DiscoveryService;
32 import org.openhab.core.thing.ThingTypeUID;
33 import org.openhab.core.thing.ThingUID;
34 import org.junit.After;
35 import org.junit.Before;
36 import org.junit.Test;
37 import org.openhab.binding.avmfritz.internal.dto.AVMFritzBaseModel;
38 import org.openhab.binding.avmfritz.internal.dto.DeviceListModel;
39 import org.openhab.binding.avmfritz.internal.handler.AVMFritzThingHandlerOSGiTest;
40 import org.openhab.binding.avmfritz.internal.util.JAXBUtils;
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(12, 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(PL546E_THING_TYPE));
97 assertTrue(discovery.getSupportedThingTypes().contains(COMETDECT_THING_TYPE));
98 assertTrue(discovery.getSupportedThingTypes().contains(HAN_FUN_CONTACT_THING_TYPE));
99 assertTrue(discovery.getSupportedThingTypes().contains(HAN_FUN_SWITCH_THING_TYPE));
100 assertTrue(discovery.getSupportedThingTypes().contains(GROUP_HEATING_THING_TYPE));
101 assertTrue(discovery.getSupportedThingTypes().contains(GROUP_SWITCH_THING_TYPE));
105 public void invalidDiscoveryResult() throws JAXBException {
106 // attribute productname is important for a valid discovery result
109 "<devicelist version=\"1\">" +
110 "<device identifier=\"08761 0954669\" id=\"20\" functionbitmask=\"1280\" fwversion=\"03.86\" manufacturer=\"AVM\" productname=\"\">" +
111 "<present>1</present>" +
112 "<name>FRITZ!DECT Repeater 100 #5</name>" +
114 "<celsius>230</celsius>" +
115 "<offset>0</offset>" +
121 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
122 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
123 assertNotNull(devices);
124 assertEquals(1, devices.getDevicelist().size());
126 AVMFritzBaseModel device = devices.getDevicelist().get(0);
127 assertNotNull(device);
129 discovery.onDeviceAdded(device);
130 assertNull(discoveryResult);
134 public void validDECTRepeater100Result() throws JAXBException {
137 "<devicelist version=\"1\">" +
138 "<device identifier=\"08761 0954669\" id=\"20\" functionbitmask=\"1280\" fwversion=\"03.86\" manufacturer=\"AVM\" productname=\"FRITZ!DECT Repeater 100\">" +
139 "<present>1</present>" +
140 "<name>FRITZ!DECT Repeater 100 #5</name>" +
142 "<celsius>230</celsius>" +
143 "<offset>0</offset>" +
149 final Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
150 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
151 assertNotNull(devices);
152 assertEquals(1, devices.getDevicelist().size());
154 AVMFritzBaseModel device = devices.getDevicelist().get(0);
155 assertNotNull(device);
156 assertEquals(1, device.getPresent());
158 discovery.onDeviceAdded(device);
159 assertNotNull(discoveryResult);
161 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
162 assertEquals(new ThingUID("avmfritz:FRITZ_DECT_Repeater_100:1:087610954669"), discoveryResult.getThingUID());
163 assertEquals(DECT100_THING_TYPE, discoveryResult.getThingTypeUID());
164 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
165 assertEquals("087610954669", discoveryResult.getProperties().get(CONFIG_AIN));
166 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
167 assertEquals("20", discoveryResult.getProperties().get(PROPERTY_MODEL_ID));
168 assertEquals("087610954669", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
169 assertEquals("03.86", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
170 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
172 final String deviceNotPresentXml = xml.replace("<present>1</present>", "<present>0</present>");
173 devices = (DeviceListModel) u.unmarshal(new StringReader(deviceNotPresentXml));
174 assertNotNull(devices);
175 assertEquals(1, devices.getDevicelist().size());
177 device = devices.getDevicelist().get(0);
178 assertNotNull(device);
179 assertEquals(0, device.getPresent());
181 discovery.onDeviceAdded(device);
182 assertNull(discoveryResult);
186 public void validDECT200DiscoveryResult() throws JAXBException {
189 "<devicelist version=\"1\">" +
190 "<device identifier=\"08761 0000434\" id=\"17\" functionbitmask=\"2944\" fwversion=\"03.83\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 200\">" +
191 "<present>1</present>" +
192 "<name>FRITZ!DECT 200 #1</name>" +
195 "<mode>manuell</mode>" +
197 "<devicelock>1</devicelock>" +
200 "<voltage>232850</voltage>" +
201 "<power>45</power>" +
202 "<energy>166</energy>" +
205 "<celsius>255</celsius>" +
206 "<offset>0</offset>" +
212 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
213 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
214 assertNotNull(devices);
215 assertEquals(1, devices.getDevicelist().size());
217 AVMFritzBaseModel device = devices.getDevicelist().get(0);
218 assertNotNull(device);
220 discovery.onDeviceAdded(device);
221 assertNotNull(discoveryResult);
223 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
224 assertEquals(new ThingUID("avmfritz:FRITZ_DECT_200:1:087610000434"), discoveryResult.getThingUID());
225 assertEquals(DECT200_THING_TYPE, discoveryResult.getThingTypeUID());
226 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
227 assertEquals("087610000434", discoveryResult.getProperties().get(CONFIG_AIN));
228 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
229 assertEquals("17", discoveryResult.getProperties().get(PROPERTY_MODEL_ID));
230 assertEquals("087610000434", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
231 assertEquals("03.83", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
232 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
236 public void validDECT210DiscoveryResult() throws JAXBException {
239 "<devicelist version=\"1\">" +
240 "<device identifier=\"08761 0000434\" id=\"17\" functionbitmask=\"2944\" fwversion=\"03.83\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 210\">" +
241 "<present>1</present>" +
242 "<name>FRITZ!DECT 210 #1</name>" +
245 "<mode>manuell</mode>" +
247 "<devicelock>1</devicelock>" +
250 "<voltage>232850</voltage>" +
251 "<power>45</power>" +
252 "<energy>166</energy>" +
255 "<celsius>255</celsius>" +
256 "<offset>0</offset>" +
262 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
263 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
264 assertNotNull(devices);
265 assertEquals(1, devices.getDevicelist().size());
267 AVMFritzBaseModel device = devices.getDevicelist().get(0);
268 assertNotNull(device);
270 discovery.onDeviceAdded(device);
271 assertNotNull(discoveryResult);
273 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
274 assertEquals(new ThingUID("avmfritz:FRITZ_DECT_210:1:087610000434"), discoveryResult.getThingUID());
275 assertEquals(DECT210_THING_TYPE, discoveryResult.getThingTypeUID());
276 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
277 assertEquals("087610000434", discoveryResult.getProperties().get(CONFIG_AIN));
278 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
279 assertEquals("17", discoveryResult.getProperties().get(PROPERTY_MODEL_ID));
280 assertEquals("087610000434", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
281 assertEquals("03.83", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
282 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
286 public void validCometDECTDiscoveryResult() throws JAXBException {
289 "<devicelist version=\"1\">" +
290 "<device identifier=\"08761 0000435\" id=\"18\" functionbitmask=\"320\" fwversion=\"03.50\" manufacturer=\"AVM\" productname=\"Comet DECT\">" +
291 "<present>1</present>" +
292 "<name>Comet DECT #1</name>" +
294 "<celsius>220</celsius>" +
295 "<offset>-10</offset>" +
299 "<tsoll>42</tsoll>" +
300 "<absenk>28</absenk>" +
301 "<komfort>42</komfort>" +
303 "<devicelock>0</devicelock>" +
304 "<errorcode>0</errorcode>" +
305 "<batterylow>0</batterylow>" +
307 "<endperiod>1484341200</endperiod>" +
308 "<tchange>28</tchange>" +
315 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
316 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
317 assertNotNull(devices);
318 assertEquals(1, devices.getDevicelist().size());
320 AVMFritzBaseModel device = devices.getDevicelist().get(0);
321 assertNotNull(device);
323 discovery.onDeviceAdded(device);
324 assertNotNull(discoveryResult);
326 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
327 assertEquals(new ThingUID("avmfritz:Comet_DECT:1:087610000435"), discoveryResult.getThingUID());
328 assertEquals(COMETDECT_THING_TYPE, discoveryResult.getThingTypeUID());
329 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
330 assertEquals("087610000435", discoveryResult.getProperties().get(CONFIG_AIN));
331 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
332 assertEquals("18", discoveryResult.getProperties().get(PROPERTY_MODEL_ID));
333 assertEquals("087610000435", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
334 assertEquals("03.50", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
335 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
339 public void validDECT300DiscoveryResult() throws JAXBException {
342 "<devicelist version=\"1\">" +
343 "<device identifier=\"08761 0000435\" id=\"18\" functionbitmask=\"320\" fwversion=\"03.50\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 300\">" +
344 "<present>1</present>" +
345 "<name>FRITZ!DECT 300 #1</name>" +
347 "<celsius>220</celsius>" +
348 "<offset>-10</offset>" +
352 "<tsoll>42</tsoll>" +
353 "<absenk>28</absenk>" +
354 "<komfort>42</komfort>" +
356 "<devicelock>0</devicelock>" +
357 "<errorcode>0</errorcode>" +
358 "<batterylow>0</batterylow>" +
360 "<endperiod>1484341200</endperiod>" +
361 "<tchange>28</tchange>" +
368 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
369 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
370 assertNotNull(devices);
371 assertEquals(1, devices.getDevicelist().size());
373 AVMFritzBaseModel device = devices.getDevicelist().get(0);
374 assertNotNull(device);
376 discovery.onDeviceAdded(device);
377 assertNotNull(discoveryResult);
379 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
380 assertEquals(new ThingUID("avmfritz:FRITZ_DECT_300:1:087610000435"), discoveryResult.getThingUID());
381 assertEquals(DECT300_THING_TYPE, discoveryResult.getThingTypeUID());
382 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
383 assertEquals("087610000435", discoveryResult.getProperties().get(CONFIG_AIN));
384 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
385 assertEquals("18", discoveryResult.getProperties().get(PROPERTY_MODEL_ID));
386 assertEquals("087610000435", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
387 assertEquals("03.50", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
388 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
392 public void validDECT301DiscoveryResult() throws JAXBException {
395 "<devicelist version=\"1\">" +
396 "<device identifier=\"08761 0000435\" id=\"18\" functionbitmask=\"320\" fwversion=\"03.50\" manufacturer=\"AVM\" productname=\"FRITZ!DECT 301\">" +
397 "<present>1</present>" +
398 "<name>FRITZ!DECT 301 #1</name>" +
400 "<celsius>220</celsius>" +
401 "<offset>-10</offset>" +
405 "<tsoll>42</tsoll>" +
406 "<absenk>28</absenk>" +
407 "<komfort>42</komfort>" +
409 "<devicelock>0</devicelock>" +
410 "<errorcode>0</errorcode>" +
411 "<batterylow>0</batterylow>" +
413 "<endperiod>1484341200</endperiod>" +
414 "<tchange>28</tchange>" +
421 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
422 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
423 assertNotNull(devices);
424 assertEquals(1, devices.getDevicelist().size());
426 AVMFritzBaseModel device = devices.getDevicelist().get(0);
427 assertNotNull(device);
429 discovery.onDeviceAdded(device);
430 assertNotNull(discoveryResult);
432 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
433 assertEquals(new ThingUID("avmfritz:FRITZ_DECT_301:1:087610000435"), discoveryResult.getThingUID());
434 assertEquals(DECT301_THING_TYPE, discoveryResult.getThingTypeUID());
435 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
436 assertEquals("087610000435", discoveryResult.getProperties().get(CONFIG_AIN));
437 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
438 assertEquals("18", discoveryResult.getProperties().get(PROPERTY_MODEL_ID));
439 assertEquals("087610000435", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
440 assertEquals("03.50", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
441 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
445 public void validPowerline546EDiscoveryResult() throws JAXBException {
448 "<devicelist version=\"1\">" +
449 "<device identifier=\"5C:49:79:F0:A3:84\" id=\"19\" functionbitmask=\"640\" fwversion=\"06.92\" manufacturer=\"AVM\" productname=\"FRITZ!Powerline 546E\">" +
450 "<present>1</present>" +
451 "<name>FRITZ!Powerline 546E #1</name>" +
454 "<mode>manuell</mode>" +
456 "<devicelock>1</devicelock>" +
459 "<voltage>232850</voltage>" +
461 "<energy>2087</energy>" +
467 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
468 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
469 assertNotNull(devices);
470 assertEquals(1, devices.getDevicelist().size());
472 AVMFritzBaseModel device = devices.getDevicelist().get(0);
473 assertNotNull(device);
475 discovery.onDeviceAdded(device);
476 assertNotNull(discoveryResult);
478 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
479 assertEquals(new ThingUID("avmfritz:FRITZ_Powerline_546E:1:5C_49_79_F0_A3_84"), discoveryResult.getThingUID());
480 assertEquals(PL546E_THING_TYPE, discoveryResult.getThingTypeUID());
481 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
482 assertEquals("5C:49:79:F0:A3:84", discoveryResult.getProperties().get(CONFIG_AIN));
483 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
484 assertEquals("19", discoveryResult.getProperties().get(PROPERTY_MODEL_ID));
485 assertEquals("5C:49:79:F0:A3:84", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
486 assertEquals("06.92", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
487 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
491 public void invalidHANFUNContactDiscoveryResult() throws JAXBException {
494 "<devicelist version=\"1\">" +
495 "<device identifier=\"11934 0059578\" id=\"406\" functionbitmask=\"1\" fwversion=\"00.00\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\">" +
496 "<present>1</present>" +
497 "<name>HAN-FUN #2</name>" +
502 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
503 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
504 assertNotNull(devices);
505 assertEquals(1, devices.getDevicelist().size());
507 AVMFritzBaseModel device = devices.getDevicelist().get(0);
508 assertNotNull(device);
510 discovery.onDeviceAdded(device);
511 assertNull(discoveryResult);
515 public void validHANFUNMagneticContactDiscoveryResult() throws JAXBException {
518 "<devicelist version=\"1\">" +
519 "<device identifier=\"11934 0059578-1\" id=\"2000\" functionbitmask=\"8208\" fwversion=\"0.0\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\">" +
520 "<present>1</present>" +
521 "<name>HAN-FUN #2: Unit #2</name>" +
523 "<etsideviceid>406</etsideviceid>" +
524 "<unittype>513</unittype>" +
525 "<interfaces>256</interfaces>" +
534 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
535 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
536 assertNotNull(devices);
537 assertEquals(1, devices.getDevicelist().size());
539 AVMFritzBaseModel device = devices.getDevicelist().get(0);
540 assertNotNull(device);
542 discovery.onDeviceAdded(device);
543 assertNotNull(discoveryResult);
545 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
546 assertEquals(new ThingUID("avmfritz:HAN_FUN_CONTACT:1:119340059578_1"), discoveryResult.getThingUID());
547 assertEquals(HAN_FUN_CONTACT_THING_TYPE, discoveryResult.getThingTypeUID());
548 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
549 assertEquals("119340059578-1", discoveryResult.getProperties().get(CONFIG_AIN));
550 assertEquals("0x0feb", discoveryResult.getProperties().get(PROPERTY_VENDOR));
551 assertEquals("2000", discoveryResult.getProperties().get(PROPERTY_MODEL_ID));
552 assertEquals("119340059578-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
553 assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
554 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
558 public void validHANFUNOpticalContactDiscoveryResult() throws JAXBException {
561 "<devicelist version=\"1\">" +
562 "<device identifier=\"11934 0059578-1\" id=\"2001\" functionbitmask=\"8208\" fwversion=\"0.0\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\">" +
563 "<present>1</present>" +
564 "<name>HAN-FUN #3: Unit #3</name>" +
566 "<etsideviceid>406</etsideviceid>" +
567 "<unittype>514</unittype>" +
568 "<interfaces>256</interfaces>" +
577 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
578 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
579 assertNotNull(devices);
580 assertEquals(1, devices.getDevicelist().size());
582 AVMFritzBaseModel device = devices.getDevicelist().get(0);
583 assertNotNull(device);
585 discovery.onDeviceAdded(device);
586 assertNotNull(discoveryResult);
588 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
589 assertEquals(new ThingUID("avmfritz:HAN_FUN_CONTACT:1:119340059578_1"), discoveryResult.getThingUID());
590 assertEquals(HAN_FUN_CONTACT_THING_TYPE, discoveryResult.getThingTypeUID());
591 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
592 assertEquals("119340059578-1", discoveryResult.getProperties().get(CONFIG_AIN));
593 assertEquals("0x0feb", discoveryResult.getProperties().get(PROPERTY_VENDOR));
594 assertEquals("2001", discoveryResult.getProperties().get(PROPERTY_MODEL_ID));
595 assertEquals("119340059578-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
596 assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
597 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
601 public void validHANFUNMotionSensorDiscoveryResult() throws JAXBException {
604 "<devicelist version=\"1\">" +
605 "<device identifier=\"11934 0059578-1\" id=\"2002\" functionbitmask=\"8208\" fwversion=\"0.0\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\">" +
606 "<present>1</present>" +
607 "<name>HAN-FUN #3: Unit #3</name>" +
609 "<etsideviceid>408</etsideviceid>" +
610 "<unittype>515</unittype>" +
611 "<interfaces>32513,256</interfaces>" +
620 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
621 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
622 assertNotNull(devices);
623 assertEquals(1, devices.getDevicelist().size());
625 AVMFritzBaseModel device = devices.getDevicelist().get(0);
626 assertNotNull(device);
628 discovery.onDeviceAdded(device);
629 assertNotNull(discoveryResult);
631 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
632 assertEquals(new ThingUID("avmfritz:HAN_FUN_CONTACT:1:119340059578_1"), discoveryResult.getThingUID());
633 assertEquals(HAN_FUN_CONTACT_THING_TYPE, discoveryResult.getThingTypeUID());
634 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
635 assertEquals("119340059578-1", discoveryResult.getProperties().get(CONFIG_AIN));
636 assertEquals("0x0feb", discoveryResult.getProperties().get(PROPERTY_VENDOR));
637 assertEquals("2002", discoveryResult.getProperties().get(PROPERTY_MODEL_ID));
638 assertEquals("119340059578-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
639 assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
640 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
644 public void validHANFUNMSmokeDetectorDiscoveryResult() throws JAXBException {
647 "<devicelist version=\"1\">" +
648 "<device identifier=\"11324 0059952-1\" id=\"2003\" functionbitmask=\"8208\" fwversion=\"0.0\" manufacturer=\"0x2c3c\" productname=\"HAN-FUN\">" +
649 "<present>1</present>" +
650 "<name>HAN-FUN #4: Unit #4</name>" +
652 "<etsideviceid>407</etsideviceid>" +
653 "<unittype>516</unittype>" +
654 "<interfaces>256</interfaces>" +
663 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
664 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
665 assertNotNull(devices);
666 assertEquals(1, devices.getDevicelist().size());
668 AVMFritzBaseModel device = devices.getDevicelist().get(0);
669 assertNotNull(device);
671 discovery.onDeviceAdded(device);
672 assertNotNull(discoveryResult);
674 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
675 assertEquals(new ThingUID("avmfritz:HAN_FUN_CONTACT:1:113240059952_1"), discoveryResult.getThingUID());
676 assertEquals(HAN_FUN_CONTACT_THING_TYPE, discoveryResult.getThingTypeUID());
677 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
678 assertEquals("113240059952-1", discoveryResult.getProperties().get(CONFIG_AIN));
679 assertEquals("0x2c3c", discoveryResult.getProperties().get(PROPERTY_VENDOR));
680 assertEquals("2003", discoveryResult.getProperties().get(PROPERTY_MODEL_ID));
681 assertEquals("113240059952-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
682 assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
683 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
687 public void validHANFUNSwitchtDiscoveryResult() throws JAXBException {
690 "<devicelist version=\"1\">" +
691 "<device identifier=\"11934 0059578-1\" id=\"2001\" functionbitmask=\"8200\" fwversion=\"0.0\" manufacturer=\"0x0feb\" productname=\"HAN-FUN\">" +
692 "<present>1</present>" +
693 "<name>HAN-FUN #2: Unit #2</name>" +
695 "<etsideviceid>412</etsideviceid>" +
696 "<unittype>273</unittype>" +
697 "<interfaces>772</interfaces>" +
700 "<lastpressedtimestamp>1529590797</lastpressedtimestamp>" +
706 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
707 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
708 assertNotNull(devices);
709 assertEquals(1, devices.getDevicelist().size());
711 AVMFritzBaseModel device = devices.getDevicelist().get(0);
712 assertNotNull(device);
714 discovery.onDeviceAdded(device);
715 assertNotNull(discoveryResult);
717 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
718 assertEquals(new ThingUID("avmfritz:HAN_FUN_SWITCH:1:119340059578_1"), discoveryResult.getThingUID());
719 assertEquals(HAN_FUN_SWITCH_THING_TYPE, discoveryResult.getThingTypeUID());
720 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
721 assertEquals("119340059578-1", discoveryResult.getProperties().get(CONFIG_AIN));
722 assertEquals("0x0feb", discoveryResult.getProperties().get(PROPERTY_VENDOR));
723 assertEquals("2001", discoveryResult.getProperties().get(PROPERTY_MODEL_ID));
724 assertEquals("119340059578-1", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
725 assertEquals("0.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
726 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
730 public void validHeatingGroupDiscoveryResult() throws JAXBException {
733 "<devicelist version=\"1\">" +
734 "<group identifier=\"F0:A3:7F-900\" id=\"20000\" functionbitmask=\"4160\" fwversion=\"1.0\" manufacturer=\"AVM\" productname=\"\">" +
735 "<present>1</present>" +
736 "<name>Schlafzimmer</name>" +
739 "<tsoll>253</tsoll>" +
740 "<absenk>33</absenk>" +
741 "<komfort>40</komfort>" +
743 "<devicelock>0</devicelock>" +
744 "<errorcode>0</errorcode>" +
745 "<batterylow>0</batterylow>" +
746 "<windowopenactiv>0</windowopenactiv>" +
747 "<battery>1</battery>" +
749 "<endperiod>1546293600</endperiod>" +
750 "<tchange>33</tchange>" +
752 "<summeractive>1</summeractive>" +
753 "<holidayactive>0</holidayactive>" +
756 "<masterdeviceid>1000</masterdeviceid>" +
757 "<members>20000</members>" +
763 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
764 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
765 assertNotNull(devices);
766 assertEquals(1, devices.getDevicelist().size());
768 AVMFritzBaseModel device = devices.getDevicelist().get(0);
769 assertNotNull(device);
771 discovery.onDeviceAdded(device);
772 assertNotNull(discoveryResult);
774 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
775 assertEquals(new ThingUID("avmfritz:FRITZ_GROUP_HEATING:1:F0_A3_7F_900"), discoveryResult.getThingUID());
776 assertEquals(GROUP_HEATING_THING_TYPE, discoveryResult.getThingTypeUID());
777 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
778 assertEquals("F0:A3:7F-900", discoveryResult.getProperties().get(CONFIG_AIN));
779 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
780 assertEquals("20000", discoveryResult.getProperties().get(PROPERTY_MODEL_ID));
781 assertEquals("F0:A3:7F-900", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
782 assertEquals("1.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
783 assertEquals("1000", discoveryResult.getProperties().get(PROPERTY_MASTER));
784 assertEquals("20000", discoveryResult.getProperties().get(PROPERTY_MEMBERS));
785 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());
789 public void validSwitchGroupDiscoveryResult() throws JAXBException {
792 "<devicelist version=\"1\">" +
793 "<group identifier=\"F0:A3:7F-900\" id=\"20001\" functionbitmask=\"6784\" fwversion=\"1.0\" manufacturer=\"AVM\" productname=\"\">" +
794 "<present>1</present>" +
795 "<name>Schlafzimmer</name>" +
798 "<mode>manuell</mode>" +
800 "<devicelock>0</devicelock>" +
803 "<voltage>232850</voltage>" +
805 "<energy>2087</energy>" +
808 "<masterdeviceid>1000</masterdeviceid>" +
809 "<members>20000</members>" +
815 Unmarshaller u = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
816 DeviceListModel devices = (DeviceListModel) u.unmarshal(new StringReader(xml));
817 assertNotNull(devices);
818 assertEquals(1, devices.getDevicelist().size());
820 AVMFritzBaseModel device = devices.getDevicelist().get(0);
821 assertNotNull(device);
823 discovery.onDeviceAdded(device);
824 assertNotNull(discoveryResult);
826 assertEquals(DiscoveryResultFlag.NEW, discoveryResult.getFlag());
827 assertEquals(new ThingUID("avmfritz:FRITZ_GROUP_SWITCH:1:F0_A3_7F_900"), discoveryResult.getThingUID());
828 assertEquals(GROUP_SWITCH_THING_TYPE, discoveryResult.getThingTypeUID());
829 assertEquals(BRIGE_THING_ID, discoveryResult.getBridgeUID());
830 assertEquals("F0:A3:7F-900", discoveryResult.getProperties().get(CONFIG_AIN));
831 assertEquals("AVM", discoveryResult.getProperties().get(PROPERTY_VENDOR));
832 assertEquals("20001", discoveryResult.getProperties().get(PROPERTY_MODEL_ID));
833 assertEquals("F0:A3:7F-900", discoveryResult.getProperties().get(PROPERTY_SERIAL_NUMBER));
834 assertEquals("1.0", discoveryResult.getProperties().get(PROPERTY_FIRMWARE_VERSION));
835 assertEquals("1000", discoveryResult.getProperties().get(PROPERTY_MASTER));
836 assertEquals("20000", discoveryResult.getProperties().get(PROPERTY_MEMBERS));
837 assertEquals(CONFIG_AIN, discoveryResult.getRepresentationProperty());