Honeywell T9 with HomeKit integration can't set some temperature values

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.

I just set up my new Honeywell T9 and I’m experiencing the exact same issue. Did you find a solution?

I, too, have a T9.

I’m guessing it’s something that you’ve both done incorrectly in your config perhaps?

I’m guessing this because I just checked and I do not have the problem (I don’t normally set my thermostat above 70, so I had to check).

In addition, though - it appears that at least with my config, manually adjusting the temperature in HA causes the schedule in the T9 to be overridden - even if you go into the Residio app and dismiss the hold.

Because of this, I don’t really ever use HA to adjust the temperature. I mostly have it integrated because that way I can display all the room temp values from the remote sensors I have all over the place.

I’m running into this too. If I change to display as Celsius, the problem goes away and I can set whatever temp and it sticks.

My T9 which uses the HomeKit integration won’t let me set the temperature to 64. Always jumps to 65.
I don’t use the Resideo app anymore, but I think this had the same behavior. All schedules are done via HA automations.

Are you able to tell it which remote sensor to use to control the temperature? I was never able to figure that out in HA, which is the reason I still use the Resideo app…

I use the climate service call for the thermostat. You can assign the sensor priority using the menu on the physical thermostat.

automation:
  trigger:
    platform: time
    at: "07:15:00"
  action:
    - service: climate.set_temperature
      target:
        entity_id: climate.t9_thermostat
      data:
        temperature: 68

The physical thermostat. Lol as if anybody wants to touch that. :joy::joy::joy:

My sensor priority doesn’t change so this was a one time configuration.

The thermostat is blocked from the cloud. I didn’t like having to use their app to change the fan mode either.
I can control the fan, temperature, schedules all with automations and scripts, and can trigger off either temperature sensor.

Ah. I’ve found the shortcoming of your setup. “either temperature sensor”.

I have 8.