Can I ask why you are use the eTRVPIHeatingDemand state (as well as eTRVCallingForHeat) to determine the thermostatOperatingState? My understanding is that this when the TRV is deployed using Hive this setting allows the TRV to turn on the boiler switch, so that the TRV can call for heat regardless of the Hive Thermostat state (boiler will produce heat even if the the room Thermostat is off). Are the TRV's not completely independent of the stat and boiler switch when deployed using Habitat (because the TRV won't know which Stat they might be paired with in a multi-zone set-up? Or am I missing something?
In my use case I simply want to know if the TRV has opened, which would be determined by the eTRVCallingForHeat state, would it not?
I think I might be missing something Jonathon? If not I might play with the code and change this:
if ((device.currentValue("eTRVCallingForHeat") == "yes") && (device.currentValue("eTRVPIHeatingDemand") > 0))
{
sendEvent(name: "thermostatMode", value: "heat", descriptionText: "for dashboard thermostat tile wording only ") // ["auto", "off", "heat", "emergency heat", "cool"]
sendEvent(name: "thermostatOperatingState", value: "heating", descriptionText: "for dashboard thermostat tile colour only ") // ["heating", "pending cool", "pending heat", "vent economizer", "idle", "cooling", "fan only"]
}
else {
sendEvent(name: "thermostatMode", value: "heat", descriptionText: "for dashboard thermostat tile wording only") // ["auto", "off", "heat", "emergency heat", "cool"]
sendEvent(name: "thermostatOperatingState", value: "idle", descriptionText: "for dashboard thermostat tile colour only") // ["heating", "pending cool", "pending heat", "vent economizer", "idle", "cooling", "fan only"]
}
to this:
if ((device.currentValue("eTRVCallingForHeat") == "yes"))
{
sendEvent(name: "thermostatMode", value: "heat", descriptionText: "for dashboard thermostat tile wording only ") // ["auto", "off", "heat", "emergency heat", "cool"]
sendEvent(name: "thermostatOperatingState", value: "heating", descriptionText: "for dashboard thermostat tile colour only ") // ["heating", "pending cool", "pending heat", "vent economizer", "idle", "cooling", "fan only"]
}
else {
sendEvent(name: "thermostatMode", value: "heat", descriptionText: "for dashboard thermostat tile wording only") // ["auto", "off", "heat", "emergency heat", "cool"]
sendEvent(name: "thermostatOperatingState", value: "idle", descriptionText: "for dashboard thermostat tile colour only") // ["heating", "pending cool", "pending heat", "vent economizer", "idle", "cooling", "fan only"]
}
Any thoughts?
edit: I think I see what you mean here. The eTRVCallingForHeat state seems a little unreliable as a why of determining if the eTRV is wanting to do something.