I have a Honeywell T9 thermostat set up in Home Assistant as a HomeKit Device. In general it’s working quite well, but I’m not able to set some temperature values. For anything 72ºF or below, it works. As soon as I try to set anything 73ºF or above it bumps to the next integer value and sets that.
- Set 72: HA UI shows 72, thermostat is set to 72
- Set 73: HA UI shows 73 for a second, then shows 74, thermostat is set to 74
- Set 74: HA UI shows 74 for a second, then shows 75, thermostat is set to 75
Same for if I use the climate.set_temperature
service call to set it, any temperature value in the service call 72ºF or lower is set to that value and any value 73ºF or higher is set to the next integer value instead. If I go to the thermostat itself and set it to 73 or higher, that works and the Home Assistant UI updates to show 73ºF (or whatever I picked on the thermostat).
Enabling debug logging for HomeKit Device and trying to set it to 73ºF shows this happening, but it’s not clear to me why it’s happening:
2023-09-20 16:53:21.815 DEBUG (MainThread) [homeassistant.components.homekit_controller.connection] Called async_set_available_state with True for F9:2F:06:8E:1A:C5
2023-09-20 16:53:21.816 DEBUG (MainThread) [aiohomekit.controller.ip.connection] 192.168.1.43: raw request: b'PUT /characteristics HTTP/1.1\r\nHost: 192.168.1.43\r\nContent-Length: 53\r\nContent-Type: application/hap+json\r\n\r\n{"characteristics":[{"aid":2,"iid":38,"value":23.0}]}'
2023-09-20 16:53:22.343 DEBUG (MainThread) [aiohomekit.controller.ip.connection] 192.168.1.43: raw response: bytearray(b'')
2023-09-20 16:53:22.343 DEBUG (MainThread) [aiohomekit.controller.abstract] callback ev:{(2, 38): {'value': 23.0}}
2023-09-20 16:53:22.343 DEBUG (MainThread) [homeassistant.components.homekit_controller.connection] Called async_set_available_state with True for F9:2F:06:8E:1A:C5
2023-09-20 16:53:22.496 DEBUG (MainThread) [aiohomekit.controller.abstract] callback ev:{(2, 38): {'value': 23.5}}
2023-09-20 16:53:22.496 DEBUG (MainThread) [homeassistant.components.homekit_controller.connection] Called async_set_available_state with True for F9:2F:06:8E:1A:C5
2023-09-20 16:53:27.742 DEBUG (MainThread) [homeassistant.components.homekit_controller.connection] Starting HomeKit device update: F9:2F:06:8E:1A:C5
2023-09-20 16:53:27.742 DEBUG (MainThread) [homeassistant.components.homekit_controller.connection] Called async_set_available_state with True for F9:2F:06:8E:1A:C5
2023-09-20 16:53:27.742 DEBUG (MainThread) [aiohomekit.controller.ip.connection] 192.168.1.43: raw request: b'GET /characteristics?id=2.43,2.36,3.41,3.65,2.35,2.38,2.41,2.37,2.44,3.37 HTTP/1.1\r\nHost: 192.168.1.43\r\n\r\n'
2023-09-20 16:53:28.281 DEBUG (MainThread) [aiohomekit.controller.ip.connection] 192.168.1.43: raw response: bytearray(b'{"characteristics":[{"aid":2,"iid":43,"value":23},{"aid":2,"iid":36,"value":2},{"aid":3,"iid":41,"value":64},{"aid":3,"iid":65,"value":0},{"aid":2,"iid":35,"value":0},{"aid":2,"iid":38,"value":23.5},{"aid":2,"iid":41,"value":66},{"aid":2,"iid":37,"value":23.5},{"aid":2,"iid":44,"value":10},{"aid":3,"iid":37,"value":22}]}')
2023-09-20 16:53:28.281 DEBUG (MainThread) [homeassistant.components.homekit_controller.connection] Called async_set_available_state with True for F9:2F:06:8E:1A:C5
2023-09-20 16:53:28.282 DEBUG (MainThread) [homeassistant.components.homekit_controller.connection] Finished HomeKit device update: F9:2F:06:8E:1A:C5
Setting it to 72ºF does not seem to have a second update call:
2023-09-20 17:23:23.511 DEBUG (MainThread) [homeassistant.components.homekit_controller.connection] Called async_set_available_state with True for F9:2F:06:8E:1A:C5
2023-09-20 17:23:23.512 DEBUG (MainThread) [aiohomekit.controller.ip.connection] 192.168.1.43: raw request: b'PUT /characteristics HTTP/1.1\r\nHost: 192.168.1.43\r\nContent-Length: 53\r\nContent-Type: application/hap+json\r\n\r\n{"characteristics":[{"aid":2,"iid":38,"value":22.0}]}'
2023-09-20 17:23:24.036 DEBUG (MainThread) [aiohomekit.controller.ip.connection] 192.168.1.43: raw response: bytearray(b'')
2023-09-20 17:23:24.036 DEBUG (MainThread) [aiohomekit.controller.abstract] callback ev:{(2, 38): {'value': 22.0}}
2023-09-20 17:23:24.037 DEBUG (MainThread) [homeassistant.components.homekit_controller.connection] Called async_set_available_state with True for F9:2F:06:8E:1A:C5
2023-09-20 17:23:25.019 DEBUG (MainThread) [aiohomekit.controller.abstract] callback ev:{(2, 35): {'value': 2}}
2023-09-20 17:23:25.020 DEBUG (MainThread) [homeassistant.components.homekit_controller.connection] Called async_set_available_state with True for F9:2F:06:8E:1A:C5
2023-09-20 17:23:27.775 DEBUG (MainThread) [homeassistant.components.homekit_controller.connection] Starting HomeKit device update: F9:2F:06:8E:1A:C5
2023-09-20 17:23:27.776 DEBUG (MainThread) [homeassistant.components.homekit_controller.connection] Called async_set_available_state with True for F9:2F:06:8E:1A:C5
2023-09-20 17:23:27.776 DEBUG (MainThread) [aiohomekit.controller.ip.connection] 192.168.1.43: raw request: b'GET /characteristics?id=2.43,2.36,3.41,3.65,2.35,2.38,2.41,2.37,2.44,3.37 HTTP/1.1\r\nHost: 192.168.1.43\r\n\r\n'
2023-09-20 17:23:28.298 DEBUG (MainThread) [aiohomekit.controller.ip.connection] 192.168.1.43: raw response: bytearray(b'{"characteristics":[{"aid":2,"iid":43,"value":23},{"aid":2,"iid":36,"value":2},{"aid":3,"iid":41,"value":66},{"aid":3,"iid":65,"value":0},{"aid":2,"iid":35,"value":2},{"aid":2,"iid":38,"value":22},{"aid":2,"iid":41,"value":67},{"aid":2,"iid":37,"value":23.5},{"aid":2,"iid":44,"value":10},{"aid":3,"iid":37,"value":22}]}')
2023-09-20 17:23:28.299 DEBUG (MainThread) [homeassistant.components.homekit_controller.connection] Called async_set_available_state with True for F9:2F:06:8E:1A:C5
2023-09-20 17:23:28.301 DEBUG (MainThread) [homeassistant.components.homekit_controller.connection] Finished HomeKit device update: F9:2F:06:8E:1A:C5
Is there something I’ve done wrong here setting things up? From the logs it looks like the temperature is being converted to Celsius, but even rounding and converting doesn’t seem to explain why 73ºF is suddenly a magical point where it increases instead of working. Home Assistant and the thermostat are both set to display Fahrenheit, and other non-Honeywell thermostats are working properly.