[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:
Daniel Weber 2023-08-28 22:49:20 +02:00 committed by GitHub
parent 5cc5ee6f7b
commit b9b9bbb74c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 308 additions and 84 deletions

View File

@ -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.

View File

@ -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,

View File

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

View File

@ -18,19 +18,24 @@ 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
*/
@NonNullByDefault
@ -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;

View File

@ -16,7 +16,10 @@ 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
*/
@NonNullByDefault
@ -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;
}
}

View File

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

View File

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

View File

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

View File

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

View File

@ -16,7 +16,10 @@ 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
*/
@NonNullByDefault
@ -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();
}
}

View File

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

View File

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

View File

@ -14,9 +14,14 @@ 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
*/
@NonNullByDefault
@ -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);
}
}

View File

@ -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();
}
}

View File

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

View File

@ -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();
}
}

View File

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

View File

@ -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();
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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),

View File

@ -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

View File

@ -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>