Hey folks. I'm hammering out a driver for the Hive thermostat and receiver, and it's largely complete. However, I'm having real trouble with the boost command. Sniffed from the OEM system it looks like this:
This sets boost mode at 22degC for 1 hour. But when I attempt to replicate it with this code:
void emergencyHeat() {
// Boost mode.
//logging("${device} : Heating Boost : This feature has not been implemented yet. Please boost from the thermostat.", "warn")
//return
int boostTime = 60
int boostTemp = 2200
logging("${device} : Heating Boost : Attempting to boost to ${boostTemp} for ${boostTime} minutes", "debug")
ArrayList<String> cmds = []
cmds += zigbee.writeAttribute(0x0201, 0x001C, 0x30, 0x05, [destEndpoint: 0x05]) // SystemMode
cmds += zigbee.writeAttribute(0x0201, 0x0023, 0x30, 0x01, [destEndpoint: 0x05]) // TemperatureSetpointHold
cmds += zigbee.writeAttribute(0x0201, 0x0024, 0x21, boostTime, [destEndpoint: 0x05]) // TemperatureSetpointHoldDuration
cmds += zigbee.writeAttribute(0x0201, 0x0012, 0x29, boostTemp, [destEndpoint: 0x05]) // OccupiedHeatingSetpoint
sendZigbeeCommands(cmds)
//runIn(3,getThermostatMode)
}
It sets boost mode and the target temperature correctly, but utterly fails with the countdown timer and the system tries to boost for over five hours. Eventually I stumbled upon this potential explanation from the SLR2's Zigbee2MQTT page:
Note: For device timing reasons, the payload needs to be sent as one single command. Sending individual commands or settings attributes manually using the Frontend will not work.
That sounds familiar. So, in my code am I essentially sending four sequential commands? And if so, how do I construct this into one command as the device seems to require?
Cheers all!