Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ def initialize() {
}

def installed() {
state.isSetpointChangeRequestedByController = false
initialize()
}

Expand Down Expand Up @@ -135,7 +136,9 @@ def zwaveEvent(physicalgraph.zwave.commands.securityv1.SecurityMessageEncapsulat

def zwaveEvent(physicalgraph.zwave.commands.multicmdv1.MultiCmdEncap cmd) {
cmd.encapsulatedCommands().collect { encapsulatedCommand ->
zwaveEvent(encapsulatedCommand)
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()
}

Expand Down Expand Up @@ -174,9 +177,22 @@ 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'
createEvent(name: "heatingSetpoint", value: convertTemperatureIfNeeded(cmd.scaledValue, deviceTemperatureScale, cmd.precision), unit: temperatureScale)
def setpoint = Float.parseFloat(convertTemperatureIfNeeded(cmd.scaledValue, deviceTemperatureScale, cmd.precision))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any reason you have to do a type conversion here, but we didn't have to when just passing directly?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

type conversion is only really needed for state.cachedSetpoint, cause later it's used in Z-Wave commands and theirs constructors require numeric type values.
Although, as createEvent doesn't care whether it's string or float, I've used what I've got

state.cachedSetpoint = setpoint
createEvent(name: "heatingSetpoint", value: setpoint, unit: temperatureScale)
}

def zwaveEvent(physicalgraph.zwave.commands.thermostatsetpointv2.ThermostatSetpointReport cmd, isResponseOfWakeUp = false) {
if (!state.isSetpointChangeRequestedByController) {
updateSetpoint(cmd)
} else if (isResponseOfWakeUp) {
state.isSetpointChangeRequestedByController = false
updateSetpoint(cmd)
} else {
[:]
}
}

def zwaveEvent(physicalgraph.zwave.commands.sensormultilevelv5.SensorMultilevelReport cmd) {
Expand Down Expand Up @@ -227,7 +243,8 @@ def off() {
}

def setHeatingSetpoint(setpoint) {
if (isPoppRadiatorThermostat()) {
if (isPoppRadiatorThermostat() && device.status == "ONLINE") {
state.isSetpointChangeRequestedByController = true
sendEvent(name: "heatingSetpoint", value: setpoint, unit: temperatureScale)
}
setpoint = temperatureScale == 'C' ? setpoint : fahrenheitToCelsius(setpoint)
Expand Down