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.lutron.internal.hw;
15 import static org.openhab.binding.lutron.internal.LutronBindingConstants.CHANNEL_LIGHTLEVEL;
17 import org.openhab.core.library.types.OnOffType;
18 import org.openhab.core.library.types.PercentType;
19 import org.openhab.core.thing.Bridge;
20 import org.openhab.core.thing.ChannelUID;
21 import org.openhab.core.thing.Thing;
22 import org.openhab.core.thing.ThingStatus;
23 import org.openhab.core.thing.ThingStatusDetail;
24 import org.openhab.core.thing.binding.BaseThingHandler;
25 import org.openhab.core.types.Command;
28 * This class extends the BaseThingHandler to support HomeWorks Dimmer modules.
30 * @author Andrew Shilliday - Initial contribution
33 public class HwDimmerHandler extends BaseThingHandler {
34 private String address;
35 private Integer fadeTime = 1;
36 private Integer defaultLevel = 100;
38 public HwDimmerHandler(Thing thing) {
43 public void initialize() {
44 HwDimmerConfig config = getThing().getConfiguration().as(HwDimmerConfig.class);
46 address = config.getAddress();
47 if (address == null || address.isEmpty()) {
48 updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, "Address not set");
52 fadeTime = config.getFadeTime();
53 defaultLevel = config.getDefaultLevel();
55 if (getThing().getBridgeUID() == null) {
56 updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, "No bridge configured");
60 updateStatus(ThingStatus.ONLINE);
64 public String getAddress() {
69 public void handleCommand(ChannelUID channelUID, Command command) {
70 if (channelUID.getId().equals(CHANNEL_LIGHTLEVEL)) {
71 if (command instanceof Number number) {
72 int level = number.intValue();
74 } else if (command.equals(OnOffType.ON)) {
75 outputLevel(defaultLevel);
76 } else if (command.equals(OnOffType.OFF)) {
82 private HwSerialBridgeHandler getBridgeHandler() {
83 Bridge bridge = getBridge();
86 } else if (!(bridge.getHandler() instanceof HwSerialBridgeHandler)) {
89 return (HwSerialBridgeHandler) bridge.getHandler();
93 private void queryLevel() {
94 HwSerialBridgeHandler bridgeHandler = getBridgeHandler();
95 if (bridgeHandler == null) {
96 updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.HANDLER_MISSING_ERROR, "No bridge associated");
100 String cmd = String.format("RDL, %s", address);
101 bridgeHandler.sendCommand(cmd);
104 private void outputLevel(Number level) {
105 HwSerialBridgeHandler bridgeHandler = getBridgeHandler();
106 if (bridgeHandler == null) {
107 updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.HANDLER_MISSING_ERROR, "No bridge associated");
111 String cmd = String.format("FADEDIM, %s, %s, 0, %s", level, fadeTime, address);
112 bridgeHandler.sendCommand(cmd);
115 public void handleLevelChange(Integer level) {
116 updateState(CHANNEL_LIGHTLEVEL, new PercentType(level));