2 * Copyright (c) 2010-2023 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.dscalarm.internal.discovery;
15 import java.util.HashMap;
18 import org.openhab.binding.dscalarm.internal.DSCAlarmBindingConstants;
19 import org.openhab.binding.dscalarm.internal.DSCAlarmEvent;
20 import org.openhab.binding.dscalarm.internal.DSCAlarmMessage.DSCAlarmMessageInfoType;
21 import org.openhab.binding.dscalarm.internal.config.DSCAlarmPartitionConfiguration;
22 import org.openhab.binding.dscalarm.internal.config.DSCAlarmZoneConfiguration;
23 import org.openhab.binding.dscalarm.internal.handler.DSCAlarmBaseBridgeHandler;
24 import org.openhab.binding.dscalarm.internal.handler.DSCAlarmThingType;
25 import org.openhab.core.config.discovery.AbstractDiscoveryService;
26 import org.openhab.core.config.discovery.DiscoveryResult;
27 import org.openhab.core.config.discovery.DiscoveryResultBuilder;
28 import org.openhab.core.thing.Bridge;
29 import org.openhab.core.thing.ThingUID;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
34 * This class is responsible for discovering DSC Alarm Things via the bridge.
36 * @author Russell Stephens - Initial Contribution
39 public class DSCAlarmDiscoveryService extends AbstractDiscoveryService {
41 private final Logger logger = LoggerFactory.getLogger(DSCAlarmDiscoveryService.class);
44 * DSC Alarm Bridge handler.
46 DSCAlarmBaseBridgeHandler dscAlarmBridgeHandler;
51 * @param dscAlarmBridgeHandler
53 public DSCAlarmDiscoveryService(DSCAlarmBaseBridgeHandler dscAlarmBridgeHandler) {
54 super(DSCAlarmBindingConstants.SUPPORTED_THING_TYPES_UIDS, 15, true);
55 this.dscAlarmBridgeHandler = dscAlarmBridgeHandler;
59 * Activates the Discovery Service.
61 public void activate() {
62 dscAlarmBridgeHandler.registerDiscoveryService(this);
66 * Deactivates the Discovery Service.
69 public void deactivate() {
70 dscAlarmBridgeHandler.unregisterDiscoveryService();
74 * Method to add a Thing to the Inbox.
77 * @param dscAlarmThingType
80 public void addThing(Bridge bridge, DSCAlarmThingType dscAlarmThingType, DSCAlarmEvent event) {
81 logger.trace("addThing(): Adding new DSC Alarm {} to the inbox", dscAlarmThingType.getLabel());
83 ThingUID thingUID = null;
85 String thingLabel = "";
86 Map<String, Object> properties = null;
88 int partitionNumber = Integer
89 .parseInt(event.getDSCAlarmMessage().getMessageInfo(DSCAlarmMessageInfoType.PARTITION));
90 int zoneNumber = Integer.parseInt(event.getDSCAlarmMessage().getMessageInfo(DSCAlarmMessageInfoType.ZONE));
92 switch (dscAlarmThingType) {
96 thingUID = new ThingUID(DSCAlarmBindingConstants.PANEL_THING_TYPE, bridge.getUID(), thingID);
99 if (partitionNumber >= 1 && partitionNumber <= 8) {
100 thingID = "partition" + partitionNumber;
101 thingLabel = "Partition " + partitionNumber;
102 properties = new HashMap<>(0);
103 thingUID = new ThingUID(DSCAlarmBindingConstants.PARTITION_THING_TYPE, bridge.getUID(), thingID);
104 properties.put(DSCAlarmPartitionConfiguration.PARTITION_NUMBER, partitionNumber);
109 if (zoneNumber >= 1 && zoneNumber <= 64) {
110 thingID = "zone" + zoneNumber;
111 thingLabel = "Zone " + zoneNumber;
112 properties = new HashMap<>(0);
113 thingUID = new ThingUID(DSCAlarmBindingConstants.ZONE_THING_TYPE, bridge.getUID(), thingID);
114 properties.put(DSCAlarmZoneConfiguration.ZONE_NUMBER, zoneNumber);
119 thingLabel = "Keypad";
120 thingUID = new ThingUID(DSCAlarmBindingConstants.KEYPAD_THING_TYPE, bridge.getUID(), thingID);
124 if (thingUID != null) {
125 DiscoveryResult discoveryResult;
127 if (properties != null) {
128 discoveryResult = DiscoveryResultBuilder.create(thingUID).withProperties(properties)
129 .withBridge(bridge.getUID()).withLabel(thingLabel).build();
131 discoveryResult = DiscoveryResultBuilder.create(thingUID).withBridge(bridge.getUID())
132 .withLabel(thingLabel).build();
135 thingDiscovered(discoveryResult);
137 logger.debug("addThing(): Unable to Add DSC Alarm Thing to Inbox!");
142 protected void startScan() {
143 // Can be ignored here as discovery is via the bridge