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.rfxcom.internal.discovery;
15 import static org.openhab.binding.rfxcom.internal.messages.RFXComBaseMessage.ID_DELIMITER;
19 import org.openhab.binding.rfxcom.internal.DeviceMessageListener;
20 import org.openhab.binding.rfxcom.internal.RFXComBindingConstants;
21 import org.openhab.binding.rfxcom.internal.exceptions.RFXComException;
22 import org.openhab.binding.rfxcom.internal.handler.RFXComBridgeHandler;
23 import org.openhab.binding.rfxcom.internal.messages.RFXComDeviceMessage;
24 import org.openhab.core.config.discovery.AbstractDiscoveryService;
25 import org.openhab.core.config.discovery.DiscoveryResultBuilder;
26 import org.openhab.core.thing.ThingTypeUID;
27 import org.openhab.core.thing.ThingUID;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
32 * The {@link RFXComDeviceDiscoveryService} class is used to discover RFXCOM
33 * devices that send messages to RFXCOM bridge.
35 * @author Pauli Anttila - Initial contribution
37 public class RFXComDeviceDiscoveryService extends AbstractDiscoveryService implements DeviceMessageListener {
38 private final Logger logger = LoggerFactory.getLogger(RFXComDeviceDiscoveryService.class);
39 private final int DISCOVERY_TTL = 3600;
41 private RFXComBridgeHandler bridgeHandler;
43 public RFXComDeviceDiscoveryService(RFXComBridgeHandler rfxcomBridgeHandler) {
44 super(null, 1, false);
45 this.bridgeHandler = rfxcomBridgeHandler;
48 public void activate() {
49 bridgeHandler.registerDeviceStatusListener(this);
53 public void deactivate() {
54 bridgeHandler.unregisterDeviceStatusListener(this);
58 public Set<ThingTypeUID> getSupportedThingTypes() {
59 return RFXComBindingConstants.SUPPORTED_DEVICE_THING_TYPES_UIDS;
63 protected void startScan() {
64 // this can be ignored here as we discover devices from received messages
68 public void onDeviceMessageReceived(ThingUID bridge, RFXComDeviceMessage message) throws RFXComException {
69 logger.trace("Received: bridge: {} message: {}", bridge, message);
71 String id = message.getDeviceId();
72 ThingTypeUID uid = RFXComBindingConstants.PACKET_TYPE_THING_TYPE_UID_MAP.get(message.getPacketType());
74 logger.debug("cannot find uid for message {}", message);
77 ThingUID thingUID = new ThingUID(uid, bridge, id.replace(ID_DELIMITER, "_"));
79 if (!bridgeHandler.getConfiguration().disableDiscovery) {
80 logger.trace("Adding new RFXCOM {} with id '{}' to smarthome inbox", thingUID, id);
81 DiscoveryResultBuilder discoveryResultBuilder = DiscoveryResultBuilder.create(thingUID).withBridge(bridge)
82 .withTTL(DISCOVERY_TTL);
83 message.addDevicePropertiesTo(discoveryResultBuilder);
85 thingDiscovered(discoveryResultBuilder.build());
87 logger.trace("Ignoring RFXCOM {} with id '{}' - discovery disabled", thingUID, id);