diff --git a/addons/binding/org.openhab.binding.enocean/ESH-INF/thing/channels.xml b/addons/binding/org.openhab.binding.enocean/ESH-INF/thing/channels.xml
index 99739797869f0..c1def736655b3 100644
--- a/addons/binding/org.openhab.binding.enocean/ESH-INF/thing/channels.xml
+++ b/addons/binding/org.openhab.binding.enocean/ESH-INF/thing/channels.xml
@@ -68,6 +68,12 @@
Dimmer
DimmableLight
+
+
+
+ A5-38-08: Ramping Time (in seconds), 0 = no ramping, 1..255 = seconds to 100%; D2-01-01: 0 = switch, 1-3 = timer 1-3, 4 = stop
+
+
diff --git a/addons/binding/org.openhab.binding.enocean/src/main/java/org/openhab/binding/enocean/internal/config/EnOceanChannelDimmerConfig.java b/addons/binding/org.openhab.binding.enocean/src/main/java/org/openhab/binding/enocean/internal/config/EnOceanChannelDimmerConfig.java
new file mode 100644
index 0000000000000..389a972a687f9
--- /dev/null
+++ b/addons/binding/org.openhab.binding.enocean/src/main/java/org/openhab/binding/enocean/internal/config/EnOceanChannelDimmerConfig.java
@@ -0,0 +1,27 @@
+/**
+ * Copyright (c) 2010-2019 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+
+package org.openhab.binding.enocean.internal.config;
+
+/**
+ *
+ * @author Dominik Krickl-Vorreiter - Initial contribution
+ */
+public class EnOceanChannelDimmerConfig {
+
+ public Integer rampingTime;
+
+ public EnOceanChannelDimmerConfig() {
+ rampingTime = 0;
+ }
+}
diff --git a/addons/binding/org.openhab.binding.enocean/src/main/java/org/openhab/binding/enocean/internal/eep/A5_38/A5_38_08_Dimming.java b/addons/binding/org.openhab.binding.enocean/src/main/java/org/openhab/binding/enocean/internal/eep/A5_38/A5_38_08_Dimming.java
index f3c3672309c83..18a730eae1b93 100644
--- a/addons/binding/org.openhab.binding.enocean/src/main/java/org/openhab/binding/enocean/internal/eep/A5_38/A5_38_08_Dimming.java
+++ b/addons/binding/org.openhab.binding.enocean/src/main/java/org/openhab/binding/enocean/internal/eep/A5_38/A5_38_08_Dimming.java
@@ -14,6 +14,7 @@
import org.eclipse.smarthome.core.library.types.PercentType;
import org.eclipse.smarthome.core.types.Command;
import org.eclipse.smarthome.core.types.State;
+import org.openhab.binding.enocean.internal.config.EnOceanChannelDimmerConfig;
import org.openhab.binding.enocean.internal.eep.Base._4BSMessage;
import org.openhab.binding.enocean.internal.messages.ERP1Message;
@@ -40,26 +41,30 @@ public A5_38_08_Dimming(ERP1Message packet) {
protected void convertFromCommandImpl(String channelId, String channelTypeId, Command outputCommand,
State currentState, Configuration config) {
+ EnOceanChannelDimmerConfig c = config.as(EnOceanChannelDimmerConfig.class);
+ byte rampingTime = (c.rampingTime == null) ? Zero : c.rampingTime.byteValue();
+
if (outputCommand instanceof DecimalType) {
if (((DecimalType) outputCommand).equals(DecimalType.ZERO)) {
- setData(CommandId, Zero, Zero, (byte) (TeachInBit | SwitchOff));
+ setData(CommandId, Zero, rampingTime, (byte) (TeachInBit | SwitchOff));
} else {
- setData(CommandId, ((DecimalType) outputCommand).byteValue(), Zero, (byte) (TeachInBit | SwitchOn));
+ setData(CommandId, ((DecimalType) outputCommand).byteValue(), rampingTime,
+ (byte) (TeachInBit | SwitchOn));
}
} else if ((OnOffType) outputCommand == OnOffType.ON) {
- setData(CommandId, Switch100Percent, Zero, (byte) (TeachInBit | SwitchOn));
+ setData(CommandId, Switch100Percent, rampingTime, (byte) (TeachInBit | SwitchOn));
} else {
- setData(CommandId, Zero, Zero, (byte) (TeachInBit | SwitchOff));
+ setData(CommandId, Zero, rampingTime, (byte) (TeachInBit | SwitchOff));
}
}
@Override
public State convertToStateImpl(String channelId, String channelTypeId, State currentState, Configuration config) {
- if (getDB_0() == (TeachInBit | SwitchOff)) {
- return new PercentType(0);
- } else {
- return new PercentType(getDB_2Value());
+ if (getDB_0() == (TeachInBit | SwitchOff)) {
+ return new PercentType(0);
+ } else {
+ return new PercentType(getDB_2Value());
+ }
}
}
-}
diff --git a/addons/binding/org.openhab.binding.enocean/src/main/java/org/openhab/binding/enocean/internal/eep/D2_01/D2_01.java b/addons/binding/org.openhab.binding.enocean/src/main/java/org/openhab/binding/enocean/internal/eep/D2_01/D2_01.java
index f5f71db747eee..ddbd688872ae3 100644
--- a/addons/binding/org.openhab.binding.enocean/src/main/java/org/openhab/binding/enocean/internal/eep/D2_01/D2_01.java
+++ b/addons/binding/org.openhab.binding.enocean/src/main/java/org/openhab/binding/enocean/internal/eep/D2_01/D2_01.java
@@ -22,6 +22,7 @@
import org.eclipse.smarthome.core.types.State;
import org.eclipse.smarthome.core.types.UnDefType;
import org.eclipse.smarthome.core.util.HexUtils;
+import org.openhab.binding.enocean.internal.config.EnOceanChannelDimmerConfig;
import org.openhab.binding.enocean.internal.eep.Base._VLDMessage;
import org.openhab.binding.enocean.internal.messages.ERP1Message;
@@ -93,20 +94,25 @@ protected State getSwitchingData(byte channel) {
return UnDefType.UNDEF;
}
- protected void setDimmingData(Command command, byte outputChannel) {
+ protected void setDimmingData(Command command, byte outputChannel, Configuration config) {
+ byte outputValue;
+
if (command instanceof DecimalType) {
if (((DecimalType) command).equals(DecimalType.ZERO)) {
- setData(CMD_ACTUATOR_SET_STATUS, outputChannel, STATUS_SWITCHING_OFF);
+ outputValue = STATUS_SWITCHING_OFF;
} else {
- setData(CMD_ACTUATOR_SET_STATUS, outputChannel, ((DecimalType) command).byteValue());
+ outputValue = ((DecimalType) command).byteValue();
}
} else if ((OnOffType) command == OnOffType.ON) {
- setData(CMD_ACTUATOR_SET_STATUS, outputChannel, STATUS_DIMMING_100);
+ outputValue = STATUS_DIMMING_100;
} else {
- setData(CMD_ACTUATOR_SET_STATUS, outputChannel, STATUS_SWITCHING_OFF);
+ outputValue = STATUS_SWITCHING_OFF;
}
- setData(CMD_ACTUATOR_SET_STATUS, outputChannel);
+ EnOceanChannelDimmerConfig c = config.as(EnOceanChannelDimmerConfig.class);
+ byte rampingTime = (c.rampingTime == null) ? Zero : c.rampingTime.byteValue();
+
+ setData(CMD_ACTUATOR_SET_STATUS, (byte) ((rampingTime << 5) | outputChannel), outputValue);
}
protected State getDimmingData() {
@@ -207,7 +213,7 @@ protected void convertFromCommandImpl(String channelId, String channelTypeId, Co
if (command == RefreshType.REFRESH) {
setSwitchingQueryData(AllChannels_Mask);
} else {
- setDimmingData(command, AllChannels_Mask);
+ setDimmingData(command, AllChannels_Mask, config);
}
} else if (channelId.equals(CHANNEL_INSTANTPOWER) && command == RefreshType.REFRESH) {
setPowerMeasurementQueryData(AllChannels_Mask);