From a56425b3427139a917ebf94a04900ecb24376b4b Mon Sep 17 00:00:00 2001
From: Przemyslaw Kacprowicz
Date: Wed, 20 Nov 2019 14:17:39 +0100
Subject: [PATCH 1/4] A first approach, to make device to go 'offline' properly
---
.../zwave-radiator-thermostat.groovy | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/devicetypes/smartthings/zwave-radiator-thermostat.src/zwave-radiator-thermostat.groovy b/devicetypes/smartthings/zwave-radiator-thermostat.src/zwave-radiator-thermostat.groovy
index 8f22e275b12..f09309d2b04 100644
--- a/devicetypes/smartthings/zwave-radiator-thermostat.src/zwave-radiator-thermostat.groovy
+++ b/devicetypes/smartthings/zwave-radiator-thermostat.src/zwave-radiator-thermostat.groovy
@@ -176,7 +176,9 @@ def zwaveEvent(physicalgraph.zwave.commands.thermostatmodev2.ThermostatModeRepor
def zwaveEvent(physicalgraph.zwave.commands.thermostatsetpointv2.ThermostatSetpointReport cmd) {
def deviceTemperatureScale = cmd.scale ? 'F' : 'C'
- createEvent(name: "heatingSetpoint", value: convertTemperatureIfNeeded(cmd.scaledValue, deviceTemperatureScale, cmd.precision), unit: temperatureScale)
+ def setpoint = Float.parseFloat(convertTemperatureIfNeeded(cmd.scaledValue, deviceTemperatureScale, cmd.precision))
+ state.cachedSetpoint = setpoint
+ createEvent(name: "heatingSetpoint", value: setpoint, unit: temperatureScale)
}
def zwaveEvent(physicalgraph.zwave.commands.sensormultilevelv5.SensorMultilevelReport cmd) {
@@ -227,7 +229,7 @@ def off() {
}
def setHeatingSetpoint(setpoint) {
- if (isPoppRadiatorThermostat()) {
+ if (isPoppRadiatorThermostat() && device.status == "ONLINE") {
sendEvent(name: "heatingSetpoint", value: setpoint, unit: temperatureScale)
}
setpoint = temperatureScale == 'C' ? setpoint : fahrenheitToCelsius(setpoint)
From c6e6bcf45ba3bf5cd39c9ac743cecbebf4eddb74 Mon Sep 17 00:00:00 2001
From: Przemyslaw Kacprowicz
Date: Tue, 26 Nov 2019 13:27:32 +0100
Subject: [PATCH 2/4] Changes to enable setpoint manual and wireless change in
same setup
---
.../zwave-radiator-thermostat.groovy | 25 ++++++++++++++++---
1 file changed, 22 insertions(+), 3 deletions(-)
diff --git a/devicetypes/smartthings/zwave-radiator-thermostat.src/zwave-radiator-thermostat.groovy b/devicetypes/smartthings/zwave-radiator-thermostat.src/zwave-radiator-thermostat.groovy
index f09309d2b04..357d4797d10 100644
--- a/devicetypes/smartthings/zwave-radiator-thermostat.src/zwave-radiator-thermostat.groovy
+++ b/devicetypes/smartthings/zwave-radiator-thermostat.src/zwave-radiator-thermostat.groovy
@@ -93,6 +93,7 @@ def initialize() {
}
def installed() {
+ state.isSetpointChangeRequestedByController = false
initialize()
}
@@ -135,8 +136,8 @@ def zwaveEvent(physicalgraph.zwave.commands.securityv1.SecurityMessageEncapsulat
def zwaveEvent(physicalgraph.zwave.commands.multicmdv1.MultiCmdEncap cmd) {
cmd.encapsulatedCommands().collect { encapsulatedCommand ->
- zwaveEvent(encapsulatedCommand)
- }.flatten()
+ isPoppRadiatorThermostat() ? zwaveEvent(encapsulatedCommand, true) : zwaveEvent(encapsulatedCommand) //in case any future device would support MultiCmdEncap
+ }.flatten() //and won't need any special handler, like POPP does
}
def zwaveEvent(physicalgraph.zwave.commands.wakeupv2.WakeUpNotification cmd) {
@@ -174,13 +175,30 @@ def zwaveEvent(physicalgraph.zwave.commands.thermostatmodev2.ThermostatModeRepor
createEvent(map)
}
-def zwaveEvent(physicalgraph.zwave.commands.thermostatsetpointv2.ThermostatSetpointReport cmd) {
+def updateSetpoint(cmd) {
def deviceTemperatureScale = cmd.scale ? 'F' : 'C'
def setpoint = Float.parseFloat(convertTemperatureIfNeeded(cmd.scaledValue, deviceTemperatureScale, cmd.precision))
state.cachedSetpoint = setpoint
createEvent(name: "heatingSetpoint", value: setpoint, unit: temperatureScale)
}
+def zwaveEvent(physicalgraph.zwave.commands.thermostatsetpointv2.ThermostatSetpointReport cmd) {
+ if (!state.isSetpointChangeRequestedByController) {
+ updateSetpoint(cmd)
+ } else {
+ [:]
+ }
+}
+
+def zwaveEvent(physicalgraph.zwave.commands.thermostatsetpointv2.ThermostatSetpointReport cmd, isResponseOfWakeUp) {
+ if (state.isSetpointChangeRequestedByController) {
+ state.isSetpointChangeRequestedByController = false
+ updateSetpoint(cmd)
+ } else {
+ [:]
+ }
+}
+
def zwaveEvent(physicalgraph.zwave.commands.sensormultilevelv5.SensorMultilevelReport cmd) {
def deviceTemperatureScale = cmd.scale ? 'F' : 'C'
createEvent(name: "temperature", value: convertTemperatureIfNeeded(cmd.scaledSensorValue, deviceTemperatureScale, cmd.precision), unit: temperatureScale)
@@ -230,6 +248,7 @@ def off() {
def setHeatingSetpoint(setpoint) {
if (isPoppRadiatorThermostat() && device.status == "ONLINE") {
+ state.isSetpointChangeRequestedByController = true
sendEvent(name: "heatingSetpoint", value: setpoint, unit: temperatureScale)
}
setpoint = temperatureScale == 'C' ? setpoint : fahrenheitToCelsius(setpoint)
From dbc1a7f27824e88cb49a61e79efae0e92a5603cc Mon Sep 17 00:00:00 2001
From: Przemyslaw Kacprowicz
Date: Tue, 26 Nov 2019 13:31:37 +0100
Subject: [PATCH 3/4] Comment position adjustment
---
.../zwave-radiator-thermostat.groovy | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/devicetypes/smartthings/zwave-radiator-thermostat.src/zwave-radiator-thermostat.groovy b/devicetypes/smartthings/zwave-radiator-thermostat.src/zwave-radiator-thermostat.groovy
index 357d4797d10..72ff94916ad 100644
--- a/devicetypes/smartthings/zwave-radiator-thermostat.src/zwave-radiator-thermostat.groovy
+++ b/devicetypes/smartthings/zwave-radiator-thermostat.src/zwave-radiator-thermostat.groovy
@@ -136,8 +136,10 @@ def zwaveEvent(physicalgraph.zwave.commands.securityv1.SecurityMessageEncapsulat
def zwaveEvent(physicalgraph.zwave.commands.multicmdv1.MultiCmdEncap cmd) {
cmd.encapsulatedCommands().collect { encapsulatedCommand ->
- isPoppRadiatorThermostat() ? zwaveEvent(encapsulatedCommand, true) : zwaveEvent(encapsulatedCommand) //in case any future device would support MultiCmdEncap
- }.flatten() //and won't need any special handler, like POPP does
+ isPoppRadiatorThermostat() ? zwaveEvent(encapsulatedCommand, true) : zwaveEvent(encapsulatedCommand)
+ //in case any future device would support MultiCmdEncap
+ //and won't need any special handler, like POPP does
+ }.flatten()
}
def zwaveEvent(physicalgraph.zwave.commands.wakeupv2.WakeUpNotification cmd) {
From 178ce0cd02af6d40c212395a5d3c43041a60915b Mon Sep 17 00:00:00 2001
From: Przemyslaw Kacprowicz
Date: Wed, 27 Nov 2019 09:25:51 +0100
Subject: [PATCH 4/4] Combining both ThermostatSetpointReport handlers
---
.../zwave-radiator-thermostat.groovy | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/devicetypes/smartthings/zwave-radiator-thermostat.src/zwave-radiator-thermostat.groovy b/devicetypes/smartthings/zwave-radiator-thermostat.src/zwave-radiator-thermostat.groovy
index 72ff94916ad..5b6c56db81f 100644
--- a/devicetypes/smartthings/zwave-radiator-thermostat.src/zwave-radiator-thermostat.groovy
+++ b/devicetypes/smartthings/zwave-radiator-thermostat.src/zwave-radiator-thermostat.groovy
@@ -184,16 +184,10 @@ def updateSetpoint(cmd) {
createEvent(name: "heatingSetpoint", value: setpoint, unit: temperatureScale)
}
-def zwaveEvent(physicalgraph.zwave.commands.thermostatsetpointv2.ThermostatSetpointReport cmd) {
+def zwaveEvent(physicalgraph.zwave.commands.thermostatsetpointv2.ThermostatSetpointReport cmd, isResponseOfWakeUp = false) {
if (!state.isSetpointChangeRequestedByController) {
updateSetpoint(cmd)
- } else {
- [:]
- }
-}
-
-def zwaveEvent(physicalgraph.zwave.commands.thermostatsetpointv2.ThermostatSetpointReport cmd, isResponseOfWakeUp) {
- if (state.isSetpointChangeRequestedByController) {
+ } else if (isResponseOfWakeUp) {
state.isSetpointChangeRequestedByController = false
updateSetpoint(cmd)
} else {