]> git.basschouten.com Git - openhab-addons.git/blob
5a1f20a1ef0d57260b817a7635d305b6d79c6a34
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
7  * This program and the accompanying materials are made available under the
8  * terms of the Eclipse Public License 2.0 which is available at
9  * http://www.eclipse.org/legal/epl-2.0
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.echonetlite.internal;
14
15 import static org.openhab.binding.echonetlite.internal.EchonetLiteBindingConstants.PROPERTY_NAME_CLASS_CODE;
16 import static org.openhab.binding.echonetlite.internal.EchonetLiteBindingConstants.PROPERTY_NAME_GROUP_CODE;
17 import static org.openhab.binding.echonetlite.internal.EchonetLiteBindingConstants.PROPERTY_NAME_HOSTNAME;
18 import static org.openhab.binding.echonetlite.internal.EchonetLiteBindingConstants.PROPERTY_NAME_INSTANCE;
19 import static org.openhab.binding.echonetlite.internal.EchonetLiteBindingConstants.PROPERTY_NAME_INSTANCE_KEY;
20 import static org.openhab.binding.echonetlite.internal.EchonetLiteBindingConstants.PROPERTY_NAME_PORT;
21 import static org.openhab.binding.echonetlite.internal.EchonetLiteBindingConstants.THING_TYPE_ECHONET_DEVICE;
22
23 import java.util.Set;
24
25 import org.eclipse.jdt.annotation.NonNullByDefault;
26 import org.eclipse.jdt.annotation.Nullable;
27 import org.openhab.core.config.discovery.AbstractDiscoveryService;
28 import org.openhab.core.config.discovery.DiscoveryResult;
29 import org.openhab.core.config.discovery.DiscoveryResultBuilder;
30 import org.openhab.core.thing.ThingUID;
31 import org.openhab.core.thing.binding.ThingHandler;
32 import org.openhab.core.thing.binding.ThingHandlerService;
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
35
36 /**
37  * @author Michael Barker - Initial contribution
38  */
39 @NonNullByDefault
40 public class EchonetDiscoveryService extends AbstractDiscoveryService
41         implements EchonetDiscoveryListener, ThingHandlerService {
42
43     private final Logger logger = LoggerFactory.getLogger(EchonetDiscoveryService.class);
44
45     @Nullable
46     private EchonetLiteBridgeHandler bridgeHandler;
47
48     public EchonetDiscoveryService() {
49         super(Set.of(THING_TYPE_ECHONET_DEVICE), 10);
50     }
51
52     @Override
53     protected void startScan() {
54         final EchonetLiteBridgeHandler bridgeHandler = this.bridgeHandler;
55         logger.debug("startScan: {}", bridgeHandler);
56         if (null != bridgeHandler) {
57             bridgeHandler.startDiscovery(this);
58         }
59     }
60
61     @Override
62     protected synchronized void stopScan() {
63         final EchonetLiteBridgeHandler bridgeHandler = this.bridgeHandler;
64         logger.debug("stopScan: {}", bridgeHandler);
65         if (null != bridgeHandler) {
66             bridgeHandler.stopDiscovery();
67         }
68     }
69
70     @Override
71     public void onDeviceFound(String identifier, InstanceKey instanceKey) {
72         final EchonetLiteBridgeHandler bridgeHandler = this.bridgeHandler;
73
74         if (null == bridgeHandler) {
75             return;
76         }
77
78         final DiscoveryResult discoveryResult = DiscoveryResultBuilder
79                 .create(new ThingUID(THING_TYPE_ECHONET_DEVICE, bridgeHandler.getThing().getUID(), identifier))
80                 .withProperty(PROPERTY_NAME_INSTANCE_KEY, instanceKey.representationProperty())
81                 .withProperty(PROPERTY_NAME_HOSTNAME, instanceKey.address.getAddress().getHostAddress())
82                 .withProperty(PROPERTY_NAME_PORT, instanceKey.address.getPort())
83                 .withProperty(PROPERTY_NAME_GROUP_CODE, instanceKey.klass.groupCode())
84                 .withProperty(PROPERTY_NAME_CLASS_CODE, instanceKey.klass.classCode())
85                 .withProperty(PROPERTY_NAME_INSTANCE, instanceKey.instance)
86                 .withBridge(bridgeHandler.getThing().getUID()).withRepresentationProperty(PROPERTY_NAME_INSTANCE_KEY)
87                 .build();
88         thingDiscovered(discoveryResult);
89     }
90
91     @Override
92     public void deactivate() {
93         ThingHandlerService.super.deactivate();
94     }
95
96     @Override
97     public void activate() {
98         ThingHandlerService.super.activate();
99     }
100
101     @Override
102     public void setThingHandler(ThingHandler thingHandler) {
103         if (thingHandler instanceof EchonetLiteBridgeHandler) {
104             this.bridgeHandler = (EchonetLiteBridgeHandler) thingHandler;
105         }
106     }
107
108     @Override
109     public @Nullable ThingHandler getThingHandler() {
110         return bridgeHandler;
111     }
112 }