diff --git a/examples/mitsubishi_heatpump_mqtt_esp8266_esp32/mitsubishi_heatpump_mqtt_esp8266_esp32.ino b/examples/mitsubishi_heatpump_mqtt_esp8266_esp32/mitsubishi_heatpump_mqtt_esp8266_esp32.ino index aa691e9..3da7f82 100644 --- a/examples/mitsubishi_heatpump_mqtt_esp8266_esp32/mitsubishi_heatpump_mqtt_esp8266_esp32.ino +++ b/examples/mitsubishi_heatpump_mqtt_esp8266_esp32/mitsubishi_heatpump_mqtt_esp8266_esp32.ino @@ -98,8 +98,9 @@ void hpStatusChanged(heatpumpStatus currentStatus) { const size_t bufferSizeInfo = JSON_OBJECT_SIZE(2); DynamicJsonDocument rootInfo(bufferSizeInfo); - rootInfo["roomTemperature"] = currentStatus.roomTemperature; - rootInfo["operating"] = currentStatus.operating; + rootInfo["roomTemperature"] = currentStatus.roomTemperature; + rootInfo["outdoorTemperature"] = currentStatus.outdoorTemperature; + rootInfo["operating"] = currentStatus.operating; char bufferInfo[512]; serializeJson(rootInfo, bufferInfo); diff --git a/integrations/OpenHAB/mitsubishi_heatpump_mqtt_esp8266_template/mitsubishi_heatpump_mqtt_esp8266_template.ino b/integrations/OpenHAB/mitsubishi_heatpump_mqtt_esp8266_template/mitsubishi_heatpump_mqtt_esp8266_template.ino index ba9466d..8b67686 100644 --- a/integrations/OpenHAB/mitsubishi_heatpump_mqtt_esp8266_template/mitsubishi_heatpump_mqtt_esp8266_template.ino +++ b/integrations/OpenHAB/mitsubishi_heatpump_mqtt_esp8266_template/mitsubishi_heatpump_mqtt_esp8266_template.ino @@ -84,8 +84,9 @@ void hpStatusChanged(heatpumpStatus currentStatus) { DynamicJsonBuffer jsonBufferInfo(bufferSizeInfo); JsonObject& rootInfo = jsonBufferInfo.createObject(); - rootInfo["roomTemperature"] = (isCelsius) ? hp.getRoomTemperature() : hp.CelsiusToFahrenheit(hp.getRoomTemperature()); - rootInfo["operating"] = currentStatus.operating; + rootInfo["roomTemperature"] = (isCelsius) ? hp.getRoomTemperature() : hp.CelsiusToFahrenheit(hp.getRoomTemperature()); + rootInfo["outdoorTemperature"] = (isCelsius) ? hp.getOutdoorTemperature() : hp.CelsiusToFahrenheit(hp.getOutdoorTemperature()); + rootInfo["operating"] = currentStatus.operating; char bufferInfo[512]; rootInfo.printTo(bufferInfo, sizeof(bufferInfo)); diff --git a/keywords.txt b/keywords.txt index 6563c35..317da9c 100644 --- a/keywords.txt +++ b/keywords.txt @@ -36,6 +36,7 @@ getIseeBool KEYWORD2 getStatus KEYWORD2 getRoomTemperature KEYWORD2 +getOutdoorTemperature KEYWORD2 getOperating KEYWORD2 FahrenheitToCelsius KEYWORD2 diff --git a/src/HeatPump.cpp b/src/HeatPump.cpp index cb7d886..f9ebb57 100644 --- a/src/HeatPump.cpp +++ b/src/HeatPump.cpp @@ -384,6 +384,10 @@ float HeatPump::getRoomTemperature() { return currentStatus.roomTemperature; } +float HeatPump::getOutdoorTemperature() { + return currentStatus.outdoorTemperature; +} + bool HeatPump::getOperating() { return currentStatus.operating; } @@ -680,6 +684,14 @@ int HeatPump::readPacket() { case 0x03: { //Room temperature reading heatpumpStatus receivedStatus; + if(data[5] != 0x00) { + int temp = data[5]; + temp -= 128; + receivedStatus.outdoorTemperature = (float)temp / 2; + } else { + receivedStatus.outdoorTemperature = 0; + } + if(data[6] != 0x00) { int temp = data[6]; temp -= 128; @@ -702,6 +714,16 @@ int HeatPump::readPacket() { currentStatus.roomTemperature = receivedStatus.roomTemperature; } + if((statusChangedCallback) && currentStatus.outdoorTemperature != receivedStatus.outdoorTemperature) { + currentStatus.outdoorTemperature = receivedStatus.outdoorTemperature; + + if(statusChangedCallback) { + statusChangedCallback(currentStatus); + } + } else { + currentStatus.outdoorTemperature = receivedStatus.outdoorTemperature; + } + return RCVD_PKT_ROOM_TEMP; } diff --git a/src/HeatPump.h b/src/HeatPump.h index 91fe5d5..78e6a53 100644 --- a/src/HeatPump.h +++ b/src/HeatPump.h @@ -72,6 +72,7 @@ bool operator!=(const heatpumpTimers& lhs, const heatpumpTimers& rhs); struct heatpumpStatus { float roomTemperature; + float outdoorTemperature; bool operating; // if true, the heatpump is operating to reach the desired temperature heatpumpTimers timers; int compressorFrequency; @@ -189,7 +190,7 @@ class HeatPump unsigned long lastWanted; // initialise to all off, then it will update shortly after connect; - heatpumpStatus currentStatus {0, false, {TIMER_MODE_MAP[0], 0, 0, 0, 0}, 0}; + heatpumpStatus currentStatus {0, 0, false, {TIMER_MODE_MAP[0], 0, 0, 0, 0}, 0}; heatpumpFunctions functions; @@ -274,6 +275,7 @@ class HeatPump // status heatpumpStatus getStatus(); float getRoomTemperature(); + float getOutdoorTemperature(); bool getOperating(); bool isConnected();