Add heatAndCoolDemand support to LyricDevice - #167
Conversation
Resideo's device response includes a heatAndCoolDemand object (equipment stage, demand percentage, active stages, fan/circulation fan request) that aiolyric never parsed at all. Adds a HeatAndCoolDemand class and LyricDevice.heat_and_cool_demand property, following the same pattern as the existing OperationStatus handling. Note the API uses PascalCase keys here (CurrentStage, Demand, Mode, StagesOn, FanRequest, CirculationFanRequest), unlike the camelCase used elsewhere in the same response - that's what Resideo actually returns, not a typo. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
timmo001
left a comment
There was a problem hiding this comment.
Can you add a redacted example of this part of the live /v2/devices/thermostats/{deviceId} response? heatAndCoolDemand is not included in the public response docs, so I cannot verify the field location or casing: https://developer.honeywellhome.com/lyric/apis/get/devices/thermostats/%7BdeviceId%7D-0
Here's a redacted excerpt from a live {
"displayedOutdoorHumidity": null,
"heatAndCoolDemand": {
"CurrentStage": 0,
"Demand": 0,
"Mode": "Heat",
"StagesOn": [false, false, false, false],
"FanRequest": false,
"CirculationFanRequest": false
},
"vacationHold": {"Enabled": false},
"currentSchedulePeriod": {"Day": "Monday", "Period": "Wake"},
"scheduleType": {"scheduleType": "Timed", "scheduleSubtype": "NA"},
"operationStatus": {"mode": "EquipmentOff", "fanRequest": false, "circulationFanRequest": false},
"deviceModel": "T9-T10"
}Confirms Also noticed something extra: this same capture shows currentSchedulePeriod: {'Day': 'Monday', 'Period': 'Wake'} in PascalCase, but the current code still reads lowercase day/period — a real, currently-unreported bug. |
Resideo's device response includes a heatAndCoolDemand object (equipment stage, demand percentage, active stages, fan/circulation fan request) that aiolyric never parsed at all. Adds a HeatAndCoolDemand class and LyricDevice.heat_and_cool_demand property, following the same pattern as the existing OperationStatus handling.
Note the API uses PascalCase keys here (CurrentStage, Demand, Mode, StagesOn, FanRequest, CirculationFanRequest), unlike the camelCase used elsewhere in the same response - that's what Resideo actually returns, not a typo.