From 3ecf280eea8e10630d82e0dcc6bab9157d0fad5a Mon Sep 17 00:00:00 2001 From: Pawel Bogut Date: Tue, 29 Dec 2020 20:40:09 +0100 Subject: [PATCH] Fix Temp sensor to show correct temperature --- .../ewpesmart/internal/EWPESmartHandler.java | 2 +- .../ewpesmart/internal/device/EWPEDevice.java | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/openhab/binding/ewpesmart/internal/EWPESmartHandler.java b/src/main/java/org/openhab/binding/ewpesmart/internal/EWPESmartHandler.java index b677b00..ba90479 100644 --- a/src/main/java/org/openhab/binding/ewpesmart/internal/EWPESmartHandler.java +++ b/src/main/java/org/openhab/binding/ewpesmart/internal/EWPESmartHandler.java @@ -328,7 +328,7 @@ private void publishChannelIfLinked(ChannelUID channelUID) { } else if (CHANNEL_TEMP_SENSOR.equals(channelID)) { stateValue = thisDevice.GetIntStatusValIfChanged("TemSen"); if (stateValue != null) { - state = new DecimalType(stateValue); + state = new DecimalType(thisDevice.GetDeviceTempSen()); } } else if (CHANNEL_SWING_VERTICAL.equals(channelID)) { stateValue = thisDevice.GetIntStatusValIfChanged("SwUpDn"); diff --git a/src/main/java/org/openhab/binding/ewpesmart/internal/device/EWPEDevice.java b/src/main/java/org/openhab/binding/ewpesmart/internal/device/EWPEDevice.java index e2b9dab..45b3948 100644 --- a/src/main/java/org/openhab/binding/ewpesmart/internal/device/EWPEDevice.java +++ b/src/main/java/org/openhab/binding/ewpesmart/internal/device/EWPEDevice.java @@ -51,6 +51,7 @@ */ public class EWPEDevice { + private final static Integer ROOM_TEMP_OFFSET = 40; private final static Charset UTF8_CHARSET = Charset.forName("UTF-8"); private final static HashMap> tempRanges = createTempRangeMap(); private Boolean mIsBound = false; @@ -398,7 +399,17 @@ public Integer GetDeviceTempSet() { } public Integer GetDeviceTempSen() { - return GetIntStatusVal("TemSen"); + // TemSen has 40 offset to avoid having negative values + Integer curVal = GetIntStatusVal("TemSen") - ROOM_TEMP_OFFSET; + Integer outVal = curVal; + Integer CorF = GetIntStatusVal("TemUn"); + if (CorF == 1) { // If Fahrenheit, + // value argument is degrees F, convert Celsius to Fahrenheit, + // TemSen output from A/C is always in Celsius despite passing in 1 + // to TemUn + outVal = Integer.valueOf((int)Math.round((curVal * 1.8) + 32.)); // Integer Truncated + } + return outVal; } public void SetDeviceAir(DatagramSocket clientSocket, Integer value) throws Exception { @@ -493,7 +504,7 @@ public Integer GetIntStatusVal(String valueName) { * "Tur": Turbo * "StHt": 0, * "TemUn": Temperature unit, 0 for Celsius, 1 for Fahrenheit - * "TemSen": Room Temperature + * "TemSen": Room Temperature with (+40 offset to avoid negative values) * "HeatCoolType" * "TemRec": (0 or 1), Send with SetTem, when TemUn==1, distinguishes between upper and lower integer Fahrenheit temp * "SvSt": Power Saving