From dabdb4979b9bcc5e90407cd4bc36dca3817b459d Mon Sep 17 00:00:00 2001 From: Austin Guiswite Date: Wed, 15 Jul 2020 14:43:08 -0500 Subject: [PATCH] Added a feature to override Thing configuration fade in/out times. When enabled, the specified Item fade time will be used as light level changes. When disabled, dimmer fading will be set according to the preconfigured default. Useful for changing lighting behavior in rules or on sitemap via UI. Signed-off-by: Austin Guiswite --- bundles/org.openhab.binding.lutron/README.md | 4 +++ .../internal/LutronBindingConstants.java | 2 ++ .../internal/handler/DimmerHandler.java | 30 +++++++++++++++---- .../resources/ESH-INF/thing/thing-types.xml | 16 ++++++++++ 4 files changed, 47 insertions(+), 5 deletions(-) diff --git a/bundles/org.openhab.binding.lutron/README.md b/bundles/org.openhab.binding.lutron/README.md index 4b600f86e477d..23c232b836e2c 100644 --- a/bundles/org.openhab.binding.lutron/README.md +++ b/bundles/org.openhab.binding.lutron/README.md @@ -531,6 +531,8 @@ The following is a summary of channels for all RadioRA 2 binding things: | Thing | Channel | Item Type | Description | |---------------------|-------------------|---------------|--------------------------------------------- | | dimmer | lightlevel | Dimmer | Increase/decrease the light level | +| dimmer | enablefadetime | Switch | Override default fade in/out time | +| dimmer | fadetime | Number | Fade time when changing light level | | switch | switchstatus | Switch | On/off status of the switch | | occupancysensor | occupancystatus | Switch | Occupancy status | | cco | switchstatus | Switch | On/off status of the CCO | @@ -556,6 +558,8 @@ Appropriate channels will be created automatically by the keypad, ttkeypad, intl | Thing | Channel | Native Type | Accepts | |-----------|---------------|--------------|-------------------------------------------------------| |dimmer |lightlevel |PercentType |OnOffType, PercentType | +|dimmer |enablefadetime |OnOffType |OnOffType | +|dimmer |fadetime |DecimalType |DecimalType | |switch |switchstatus |OnOffType |OnOffType | |occ. sensor|occupancystatus|OnOffType |(*readonly*) | |cco |switchstatus |OnOffType |OnOffType, RefreshType | diff --git a/bundles/org.openhab.binding.lutron/src/main/java/org/openhab/binding/lutron/internal/LutronBindingConstants.java b/bundles/org.openhab.binding.lutron/src/main/java/org/openhab/binding/lutron/internal/LutronBindingConstants.java index f1b823b9ad65a..9b1b15e0c7332 100644 --- a/bundles/org.openhab.binding.lutron/src/main/java/org/openhab/binding/lutron/internal/LutronBindingConstants.java +++ b/bundles/org.openhab.binding.lutron/src/main/java/org/openhab/binding/lutron/internal/LutronBindingConstants.java @@ -65,6 +65,8 @@ public class LutronBindingConstants { public static final String CHANNEL_STEP = "step"; public static final String CHANNEL_BLINDLIFTLEVEL = "blindliftlevel"; public static final String CHANNEL_BLINDTILTLEVEL = "blindtiltlevel"; + public static final String CHANNEL_ENABLEFADETIME = "enablefadetime"; + public static final String CHANNEL_FADETIME = "fadetime"; // Bridge config properties (used by discovery service) public static final String HOST = "ipAddress"; diff --git a/bundles/org.openhab.binding.lutron/src/main/java/org/openhab/binding/lutron/internal/handler/DimmerHandler.java b/bundles/org.openhab.binding.lutron/src/main/java/org/openhab/binding/lutron/internal/handler/DimmerHandler.java index 37cfd3ead29f9..f648557f59fee 100644 --- a/bundles/org.openhab.binding.lutron/src/main/java/org/openhab/binding/lutron/internal/handler/DimmerHandler.java +++ b/bundles/org.openhab.binding.lutron/src/main/java/org/openhab/binding/lutron/internal/handler/DimmerHandler.java @@ -12,10 +12,9 @@ */ package org.openhab.binding.lutron.internal.handler; -import static org.openhab.binding.lutron.internal.LutronBindingConstants.CHANNEL_LIGHTLEVEL; - import java.math.BigDecimal; +import org.eclipse.smarthome.core.library.types.DecimalType; import org.eclipse.smarthome.core.library.types.OnOffType; import org.eclipse.smarthome.core.library.types.PercentType; import org.eclipse.smarthome.core.thing.Bridge; @@ -29,6 +28,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static org.openhab.binding.lutron.internal.LutronBindingConstants.*; + /** * Handler responsible for communicating with a light dimmer. * @@ -41,6 +42,8 @@ public class DimmerHandler extends LutronHandler { private final Logger logger = LoggerFactory.getLogger(DimmerHandler.class); private DimmerConfig config; + private Boolean overrideDefaultFadeTime = false; + private BigDecimal customFadeTime = new BigDecimal(0); public DimmerHandler(Thing thing) { super(thing); @@ -95,11 +98,19 @@ public void handleCommand(ChannelUID channelUID, Command command) { if (command instanceof Number) { int level = ((Number) command).intValue(); - output(ACTION_ZONELEVEL, level, 0.25); + output(ACTION_ZONELEVEL, level, getFadeTime(new BigDecimal(.25))); } else if (command.equals(OnOffType.ON)) { - output(ACTION_ZONELEVEL, 100, this.config.fadeInTime); + output(ACTION_ZONELEVEL, 100, getFadeTime(this.config.fadeInTime)); } else if (command.equals(OnOffType.OFF)) { - output(ACTION_ZONELEVEL, 0, this.config.fadeOutTime); + output(ACTION_ZONELEVEL, 0, getFadeTime(this.config.fadeOutTime)); + } + } else if (channelUID.getId().equals(CHANNEL_ENABLEFADETIME)) { + if (command instanceof OnOffType) { + this.overrideDefaultFadeTime = command.equals(OnOffType.ON); + } + } else if (channelUID.getId().equals(CHANNEL_FADETIME)) { + if (command instanceof DecimalType) { + customFadeTime= ((DecimalType) command).toBigDecimal(); } } } @@ -114,5 +125,14 @@ public void handleUpdate(LutronCommandType type, String... parameters) { } updateState(CHANNEL_LIGHTLEVEL, new PercentType(level)); } + updateState(CHANNEL_ENABLEFADETIME, overrideDefaultFadeTime ? OnOffType.ON : OnOffType.OFF); + updateState(CHANNEL_FADETIME, new DecimalType(customFadeTime)); + } + + private BigDecimal getFadeTime(BigDecimal defaultFadeTime) { + if (overrideDefaultFadeTime && customFadeTime != null) { + return customFadeTime; + } + return defaultFadeTime; } } diff --git a/bundles/org.openhab.binding.lutron/src/main/resources/ESH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.lutron/src/main/resources/ESH-INF/thing/thing-types.xml index ab9778f8e6689..a881004a8463a 100644 --- a/bundles/org.openhab.binding.lutron/src/main/resources/ESH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.lutron/src/main/resources/ESH-INF/thing/thing-types.xml @@ -67,6 +67,8 @@ + + integrationId @@ -1100,6 +1102,20 @@ + + Switch + + Allows config fade in/out time to be overridden + + + + Number + + Sets time in seconds to increase/decrease light level + Number + + + Rollershutter