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
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;
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,
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,
- 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,
+ 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_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),