home-assistant / core

:house_with_garden: Open source home automation that puts local control and privacy first.
https://www.home-assistant.io
Apache License 2.0
71.07k stars 29.73k forks source link

2023.12 bug - Airtouch4 climate damper control not working #105842

Closed tomwaldnz closed 8 months ago

tomwaldnz commented 8 months ago

The problem

I updated from HA 2023.11.3 to HA 2023.12.3 today. This caused a problem with the custom Airtouch 4 integration that I've been using with no problems for around two years. Airtouch4 is an air conditioning system that lets you set temperatures in different rooms, using dampers, one for each room / zone. Airtouch has two modes, ITC (auto damper control based on temperature setting) and Damper (manual damper control). While I can control everything fine manually with the Simple Thermostat control, automations can't change the damper percentage open.

Using the "simple thermostat" plugin everything works as it always has when I use the web interface. I can turn the Airtouch system on and off, change temperatures, change the individual rooms between ITC (automatic temperature control) and Damper (adjust damper percentage manually), change the damper percentage - everything works as expected.

When I use automations I can do most things, but changing the fan / damper percentage open no longer works. I use this a LOT to stop things like rooms overheating. I've put an example automation below, in the comments with # representing a comment, but the core issue is this doesn't work.

When I rolled back from 2023.12.3 to 2023.11.3 this problem went away, everything started working perfectly again.

  - service: fan.turn_on
    data:
      percentage: 25
    target:
      entity_id:
        - fan.damper_guest

I've turned logs for the plugin to debug, and logs for home assistant core to info, and there are no issues being raised there. No errors happen when I run the automation, it just doesn't work any more.

# This works
- service: climate.set_preset_mode
    data:
      preset_mode: Damper
    target:
      entity_id:
        - climate.itc_guest
  - delay:
      hours: 0
      minutes: 0
      seconds: 0
      milliseconds: 500
# This doesn't change the damper percentage
  - service: fan.turn_on
    data:
      percentage: 25
    target:
      entity_id:
        - fan.damper_guest
  - delay:
      hours: 0
      minutes: 0
      seconds: 0
      milliseconds: 500
# This works
  - service: climate.set_preset_mode
    data:
      preset_mode: ITC
    target:
      entity_id:
        - fan.damper_guest
  - delay:
      hours: 0
      minutes: 0
      seconds: 0
      milliseconds: 500
  - service: fan.turn_off
    target:
      entity_id:
        - fan.damper_guest
    data: {}
    enabled: false

What version of Home Assistant Core has the issue?

core-2023.12.3

What was the last working version of Home Assistant Core?

core-2023.11.3

What type of installation are you running?

Home Assistant Container

Integration causing the issue

https://github.com/mihailescu2m/hass-airtouch4-platform

Link to integration documentation on our website

No response

Diagnostics information

home-assistant_polyaire_2023-12-16T04-10-13.232Z.log

Example YAML snippet

# This works
- service: climate.set_preset_mode
    data:
      preset_mode: Damper
    target:
      entity_id:
        - climate.itc_guest
  - delay:
      hours: 0
      minutes: 0
      seconds: 0
      milliseconds: 500
# This doesn't change the damper percentage
  - service: fan.turn_on
    data:
      percentage: 25
    target:
      entity_id:
        - fan.damper_guest
  - delay:
      hours: 0
      minutes: 0
      seconds: 0
      milliseconds: 500
# This works
  - service: climate.set_preset_mode
    data:
      preset_mode: ITC
    target:
      entity_id:
        - fan.damper_guest
  - delay:
      hours: 0
      minutes: 0
      seconds: 0
      milliseconds: 500
  - service: fan.turn_off
    target:
      entity_id:
        - fan.damper_guest
    data: {}
    enabled: false

Anything in the logs that might be useful for us?

No, nothing stands out. Here's some logs taken recently

2023-12-16 17:09:51.334 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2023-12-16 17:09:51.335 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received is group message!
2023-12-16 17:09:51.336 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity binary_sensor.itc_lowbattery_guest=off>>
2023-12-16 17:09:51.336 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity fan.damper_guest=on>>
2023-12-16 17:09:51.337 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity climate.itc_guest=auto>>
2023-12-16 17:09:51.338 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity climate.ac_daikin=heat>>
2023-12-16 17:09:51.339 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity binary_sensor.zone_spill_guest=off>>
2023-12-16 17:09:51.339 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity binary_sensor.zone_turbo_guest=off>>
2023-12-16 17:09:51.384 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2023-12-16 17:09:51.384 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received is group message!
2023-12-16 17:09:52.027 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2023-12-16 17:09:52.028 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received is group message!
2023-12-16 17:09:52.029 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity binary_sensor.itc_lowbattery_guest=off>>
2023-12-16 17:09:52.029 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity fan.damper_guest=on>>
2023-12-16 17:09:52.030 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity climate.itc_guest=auto>>
2023-12-16 17:09:52.031 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity climate.ac_daikin=heat>>
2023-12-16 17:09:52.032 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity binary_sensor.zone_spill_guest=off>>
2023-12-16 17:09:52.032 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity binary_sensor.zone_turbo_guest=off>>
2023-12-16 17:09:52.065 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2023-12-16 17:09:52.066 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received is group message!
2023-12-16 17:09:52.817 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2023-12-16 17:09:52.818 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received is group message!
2023-12-16 17:09:52.819 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity binary_sensor.itc_lowbattery_guest=off>>
2023-12-16 17:09:52.819 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity fan.damper_guest=on>>
2023-12-16 17:09:52.820 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity climate.itc_guest=auto>>
2023-12-16 17:09:52.821 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity climate.ac_daikin=heat>>
2023-12-16 17:09:52.822 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity binary_sensor.zone_spill_guest=off>>
2023-12-16 17:09:52.822 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity binary_sensor.zone_turbo_guest=off>>
2023-12-16 17:09:52.860 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2023-12-16 17:09:52.860 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received is group message!
2023-12-16 17:09:53.460 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2023-12-16 17:09:53.461 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received is group message!
2023-12-16 17:09:53.461 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity binary_sensor.itc_lowbattery_guest=off>>
2023-12-16 17:09:53.461 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity fan.damper_guest=on>>
2023-12-16 17:09:53.462 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity climate.itc_guest=auto>>
2023-12-16 17:09:53.463 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity climate.ac_daikin=heat>>
2023-12-16 17:09:53.464 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity binary_sensor.zone_spill_guest=off>>
2023-12-16 17:09:53.464 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity binary_sensor.zone_turbo_guest=off>>
2023-12-16 17:09:53.492 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2023-12-16 17:09:53.492 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received is group message!
2023-12-16 17:09:54.104 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2023-12-16 17:09:54.104 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received is group message!
2023-12-16 17:09:54.105 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity binary_sensor.itc_lowbattery_guest=off>>
2023-12-16 17:09:54.105 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity fan.damper_guest=off>>
2023-12-16 17:09:54.106 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity climate.itc_guest=off>>
2023-12-16 17:09:54.107 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity climate.ac_daikin=heat>>
2023-12-16 17:09:54.108 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity binary_sensor.zone_spill_guest=off>>
2023-12-16 17:09:54.108 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <entity binary_sensor.zone_turbo_guest=off>>
2023-12-16 17:09:54.151 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2023-12-16 17:09:54.152 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received is group message!

Additional information

This has been working perfectly for a couple of years. I rolled back to 2023.11.3 and everything is working perfectly again.

mib1185 commented 8 months ago

Hi @tomwaldnz This is a custom component, which is not maintained by the HA core project. Please report your issue to the maintainer or in the source repository of this custom component. Thx 👍

tomwaldnz commented 8 months ago

Hi @mib1185 . I know this symptom is a custom component, but if that custom component has been working for a couple of years and breaks when the core changes, and it works from the web GUI but not from an automation, my guess was it was a core problem rather than a component problem.

mib1185 commented 8 months ago

Things may change in HA core, which custom component developers needs to take care about it. on every release notes, there is a special section for these changes, further there is a developer blog to inform about relevant changes early.

tomwaldnz commented 8 months ago

Thanks @mib1185 :) I had a look at the change, nothing seems relevant. I'll see if I can get the developer to look at it, otherwise I guess I learn some more python and try to work it out.

tomwaldnz commented 8 months ago

For anyone else who has this issue, there's a command fan.set_percentage which works. I'd never found it before, because in the GUI the caption is "set speed", which is quite different.

  - service: fan.set_percentage
    target:
      entity_id: fan.damper_living
    data:
      percentage: 50