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);