[enocean] Fix humidity and temperature readings for EEP family A5_10 (#15506)
* Updated A5-10 EEP family (corrected readings, added new channels) * Changed fanSpeedStage channel to type Number and added new options to it * Added dayNightModeState channel Fixes #15458 Signed-off-by: Daniel Weber <uni@fruggy.de>
This commit is contained in:
parent
5cc5ee6f7b
commit
b9b9bbb74c
|
@ -89,7 +89,7 @@ Hence if your device supports one of the following EEPs the chances are good tha
|
|||
| occupancySensor | A5-07 | 0x01-03 | illumination, batteryVoltage, motionDetection | NodON PIR-2-1-01 | Discovery |
|
||||
| lightTemperatureOccupancySensor | A5-08 | 0x01-03 | illumination, temperature, occupancy, motionDetection | Eltako FABH | Discovery |
|
||||
| lightSensor | A5-06 | 0x01 | illumination | Eltako TF-AHDSB | Discovery |
|
||||
| roomOperatingPanel | A5-10 | 0x01-23 | temperature, setPoint, fanSpeedStage, occupancy | Thermokon SR04 | Discovery |
|
||||
| roomOperatingPanel | A5-10 | 0x01-23 | temperature, setPoint, fanSpeedStage, occupancy, dayNightModeState, conntact, humidity, illumination, batteryLevel, batteryLow | Thermokon SR04 | Discovery |
|
||||
| automatedMeterSensor | A5-12 | 0x00-03 | counter, currentNumber, instantpower, totalusage, amrLitre, amrCubicMetre | FWZ12 | Discovery |
|
||||
| environmentalSensor | A5-13 | 0x01-02 | temperature, windspeed, illumination, rainStatus | FWS61 | Discovery |
|
||||
| centralCommand | A5-38 | 0x08 | dimmer, generalSwitch | Eltako FUD14, FSR14 | Teach-in |
|
||||
|
@ -297,7 +297,7 @@ The channels of a thing are determined automatically based on the chosen EEP.
|
|||
| occupancy | Switch | Occupancy button pressed (ON) or released (OFF) |
|
||||
| motionDetection | Switch | On=Motion detected, Off=not |
|
||||
| setPoint | Number | linear set point |
|
||||
| fanSpeedStage | String | Fan speed: -1 (Auto), 0, 1, 2, 3 |
|
||||
| fanSpeedStage | Number | Fan speed: -1 (Auto), 0, 1, 2, 3, 4, 5, 6 |
|
||||
| dimmer | Dimmer | Dimmer value in percent |
|
||||
| generalSwitch(/A/B) | Switch | Switch something (channel A/B) ON/OFF |
|
||||
| rollershutter | Rollershutter | Shut time (shutTime) in seconds can be configured |
|
||||
|
@ -350,6 +350,7 @@ The channels of a thing are determined automatically based on the chosen EEP.
|
|||
| windowBreachEvent | Trigger | Emits event 'ALARM' |
|
||||
| protectionPlusEvent | Trigger | Emits event 'ALARM' |
|
||||
| vacationModeToggleEvent | Trigger | Emits events 'ACTIVATED', 'DEACTIVATED' |
|
||||
| dayNightModeState | Number | 0 = Night mode on, 1 = day mode on |
|
||||
|
||||
Items linked to bi-directional actuators (actuator sends status messages back) should always disable the `autoupdate`.
|
||||
This is especially true for Eltako rollershutter, as their position is calculated out of the current position and the moving time.
|
||||
|
|
|
@ -221,6 +221,7 @@ public class EnOceanBindingConstants {
|
|||
public static final String CHANNEL_EXHAUSTAIRFANAIRFLOWRATE = "exhaustAirFanAirFlowRate";
|
||||
public static final String CHANNEL_SUPPLYFANSPEED = "supplyFanSpeed";
|
||||
public static final String CHANNEL_EXHAUSTFANSPEED = "exhaustFanSpeed";
|
||||
public final static String CHANNEL_DAYNIGHTMODESTATE = "dayNightModeState";
|
||||
|
||||
public static final Map<String, EnOceanChannelDescription> CHANNELID2CHANNELDESCRIPTION = Map.ofEntries(
|
||||
Map.entry(CHANNEL_GENERAL_SWITCHING,
|
||||
|
@ -263,7 +264,7 @@ public class EnOceanBindingConstants {
|
|||
CoreItemFactory.NUMBER)),
|
||||
Map.entry(CHANNEL_FANSPEEDSTAGE,
|
||||
new EnOceanChannelDescription(new ChannelTypeUID(BINDING_ID, CHANNEL_FANSPEEDSTAGE),
|
||||
CoreItemFactory.STRING)),
|
||||
CoreItemFactory.NUMBER)),
|
||||
Map.entry(CHANNEL_OCCUPANCY,
|
||||
new EnOceanChannelDescription(new ChannelTypeUID(BINDING_ID, CHANNEL_OCCUPANCY),
|
||||
CoreItemFactory.SWITCH)),
|
||||
|
@ -575,6 +576,9 @@ public class EnOceanBindingConstants {
|
|||
new EnOceanChannelDescription(new ChannelTypeUID(BINDING_ID, CHANNEL_EXHAUSTFANSPEED),
|
||||
CoreItemFactory.NUMBER + ItemUtil.EXTENSION_SEPARATOR
|
||||
+ Dimensionless.class.getSimpleName())),
|
||||
Map.entry(CHANNEL_DAYNIGHTMODESTATE,
|
||||
new EnOceanChannelDescription(new ChannelTypeUID(BINDING_ID, CHANNEL_DAYNIGHTMODESTATE),
|
||||
CoreItemFactory.NUMBER)),
|
||||
|
||||
Map.entry(CHANNEL_STATUS_REQUEST_EVENT,
|
||||
new EnOceanChannelDescription(new ChannelTypeUID(BINDING_ID, CHANNEL_STATUS_REQUEST_EVENT), null,
|
||||
|
|
|
@ -53,4 +53,26 @@ public class Helper {
|
|||
return defaultValue;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Scales the given value
|
||||
*
|
||||
* @param value Value to be scaled
|
||||
* @param minUnscaled Value for min value in unscaled dimension
|
||||
* @param maxUnscaled Value for max value in unscaled dimension
|
||||
* @param minValue
|
||||
* @param maxValue
|
||||
* @return
|
||||
*/
|
||||
public static double scaleValue(double value, double minUnscaled, double maxUnscaled, double minValue,
|
||||
double maxValue) {
|
||||
double range = maxValue - minValue;
|
||||
double unscaledRange = maxUnscaled - minUnscaled;
|
||||
|
||||
if (maxUnscaled > minUnscaled) {
|
||||
return minValue + (value * range / unscaledRange);
|
||||
} else {
|
||||
return maxValue + (value * range / unscaledRange);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,18 +18,23 @@ import java.util.function.Function;
|
|||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.eclipse.jdt.annotation.Nullable;
|
||||
import org.openhab.binding.enocean.internal.Helper;
|
||||
import org.openhab.binding.enocean.internal.eep.Base._4BSMessage;
|
||||
import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
||||
import org.openhab.core.config.core.Configuration;
|
||||
import org.openhab.core.library.types.DecimalType;
|
||||
import org.openhab.core.library.types.OnOffType;
|
||||
import org.openhab.core.library.types.OpenClosedType;
|
||||
import org.openhab.core.library.types.QuantityType;
|
||||
import org.openhab.core.library.types.StringType;
|
||||
import org.openhab.core.library.unit.SIUnits;
|
||||
import org.openhab.core.library.unit.Units;
|
||||
import org.openhab.core.types.State;
|
||||
import org.openhab.core.types.UnDefType;
|
||||
|
||||
/**
|
||||
* From A5_10_01 up to A5_10_0D temperature is given as a 8Bit value (range: 255..0).
|
||||
* Therefore higher values mean lower temperatures.
|
||||
* Temperature range 0..40.
|
||||
*
|
||||
* @author Daniel Weber - Initial contribution
|
||||
*/
|
||||
|
@ -40,32 +45,105 @@ public abstract class A5_10 extends _4BSMessage {
|
|||
super(packet);
|
||||
}
|
||||
|
||||
protected int getSetPointValue() {
|
||||
// this is the default one
|
||||
return getDB2Value();
|
||||
}
|
||||
|
||||
protected double getMinTemperatureValue() {
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
protected double getMinUnscaledTemperatureValue() {
|
||||
return 255.0;
|
||||
}
|
||||
|
||||
protected double getMaxTemperatureValue() {
|
||||
return 40.0;
|
||||
}
|
||||
|
||||
protected double getMaxUnscaledTemperatureValue() {
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
protected double getTemperatureValue() {
|
||||
return getDB1Value();
|
||||
}
|
||||
|
||||
protected State getTemperature() {
|
||||
return new QuantityType<>(
|
||||
Helper.scaleValue(getTemperatureValue(), getMinUnscaledTemperatureValue(),
|
||||
getMaxUnscaledTemperatureValue(), getMinTemperatureValue(), getMaxTemperatureValue()),
|
||||
SIUnits.CELSIUS);
|
||||
}
|
||||
|
||||
protected State getFanSpeedStage() {
|
||||
if (getDB3Value() > 209) {
|
||||
return new DecimalType(-1);
|
||||
} else if (getDB3Value() > 189) {
|
||||
return new DecimalType(0);
|
||||
} else if (getDB3Value() > 164) {
|
||||
return new DecimalType(1);
|
||||
} else if (getDB3Value() > 144) {
|
||||
return new DecimalType(2);
|
||||
} else {
|
||||
return new DecimalType(3);
|
||||
}
|
||||
}
|
||||
|
||||
protected int getIlluminationValue() {
|
||||
return getDB3Value();
|
||||
}
|
||||
|
||||
protected State getIllumination() {
|
||||
return new QuantityType<>(getIlluminationValue() * 4, Units.LUX);
|
||||
}
|
||||
|
||||
protected double getHumidityValue() {
|
||||
return getDB2Value();
|
||||
}
|
||||
|
||||
protected State getSupplyVoltage() {
|
||||
double voltage = ((double) getDB3Value()) / 50.0;
|
||||
return new QuantityType<>(voltage, Units.VOLT);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected State convertToStateImpl(String channelId, String channelTypeId,
|
||||
Function<String, @Nullable State> getCurrentStateFunc, Configuration config) {
|
||||
|
||||
switch (channelId) {
|
||||
|
||||
case CHANNEL_BATTERY_VOLTAGE:
|
||||
return getSupplyVoltage();
|
||||
|
||||
case CHANNEL_ILLUMINATION:
|
||||
return getIllumination();
|
||||
|
||||
case CHANNEL_FANSPEEDSTAGE:
|
||||
if (getDB3Value() > 209) {
|
||||
return new StringType("-1");
|
||||
} else if (getDB3Value() > 189) {
|
||||
return new StringType("0");
|
||||
} else if (getDB3Value() > 164) {
|
||||
return new StringType("1");
|
||||
} else if (getDB3Value() > 144) {
|
||||
return new StringType("2");
|
||||
} else {
|
||||
return new StringType("3");
|
||||
}
|
||||
return getFanSpeedStage();
|
||||
|
||||
case CHANNEL_SETPOINT:
|
||||
return new DecimalType(getDB2Value());
|
||||
return new DecimalType(getSetPointValue());
|
||||
|
||||
case CHANNEL_HUMIDITY:
|
||||
return new DecimalType(getHumidityValue() / 2.5);
|
||||
|
||||
case CHANNEL_TEMPERATURE:
|
||||
double temp = (getDB1Value() - 255) / -6.375;
|
||||
return new QuantityType<>(temp, SIUnits.CELSIUS);
|
||||
return getTemperature();
|
||||
|
||||
case CHANNEL_BATTERYLOW:
|
||||
return getBit(getDB0(), 4) ? OnOffType.ON : OnOffType.OFF;
|
||||
|
||||
case CHANNEL_OCCUPANCY:
|
||||
return getBit(getDB0(), 0) ? OnOffType.OFF : OnOffType.ON;
|
||||
|
||||
case CHANNEL_DAYNIGHTMODESTATE:
|
||||
return new DecimalType(getDB0Value() & 0x01);
|
||||
|
||||
case CHANNEL_CONTACT:
|
||||
return getBit(getDB0(), 0) ? OpenClosedType.OPEN : OpenClosedType.CLOSED;
|
||||
|
||||
}
|
||||
|
||||
return UnDefType.UNDEF;
|
||||
|
|
|
@ -16,6 +16,9 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
|
|||
import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
||||
|
||||
/**
|
||||
* From A5_10_10 up to A5_10_14 temperature is given as a 8Bit value (range: 0..250!).
|
||||
* Therefore higher values mean higher temperatures.
|
||||
* Temperature range 0..40.
|
||||
*
|
||||
* @author Daniel Weber - Initial contribution
|
||||
*/
|
||||
|
@ -25,4 +28,29 @@ public class A5_10_10 extends A5_10 {
|
|||
public A5_10_10(ERP1Message packet) {
|
||||
super(packet);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getSetPointValue() {
|
||||
return getDB3Value();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected double getMinTemperatureValue() {
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected double getMinUnscaledTemperatureValue() {
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected double getMaxTemperatureValue() {
|
||||
return 40.0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected double getMaxUnscaledTemperatureValue() {
|
||||
return 250.0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
|||
* @author Daniel Weber - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class A5_10_11 extends A5_10 {
|
||||
public class A5_10_11 extends A5_10_10 {
|
||||
|
||||
public A5_10_11(ERP1Message packet) {
|
||||
super(packet);
|
||||
|
|
|
@ -20,7 +20,7 @@ import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
|||
* @author Daniel Weber - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class A5_10_12 extends A5_10 {
|
||||
public class A5_10_12 extends A5_10_10 {
|
||||
|
||||
public A5_10_12(ERP1Message packet) {
|
||||
super(packet);
|
||||
|
|
|
@ -20,7 +20,7 @@ import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
|||
* @author Daniel Weber - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class A5_10_13 extends A5_10 {
|
||||
public class A5_10_13 extends A5_10_10 {
|
||||
|
||||
public A5_10_13(ERP1Message packet) {
|
||||
super(packet);
|
||||
|
|
|
@ -20,7 +20,7 @@ import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
|||
* @author Daniel Weber - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class A5_10_14 extends A5_10 {
|
||||
public class A5_10_14 extends A5_10_10 {
|
||||
|
||||
public A5_10_14(ERP1Message packet) {
|
||||
super(packet);
|
||||
|
|
|
@ -16,6 +16,9 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
|
|||
import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
||||
|
||||
/**
|
||||
* From A5_10_15 up to A5_10_17 temperature is given as a 10Bit value (range: 1023..0).
|
||||
* Therefore higher values mean lower temperatures.
|
||||
* Temperature range -10..41.2.
|
||||
*
|
||||
* @author Daniel Weber - Initial contribution
|
||||
*/
|
||||
|
@ -25,4 +28,34 @@ public class A5_10_15 extends A5_10 {
|
|||
public A5_10_15(ERP1Message packet) {
|
||||
super(packet);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getSetPointValue() {
|
||||
return getDB2Value() >>> 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected double getMinTemperatureValue() {
|
||||
return -10.0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected double getMinUnscaledTemperatureValue() {
|
||||
return 1023.0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected double getMaxTemperatureValue() {
|
||||
return 41.2;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected double getMaxUnscaledTemperatureValue() {
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected double getTemperatureValue() {
|
||||
return ((getDB2Value() & 0b11) << 8) + getDB1Value();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
|||
* @author Daniel Weber - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class A5_10_16 extends A5_10 {
|
||||
public class A5_10_16 extends A5_10_15 {
|
||||
|
||||
public A5_10_16(ERP1Message packet) {
|
||||
super(packet);
|
||||
|
|
|
@ -20,7 +20,7 @@ import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
|||
* @author Daniel Weber - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class A5_10_17 extends A5_10 {
|
||||
public class A5_10_17 extends A5_10_15 {
|
||||
|
||||
public A5_10_17(ERP1Message packet) {
|
||||
super(packet);
|
||||
|
|
|
@ -14,8 +14,13 @@ package org.openhab.binding.enocean.internal.eep.A5_10;
|
|||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
||||
import org.openhab.core.library.types.DecimalType;
|
||||
import org.openhab.core.types.State;
|
||||
|
||||
/**
|
||||
* From A5_10_18 up to A5_10_17 temperature is given as a 8Bit value (range: 250(!)..0).
|
||||
* Therefore higher values mean lower temperatures.
|
||||
* Temperature range 0..40.
|
||||
*
|
||||
* @author Daniel Weber - Initial contribution
|
||||
*/
|
||||
|
@ -25,4 +30,13 @@ public class A5_10_18 extends A5_10 {
|
|||
public A5_10_18(ERP1Message packet) {
|
||||
super(packet);
|
||||
}
|
||||
|
||||
protected double getMinUnscaledTemperatureValue() {
|
||||
return 250.0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected State getFanSpeedStage() {
|
||||
return new DecimalType((getDB0Value() >>> 4) - 1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,9 +20,14 @@ import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
|||
* @author Daniel Weber - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class A5_10_19 extends A5_10 {
|
||||
public class A5_10_19 extends A5_10_18 {
|
||||
|
||||
public A5_10_19(ERP1Message packet) {
|
||||
super(packet);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected double getHumidityValue() {
|
||||
return getDB3Value();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
|||
* @author Daniel Weber - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class A5_10_1A extends A5_10 {
|
||||
public class A5_10_1A extends A5_10_18 {
|
||||
|
||||
public A5_10_1A(ERP1Message packet) {
|
||||
super(packet);
|
||||
|
|
|
@ -20,9 +20,14 @@ import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
|||
* @author Daniel Weber - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class A5_10_1B extends A5_10 {
|
||||
public class A5_10_1B extends A5_10_18 {
|
||||
|
||||
public A5_10_1B(ERP1Message packet) {
|
||||
super(packet);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getIlluminationValue() {
|
||||
return getDB2Value();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
|||
* @author Daniel Weber - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class A5_10_1C extends A5_10 {
|
||||
public class A5_10_1C extends A5_10_18 {
|
||||
|
||||
public A5_10_1C(ERP1Message packet) {
|
||||
super(packet);
|
||||
|
|
|
@ -20,9 +20,14 @@ import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
|||
* @author Daniel Weber - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class A5_10_1D extends A5_10 {
|
||||
public class A5_10_1D extends A5_10_18 {
|
||||
|
||||
public A5_10_1D(ERP1Message packet) {
|
||||
super(packet);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected double getHumidityValue() {
|
||||
return getDB3Value();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
|||
* @author Daniel Weber - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class A5_10_1E extends A5_10 {
|
||||
public class A5_10_1E extends A5_10_1B {
|
||||
|
||||
public A5_10_1E(ERP1Message packet) {
|
||||
super(packet);
|
||||
|
|
|
@ -20,7 +20,7 @@ import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
|||
* @author Daniel Weber - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class A5_10_20 extends A5_10 {
|
||||
public class A5_10_20 extends A5_10_10 {
|
||||
|
||||
public A5_10_20(ERP1Message packet) {
|
||||
super(packet);
|
||||
|
|
|
@ -20,7 +20,7 @@ import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
|||
* @author Daniel Weber - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class A5_10_21 extends A5_10 {
|
||||
public class A5_10_21 extends A5_10_10 {
|
||||
|
||||
public A5_10_21(ERP1Message packet) {
|
||||
super(packet);
|
||||
|
|
|
@ -14,15 +14,22 @@ package org.openhab.binding.enocean.internal.eep.A5_10;
|
|||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
||||
import org.openhab.core.library.types.DecimalType;
|
||||
import org.openhab.core.types.State;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Daniel Weber - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class A5_10_22 extends A5_10 {
|
||||
public class A5_10_22 extends A5_10_10 {
|
||||
|
||||
public A5_10_22(ERP1Message packet) {
|
||||
super(packet);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected State getFanSpeedStage() {
|
||||
return new DecimalType((getDB0Value() >>> 5) - 1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
|||
* @author Daniel Weber - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class A5_10_23 extends A5_10 {
|
||||
public class A5_10_23 extends A5_10_22 {
|
||||
|
||||
public A5_10_23(ERP1Message packet) {
|
||||
super(packet);
|
||||
|
|
|
@ -321,7 +321,7 @@ public enum EEPType {
|
|||
RoomPanel_A5_10_01(RORG._4BS, 0x10, 0x01, false, A5_10_01.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_SETPOINT, CHANNEL_FANSPEEDSTAGE, CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_02(RORG._4BS, 0x10, 0x02, false, A5_10_02.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_SETPOINT, CHANNEL_FANSPEEDSTAGE),
|
||||
CHANNEL_SETPOINT, CHANNEL_FANSPEEDSTAGE, CHANNEL_DAYNIGHTMODESTATE),
|
||||
RoomPanel_A5_10_03(RORG._4BS, 0x10, 0x03, false, A5_10_03.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_SETPOINT),
|
||||
RoomPanel_A5_10_04(RORG._4BS, 0x10, 0x04, false, A5_10_04.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
|
@ -329,61 +329,61 @@ public enum EEPType {
|
|||
RoomPanel_A5_10_05(RORG._4BS, 0x10, 0x05, false, A5_10_05.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_SETPOINT, CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_06(RORG._4BS, 0x10, 0x06, false, A5_10_06.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_SETPOINT),
|
||||
CHANNEL_SETPOINT, CHANNEL_DAYNIGHTMODESTATE),
|
||||
RoomPanel_A5_10_07(RORG._4BS, 0x10, 0x07, false, A5_10_07.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_FANSPEEDSTAGE),
|
||||
RoomPanel_A5_10_08(RORG._4BS, 0x10, 0x08, false, A5_10_08.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_FANSPEEDSTAGE, CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_09(RORG._4BS, 0x10, 0x09, false, A5_10_09.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_FANSPEEDSTAGE),
|
||||
CHANNEL_FANSPEEDSTAGE, CHANNEL_DAYNIGHTMODESTATE),
|
||||
RoomPanel_A5_10_0A(RORG._4BS, 0x10, 0x0A, false, A5_10_0A.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_SETPOINT),
|
||||
RoomPanel_A5_10_0B(RORG._4BS, 0x10, 0x0B, false, A5_10_0B.class, THING_TYPE_ROOMOPERATINGPANEL,
|
||||
CHANNEL_TEMPERATURE),
|
||||
CHANNEL_SETPOINT, CHANNEL_CONTACT),
|
||||
RoomPanel_A5_10_0B(RORG._4BS, 0x10, 0x0B, false, A5_10_0B.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_CONTACT),
|
||||
RoomPanel_A5_10_0C(RORG._4BS, 0x10, 0x0C, false, A5_10_0C.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_0D(RORG._4BS, 0x10, 0x0D, false, A5_10_0D.class, THING_TYPE_ROOMOPERATINGPANEL,
|
||||
RoomPanel_A5_10_0D(RORG._4BS, 0x10, 0x0D, false, A5_10_0D.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_DAYNIGHTMODESTATE),
|
||||
RoomPanel_A5_10_10(RORG._4BS, 0x10, 0x10, false, A5_10_10.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_SETPOINT,
|
||||
CHANNEL_HUMIDITY, CHANNEL_TEMPERATURE, CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_11(RORG._4BS, 0x10, 0x11, false, A5_10_11.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_SETPOINT,
|
||||
CHANNEL_HUMIDITY, CHANNEL_TEMPERATURE, CHANNEL_DAYNIGHTMODESTATE),
|
||||
RoomPanel_A5_10_12(RORG._4BS, 0x10, 0x12, false, A5_10_12.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_SETPOINT,
|
||||
CHANNEL_HUMIDITY, CHANNEL_TEMPERATURE),
|
||||
RoomPanel_A5_10_13(RORG._4BS, 0x10, 0x13, false, A5_10_13.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_HUMIDITY,
|
||||
CHANNEL_TEMPERATURE, CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_14(RORG._4BS, 0x10, 0x14, false, A5_10_14.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_HUMIDITY,
|
||||
CHANNEL_TEMPERATURE, CHANNEL_DAYNIGHTMODESTATE),
|
||||
RoomPanel_A5_10_15(RORG._4BS, 0x10, 0x15, false, A5_10_15.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_SETPOINT,
|
||||
CHANNEL_TEMPERATURE),
|
||||
RoomPanel_A5_10_10(RORG._4BS, 0x10, 0x10, false, A5_10_10.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_SETPOINT, CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_11(RORG._4BS, 0x10, 0x11, false, A5_10_11.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_SETPOINT),
|
||||
RoomPanel_A5_10_12(RORG._4BS, 0x10, 0x12, false, A5_10_12.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_SETPOINT),
|
||||
RoomPanel_A5_10_13(RORG._4BS, 0x10, 0x13, false, A5_10_13.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_14(RORG._4BS, 0x10, 0x14, false, A5_10_14.class, THING_TYPE_ROOMOPERATINGPANEL,
|
||||
CHANNEL_TEMPERATURE),
|
||||
RoomPanel_A5_10_15(RORG._4BS, 0x10, 0x15, false, A5_10_15.class, THING_TYPE_ROOMOPERATINGPANEL,
|
||||
CHANNEL_TEMPERATURE),
|
||||
RoomPanel_A5_10_16(RORG._4BS, 0x10, 0x16, false, A5_10_16.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_16(RORG._4BS, 0x10, 0x16, false, A5_10_16.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_SETPOINT,
|
||||
CHANNEL_TEMPERATURE, CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_17(RORG._4BS, 0x10, 0x17, false, A5_10_17.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_18(RORG._4BS, 0x10, 0x18, false, A5_10_18.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_19(RORG._4BS, 0x10, 0x19, false, A5_10_19.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_1A(RORG._4BS, 0x10, 0x1A, false, A5_10_1A.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_1B(RORG._4BS, 0x10, 0x1B, false, A5_10_1B.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_1C(RORG._4BS, 0x10, 0x1C, false, A5_10_1C.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_1D(RORG._4BS, 0x10, 0x1D, false, A5_10_1D.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_1E(RORG._4BS, 0x10, 0x1E, false, A5_10_1E.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_1F(RORG._4BS, 0x10, 0x1F, false, A5_10_1F.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_OCCUPANCY, CHANNEL_SETPOINT, CHANNEL_FANSPEEDSTAGE),
|
||||
RoomPanel_A5_10_20(RORG._4BS, 0x10, 0x20, false, A5_10_20.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_SETPOINT),
|
||||
RoomPanel_A5_10_21(RORG._4BS, 0x10, 0x21, false, A5_10_21.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_SETPOINT),
|
||||
RoomPanel_A5_10_22(RORG._4BS, 0x10, 0x22, false, A5_10_22.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_SETPOINT),
|
||||
RoomPanel_A5_10_23(RORG._4BS, 0x10, 0x23, false, A5_10_23.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_SETPOINT, CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_18(RORG._4BS, 0x10, 0x18, false, A5_10_18.class, THING_TYPE_ROOMOPERATINGPANEL,
|
||||
CHANNEL_ILLUMINATION, CHANNEL_SETPOINT, CHANNEL_TEMPERATURE, CHANNEL_FANSPEEDSTAGE, CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_19(RORG._4BS, 0x10, 0x19, false, A5_10_19.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_HUMIDITY,
|
||||
CHANNEL_SETPOINT, CHANNEL_TEMPERATURE, CHANNEL_FANSPEEDSTAGE, CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_1A(RORG._4BS, 0x10, 0x1A, false, A5_10_1A.class, THING_TYPE_ROOMOPERATINGPANEL,
|
||||
CHANNEL_BATTERY_LEVEL, CHANNEL_SETPOINT, CHANNEL_TEMPERATURE, CHANNEL_FANSPEEDSTAGE, CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_1B(RORG._4BS, 0x10, 0x1B, false, A5_10_1B.class, THING_TYPE_ROOMOPERATINGPANEL,
|
||||
CHANNEL_BATTERY_LEVEL, CHANNEL_ILLUMINATION, CHANNEL_TEMPERATURE, CHANNEL_FANSPEEDSTAGE, CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_1C(RORG._4BS, 0x10, 0x1C, false, A5_10_1C.class, THING_TYPE_ROOMOPERATINGPANEL,
|
||||
CHANNEL_ILLUMINATION, CHANNEL_TEMPERATURE, CHANNEL_FANSPEEDSTAGE, CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_1D(RORG._4BS, 0x10, 0x1D, false, A5_10_1D.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_HUMIDITY,
|
||||
CHANNEL_TEMPERATURE, CHANNEL_FANSPEEDSTAGE, CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_1E(RORG._4BS, 0x10, 0x1E, false, A5_10_1E.class, THING_TYPE_ROOMOPERATINGPANEL,
|
||||
CHANNEL_BATTERY_LEVEL, CHANNEL_ILLUMINATION, CHANNEL_TEMPERATURE, CHANNEL_FANSPEEDSTAGE, CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_1F(RORG._4BS, 0x10, 0x1F, false, A5_10_1F.class, THING_TYPE_ROOMOPERATINGPANEL,
|
||||
CHANNEL_FANSPEEDSTAGE, CHANNEL_SETPOINT, CHANNEL_TEMPERATURE, CHANNEL_OCCUPANCY),
|
||||
RoomPanel_A5_10_20(RORG._4BS, 0x10, 0x20, false, A5_10_20.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_SETPOINT,
|
||||
CHANNEL_TEMPERATURE, CHANNEL_BATTERYLOW),
|
||||
RoomPanel_A5_10_21(RORG._4BS, 0x10, 0x21, false, A5_10_21.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_SETPOINT,
|
||||
CHANNEL_TEMPERATURE, CHANNEL_HUMIDITY, CHANNEL_BATTERYLOW),
|
||||
RoomPanel_A5_10_22(RORG._4BS, 0x10, 0x22, false, A5_10_22.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_SETPOINT,
|
||||
CHANNEL_HUMIDITY, CHANNEL_TEMPERATURE, CHANNEL_FANSPEEDSTAGE),
|
||||
RoomPanel_A5_10_23(RORG._4BS, 0x10, 0x23, false, A5_10_23.class, THING_TYPE_ROOMOPERATINGPANEL, CHANNEL_SETPOINT,
|
||||
CHANNEL_HUMIDITY, CHANNEL_TEMPERATURE, CHANNEL_FANSPEEDSTAGE, CHANNEL_OCCUPANCY),
|
||||
|
||||
AutomatedMeterReading_00(RORG._4BS, 0x12, 0x00, false, A5_12_00.class, THING_TYPE_AUTOMATEDMETERSENSOR,
|
||||
CHANNEL_COUNTER, CHANNEL_CURRENTNUMBER),
|
||||
|
|
|
@ -407,6 +407,10 @@ channel-type.enocean.cumulativeValue.label = Cumulative Value
|
|||
channel-type.enocean.currentFlow.label = Current Flow
|
||||
channel-type.enocean.currentNumber.label = Current
|
||||
channel-type.enocean.currentNumber.description = Current
|
||||
channel-type.enocean.dayNightModeState.label = Day/Night Mode
|
||||
channel-type.enocean.dayNightModeState.description = Day (1) or Night (0) mode activated.
|
||||
channel-type.enocean.dayNightModeState.state.option.0 = Night
|
||||
channel-type.enocean.dayNightModeState.state.option.1 = Day
|
||||
channel-type.enocean.defrostMode.label = Defrost Mode
|
||||
channel-type.enocean.defrostMode.description = Indicates if defrosting of heat exchanger is active or not
|
||||
channel-type.enocean.delayRadioOFF.label = Delay Radio Off
|
||||
|
@ -446,6 +450,9 @@ channel-type.enocean.fanSpeedStage.state.option.0 = Stage 0
|
|||
channel-type.enocean.fanSpeedStage.state.option.1 = Stage 1
|
||||
channel-type.enocean.fanSpeedStage.state.option.2 = Stage 2
|
||||
channel-type.enocean.fanSpeedStage.state.option.3 = Stage 3
|
||||
channel-type.enocean.fanSpeedStage.state.option.4 = Stage 4
|
||||
channel-type.enocean.fanSpeedStage.state.option.5 = Stage 5
|
||||
channel-type.enocean.fanSpeedStage.state.option.6 = Off
|
||||
channel-type.enocean.feedTemperature.label = Feed Temperature
|
||||
channel-type.enocean.feedTemperature.description = Water temperature in the radiator input
|
||||
channel-type.enocean.fireplaceSafetyMode.label = Fireplace Safety Mode
|
||||
|
|
|
@ -171,7 +171,7 @@
|
|||
</channel-type>
|
||||
|
||||
<channel-type id="fanSpeedStage">
|
||||
<item-type>String</item-type>
|
||||
<item-type>Number</item-type>
|
||||
<label>Fan Speed</label>
|
||||
<state readOnly="true">
|
||||
<options>
|
||||
|
@ -180,6 +180,9 @@
|
|||
<option value="1">Stage 1</option>
|
||||
<option value="2">Stage 2</option>
|
||||
<option value="3">Stage 3</option>
|
||||
<option value="4">Stage 4</option>
|
||||
<option value="5">Stage 5</option>
|
||||
<option value="6">Off</option>
|
||||
</options>
|
||||
</state>
|
||||
</channel-type>
|
||||
|
@ -917,4 +920,16 @@
|
|||
</event>
|
||||
</channel-type>
|
||||
|
||||
<channel-type id="dayNightModeState">
|
||||
<item-type>Number</item-type>
|
||||
<label>Day/Night Mode</label>
|
||||
<description>Day (1) or Night (0) mode activated.</description>
|
||||
<state readOnly="true">
|
||||
<options>
|
||||
<option value="0">Night</option>
|
||||
<option value="1">Day</option>
|
||||
</options>
|
||||
</state>
|
||||
</channel-type>
|
||||
|
||||
</thing:thing-descriptions>
|
||||
|
|
Loading…
Reference in New Issue