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.handler;
15 import static org.openhab.binding.dscalarm.internal.DSCAlarmBindingConstants.*;
17 import java.util.EventObject;
19 import org.openhab.binding.dscalarm.internal.DSCAlarmCode;
20 import org.openhab.binding.dscalarm.internal.DSCAlarmEvent;
21 import org.openhab.binding.dscalarm.internal.DSCAlarmMessage;
22 import org.openhab.binding.dscalarm.internal.DSCAlarmMessage.DSCAlarmMessageInfoType;
23 import org.openhab.core.library.types.OnOffType;
24 import org.openhab.core.library.types.OpenClosedType;
25 import org.openhab.core.library.types.StringType;
26 import org.openhab.core.thing.ChannelUID;
27 import org.openhab.core.thing.Thing;
28 import org.openhab.core.types.Command;
29 import org.openhab.core.types.RefreshType;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
34 * This is a class for handling a Zone type Thing.
36 * @author Russell Stephens - Initial Contribution
38 public class ZoneThingHandler extends DSCAlarmBaseThingHandler {
40 private final Logger logger = LoggerFactory.getLogger(ZoneThingHandler.class);
47 public ZoneThingHandler(Thing thing) {
49 setDSCAlarmThingType(DSCAlarmThingType.ZONE);
53 public void updateChannel(ChannelUID channelUID, int state, String description) {
54 logger.debug("updateChannel(): Zone Channel UID: {}", channelUID);
58 OpenClosedType openClosedType;
60 if (channelUID != null) {
61 switch (channelUID.getId()) {
63 updateState(channelUID, new StringType(description));
66 openClosedType = (state > 0) ? OpenClosedType.OPEN : OpenClosedType.CLOSED;
67 updateState(channelUID, openClosedType);
69 case ZONE_BYPASS_MODE:
70 onOffType = (state > 0) ? OnOffType.ON : OnOffType.OFF;
71 updateState(channelUID, onOffType);
75 onOffType = trigger ? OnOffType.ON : OnOffType.OFF;
76 updateState(channelUID, onOffType);
80 onOffType = trigger ? OnOffType.ON : OnOffType.OFF;
81 updateState(channelUID, onOffType);
85 onOffType = trigger ? OnOffType.ON : OnOffType.OFF;
86 updateState(channelUID, onOffType);
90 onOffType = trigger ? OnOffType.ON : OnOffType.OFF;
91 updateState(channelUID, onOffType);
94 logger.debug("updateChannel(): Zone Channel not updated - {}.", channelUID);
101 public void handleCommand(ChannelUID channelUID, Command command) {
102 logger.debug("handleCommand(): Command Received - {} {}.", channelUID, command);
104 if (command instanceof RefreshType) {
108 if (dscAlarmBridgeHandler != null && dscAlarmBridgeHandler.isConnected()
109 && channelUID.getId().equals(ZONE_BYPASS_MODE)) {
110 String data = getPartitionNumber() + "*1" + String.format("%02d", getZoneNumber()) + "#";
112 dscAlarmBridgeHandler.sendCommand(DSCAlarmCode.KeySequence, data);
117 * Method to set Zone Message.
121 private void zoneMessage(String message) {
122 updateState(new ChannelUID(getThing().getUID(), ZONE_MESSAGE), new StringType(message));
126 public void dscAlarmEventReceived(EventObject event, Thing thing) {
128 if (getThing().equals(thing)) {
129 DSCAlarmEvent dscAlarmEvent = (DSCAlarmEvent) event;
130 DSCAlarmMessage dscAlarmMessage = dscAlarmEvent.getDSCAlarmMessage();
132 ChannelUID channelUID = null;
133 DSCAlarmCode dscAlarmCode = DSCAlarmCode
134 .getDSCAlarmCodeValue(dscAlarmMessage.getMessageInfo(DSCAlarmMessageInfoType.CODE));
135 logger.debug("dscAlarmEventRecieved(): Thing - {} Command - {}", thing.getUID(), dscAlarmCode);
140 switch (dscAlarmCode) {
141 case ZoneAlarm: /* 601 */
143 status = dscAlarmMessage.getMessageInfo(DSCAlarmMessageInfoType.DESCRIPTION);
144 case ZoneAlarmRestore: /* 602 */
145 channelUID = new ChannelUID(getThing().getUID(), ZONE_IN_ALARM);
146 updateChannel(channelUID, state, "");
149 case ZoneTamper: /* 603 */
151 status = dscAlarmMessage.getMessageInfo(DSCAlarmMessageInfoType.DESCRIPTION);
152 case ZoneTamperRestore: /* 604 */
153 channelUID = new ChannelUID(getThing().getUID(), ZONE_TAMPER);
154 updateChannel(channelUID, state, "");
157 case ZoneFault: /* 605 */
159 status = dscAlarmMessage.getMessageInfo(DSCAlarmMessageInfoType.DESCRIPTION);
160 case ZoneFaultRestore: /* 606 */
161 channelUID = new ChannelUID(getThing().getUID(), ZONE_FAULT);
162 updateChannel(channelUID, state, "");
165 case ZoneOpen: /* 609 */
167 status = dscAlarmMessage.getMessageInfo(DSCAlarmMessageInfoType.DESCRIPTION);
168 case ZoneRestored: /* 610 */
169 channelUID = new ChannelUID(getThing().getUID(), ZONE_TRIPPED);
170 updateChannel(channelUID, state, "");
172 channelUID = new ChannelUID(getThing().getUID(), ZONE_STATUS);
173 updateChannel(channelUID, state, "");