Airtouch 4 integration (AUS)

That worked, thanks :slight_smile:

Another question. The temperature reading for rooms seems to get ā€œstuckā€ sometimes, not changing at all for an hour or two, even though I know that heating is turning on and off occasionally. I can see in the dashboard that the temperature stays the same for that time.

I use Apex Charts to visualise temperatures for the last 24 hours. This first screenshot was taken at 7:20pm and shows three rooms (blue, orange, and green lines) havenā€™t changed temperature at all since 6pm.

This screenshot was taken at 7:43pm same day, 23 minutes later. The blue and orange lines for the same time period now show the actual temperature changing, whereas the green is still flat. Itā€™s 8:10pm now and itā€™s still flat. Iā€™ll update the post in an hour or two if it changes.

Has anyone else seen anything similar?

Hereā€™s the logs for the period.

2022-06-24 18:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-24 18:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 0 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC Living: auto>>
2022-06-24 18:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 0 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper Living: on>>
2022-06-24 18:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 0 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-24 18:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-24 18:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-24 18:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper Master: on>>
2022-06-24 18:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC Master: auto>>
2022-06-24 18:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-24 18:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-24 18:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-24 18:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC GreenLine: auto>>
2022-06-24 18:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper GreenLine: on>>
2022-06-24 18:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-24 18:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-24 18:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-24 18:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper Guest: off>>
2022-06-24 18:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC Guest: off>>
2022-06-24 18:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-24 18:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------

2022-06-24 19:18:16 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
2022-06-24 19:18:20 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
2022-06-24 19:21:08 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2022-06-24 19:23:14 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
... (multiple lines with same message removed)
2022-06-24 19:26:56 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
2022-06-24 19:27:17 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
... (multiple lines with same message removed)
2022-06-24 19:32:19 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
2022-06-24 19:32:29 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2022-06-24 19:32:30 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2022-06-24 19:32:30 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2022-06-24 19:32:30 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 0 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC Living: auto>>
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 0 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper Living: on>>
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 0 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper Master: on>>
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC Master: auto>>
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC GreenLine: auto>>
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper GreenLine: on>>
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper Guest: off>>
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC Guest: off>>
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC GreenLine: auto>>
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper GreenLine: on>>
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-24 19:32:34 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
2022-06-24 19:32:35 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2022-06-24 19:32:35 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-24 19:32:35 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC GreenLine: auto>>
2022-06-24 19:32:35 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper GreenLine: on>>
2022-06-24 19:32:35 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-24 19:32:35 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-24 19:32:35 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
2022-06-24 19:32:36 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2022-06-24 19:32:36 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-24 19:32:36 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC GreenLine: auto>>
2022-06-24 19:32:36 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper GreenLine: on>>
2022-06-24 19:32:36 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-24 19:32:36 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-24 19:32:36 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
2022-06-24 19:32:36 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2022-06-24 19:32:36 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-24 19:32:36 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC GreenLine: auto>>
2022-06-24 19:32:36 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper GreenLine: on>>
2022-06-24 19:32:36 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-24 19:32:36 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-24 19:32:36 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
2022-06-24 19:32:37 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2022-06-24 19:32:37 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-24 19:32:37 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper Master: on>>
2022-06-24 19:32:37 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC Master: auto>>
2022-06-24 19:32:37 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-24 19:32:37 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-24 19:32:37 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
2022-06-24 19:32:37 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2022-06-24 19:32:37 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-24 19:32:37 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper Master: on>>
2022-06-24 19:32:37 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC Master: auto>>
2022-06-24 19:32:37 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-24 19:32:37 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-24 19:32:38 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
2022-06-24 19:32:38 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2022-06-24 19:32:38 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-24 19:32:38 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper Master: on>>
2022-06-24 19:32:38 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC Master: auto>>
2022-06-24 19:32:38 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-24 19:32:38 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-24 19:32:38 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
2022-06-24 19:32:38 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2022-06-24 19:32:38 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-24 19:32:38 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper Master: on>>
2022-06-24 19:32:38 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC Master: auto>>
2022-06-24 19:32:38 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-24 19:32:38 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-24 19:32:38 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
2022-06-24 19:32:39 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2022-06-24 19:32:39 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-24 19:32:39 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper Master: on>>
2022-06-24 19:32:39 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC Master: auto>>
2022-06-24 19:32:39 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-24 19:32:39 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-24 19:32:39 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
... (multiple lines with same message removed)
2022-06-24 19:38:20 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
2022-06-24 19:38:41 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2022-06-24 19:38:49 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
... (multiple lines with same message removed)
2022-06-24 19:43:49 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!

Wow this rocks!

Iā€™m getting this exact same problem and the same ā€œMessage received with unknown header!ā€ logs.

Mine doesnā€™t recover from this without intervention.

Unknown header is not an issue, they are messages sent that are not decoded (like login messages from the internet/app, or messages with timer and other settings).
The logs are starting 7:20ish when it was working, the flat line is from a period when it was ā€œdisconnectedā€ at 6ish.

I will send today an update that fixes some more rare cases when integration doesnā€™t start on HA restarting, but Iā€™m not sure it will fix this issue as well.

I will let v1.3.1 out and see how it works for a few days, then I can try something else if this issue still occurs.

1 Like

Really appreciate the additional release, that was quick!

Iā€™ve updated the logs in my post above with the logs from about 6pm. Basically everything was updated at 6pm, then there were no more updates until they occurred at 7.32pm. After that there were no more updates until 7.50pm, and thatā€™s where I stopped the detailed logs.

I keep detailed logs to a minimum to reduce wear on the SD card for my R.Pi4, but Iā€™ll turn them back on for a few days to provide more info if you like?

As expected the 1.3.1 release while appreciated hasnā€™t resulted in more reliable connectivity for me. My home WiFi seems reliable, extended ping tests show my R.Pi4 can always contact the Airtouch4. Iā€™m happy to help with any diagnostics, Iā€™m an ex Java developer and can read Python code fine but Iā€™m not so proficient at writing it.

This screenshot taken at 10:27 shows the system thinks none of the temperatures in the house have changed in a couple of hours.

Once I went into a different screen and triggered a temperature change two of the three temperatures updated - the orange line (master bedroom) hasnā€™t changed. Once I changed the master bedroom temperature it updated the graph within about 20 seconds.

Hereā€™s the logs that show there were no temperature updates received in that time.

2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 0 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper Living: on>>
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 0 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC Living: auto>>
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 0 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC Master: off>>
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 1 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper Master: off>>
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper Guest: off>>
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC Guest: off>>
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC GreenLine: off>>
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper GreenLine: off>>
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
2022-06-26 08:00:00 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2022-06-26 08:00:18 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
2022-06-26 08:05:33 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
(removed lots of expected / unknown header lines)
2022-06-26 10:35:03 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2022-06-26 10:35:03 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-26 10:35:03 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 0 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper Living: on>>
2022-06-26 10:35:03 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 0 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC Living: auto>>
2022-06-26 10:35:03 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 0 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-26 10:35:03 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-26 10:35:03 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-26 10:35:03 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC GreenLine: off>>
2022-06-26 10:35:03 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper GreenLine: off>>
2022-06-26 10:35:03 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 2 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-26 10:35:03 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-26 10:35:03 DEBUG (MainThread) [custom_components.polyaire.protocol] ----- start callbacks -----
2022-06-26 10:35:03 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <Entity Damper Guest: off>>
2022-06-26 10:35:03 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <Entity AC Daikin: heat>>
2022-06-26 10:35:03 DEBUG (MainThread) [custom_components.polyaire.protocol] Updated AirTouchGroupStatus 3 status, calling: <bound method Entity.async_write_ha_state of <Entity ITC Guest: off>>
2022-06-26 10:35:03 DEBUG (MainThread) [custom_components.polyaire.protocol] ------ end callbacks ------
2022-06-26 10:35:03 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
2022-06-26 10:35:04 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!
2022-06-26 10:35:06 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with unknown header!

First of all, thank you for this integration.
I too am having issues since updating a day or two ago - basically HA doesnā€™t see any changes if done on the unit itself, or the current temperature sensor changes. But it can control the unit. I presume this is because itā€™s now supposed to be local push as opposed to HA polling?
I wonder if thereā€™s a connectivity issue -my AC is on an isolated VLAN, while HA is in the servers VLAN. Though of course I have opened traffic from the AC to HA, so it can technically see it, itā€™s whether PUSH works across VLANS? Or its something else?

Also see Sensors not updated automatically when changes are made on wall controllers Ā· Issue #5 Ā· mihailescu2m/hass-airtouch4-platform Ā· GitHub

Can you tell me if you are running HA on a raspberry pi?
I am running it on my NAS and donā€™t have this issueā€¦

I guess I spoke too soon. Mine has just experienced the same loss of connection issue. Makes me wonder if somethings changed within 2022.6.x

Mineā€™s running on a virtual PC.

As a test I installed the default AirTouch integration and left it running overnight to see if it had any issues also. It reported several errors with connectivity. Maybe it is something thatā€™s changed with 2022.6.x as @sam2 suggested?

Iā€™m running HA Core on a Raspberry Pi 4 connected to the network via Ethernet. Iā€™m also running other services on the Pi, including Pi Hole (which is doing DHCP and DNS for the network) as well as a couple of other things.

My HA is one of the VMā€™s on my services server (proper PC not a pi), no issue with regard to system resources.

I can control the AC from HA, but the sensors (ie current temp, setpoint, etc) only update when I push a button (for example to switch on or off the AC) from within HA. Likewise no updates if any changes made on the AC wall panel itself.

Everything was working great with the previous version of the integrationā€¦ must be something related to the ā€œpushā€ update.

Raspberry Pi 4 is a fairly fast little computer. I ran a random single threaded Python benchmark I found online. It was about 1/2 as fast as my AWS EC2 t series, and 1/4 as fast as my Ryzen 5600X - single threaded. Multi-core all would be a lot faster. 4GB model has plenty of RAM

This shows average load is really low on the system, and thereā€™s plenty of memory free.

top - 20:07:05 up 7 days,  9:11,  1 user,  load average: 0.09, 0.03, 0.01
Tasks: 168 total,   1 running, 167 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.8 us,  0.4 sy,  0.0 ni, 98.7 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st
MiB Mem :   3794.5 total,   2083.3 free,    446.4 used,   1264.8 buff/cache

Itā€™s not a problem of computation for the RPI, but I was considering if maybe some ā€œoptimisationā€ for networking will lead to messages being stuck in a queue instead of being delivered.

What I see in my case is the temperature on the AC unit not being updated, but the ITC temps are all updated correctly on my system. So I will work to fix that.

I want to clarify: I did not change anything to PUSH but the name (it was confusing using the same name as the official integration); version 1.2 before was using local push class as well, and there was not a log of things changed in 1.3, mostly adding debug messages and some fixes for the initial connectā€¦ So I find it weird having different behaviour in 1.2 vs 1.3ā€¦

1 Like

Thanks Marian, appreciate the awesome integration and that you actively support it :slight_smile: If thereā€™s anything I can do to help please let me know.

Hi Marian, I want to echo @tomwaldnzā€™s thanks for a terrific integration and the work youā€™re doing with it.

Iā€™m a total amateur, not a developer, but I added a couple of lines of debug output to your code to see if I could find any pattern in the log overnight. There wasnā€™t anything super obvious but would it be possible to decode the messages from the AirTouch tablet in the place where you currently have the output ā€˜Message received with unknown headerā€™? They may be irrelevant but Iā€™m wondering if they might shed a bit more light because thereā€™s so many of those messages.

On a separate topic I got a bit lost trying to figure out how it might be possible to add the ā€˜battery lowā€™ indicator for each ITC. I can see your code extracts it but I donā€™t know if the climate entity can be modified to include it. I wondered about maybe repurposing the ā€˜humidityā€™ sensor field for that purpose but that seems ugly. I first noticed the battery low sensor in Tony Myattā€™s code for the AirTouch 3 https://github.com/tonymyatt/airtouch3api/blob/3273233fb07392fbddec2ebd02eec18c8bea6325/airtouch3/airtouch3.py

On a final note I wondered if itā€™d be possible to show each damper opening percentage as a read-only attribute in the fan entities when theyā€™re in ITC mode? Iā€™m interested in seeing how the dampers are being adjusted by the AirTouch system and itā€™d be great to be able to graph them.

Please let me know if thereā€™s any testing or data I can help you with. Thanks again.

Just noticed a hiccup in the log, in case itā€™s helpful to you. Itā€™s not triggered by your integration, I think itā€™s the default AirTouch integration thatā€™s running (passively) in parallel.

2022-06-28 10:12:20 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received with expected header!
2022-06-28 10:12:20 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message received: 43
2022-06-28 10:12:20 DEBUG (MainThread) [custom_components.polyaire.airtouch4] Message decoded - GRP_STAT: {0: AirTouchGroupStatus(group_power_state=1, group_number=0, group_control_type=1, group_open_perc=0, group_battery_low=0, group_has_turbo=0, group_target=17.0, group_has_sensor=1, group_temp=19.4, group_has_spill=0, _callbacks=set()), 1: AirTouchGroupStatus(group_power_state=1, group_number=1, group_control_type=1, group_open_perc=0, group_battery_low=0, group_has_turbo=0, group_target=20.0, group_has_sensor=1, group_temp=20.6, group_has_spill=0, _callbacks=set()), 2: AirTouchGroupStatus(group_power_state=1, group_number=2, group_control_type=1, group_open_perc=90, group_battery_low=0, group_has_turbo=0, group_target=20.0, group_has_sensor=1, group_temp=19.4, group_has_spill=0, _callbacks=set()), 3: AirTouchGroupStatus(group_power_state=0, group_number=3, group_control_type=1, group_open_perc=0, group_battery_low=0, group_has_turbo=0, group_target=20.0, group_has_sensor=1, group_temp=19.1, group_has_spill=0, _callbacks=set()), 4: AirTouchGroupStatus(group_power_state=0, group_number=4, group_control_type=1, group_open_perc=40, group_battery_low=0, group_has_turbo=0, group_target=20.0, group_has_sensor=1, group_temp=16.1, group_has_spill=0, _callbacks=set()), 5: AirTouchGroupStatus(group_power_state=0, group_number=5, group_control_type=1, group_open_perc=10, group_battery_low=0, group_has_turbo=0, group_target=17.0, group_has_sensor=1, group_temp=15.1, group_has_spill=0, _callbacks=set()), 6: AirTouchGroupStatus(group_power_state=0, group_number=6, group_control_type=1, group_open_perc=40, group_battery_low=0, group_has_turbo=0, group_target=17.0, group_has_sensor=1, group_temp=14.0, group_has_spill=0, _callbacks=set()), 7: AirTouchGroupStatus(group_power_state=0, group_number=7, group_control_type=1, group_open_perc=0, group_battery_low=0, group_has_turbo=0, group_target=17.0, group_has_sensor=1, group_temp=16.8, group_has_spill=0, _callbacks=set())}
2022-06-28 10:12:20 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 137, in _handle_refresh_interval
await self._async_refresh(log_failures=True, scheduled=True)
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 270, in _async_refresh
update_callback()
File "/usr/src/homeassistant/homeassistant/components/airtouch4/climate.py", line 102, in _handle_coordinator_update
return super()._handle_coordinator_update()
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 330, in _handle_coordinator_update
self.async_write_ha_state()
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 533, in async_write_ha_state
self._async_write_ha_state()
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 571, in _async_write_ha_state
state = self._stringify_state(available)
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 539, in _stringify_state
if (state := self.state) is None:
File "/usr/src/homeassistant/homeassistant/components/climate/__init__.py", line 217, in state
if self.hvac_mode is None:
File "/usr/src/homeassistant/homeassistant/components/airtouch4/climate.py", line 143, in hvac_mode
is_off = self._unit.PowerState == "Off"
AttributeError: 'AirTouchAc' object has no attribute 'PowerState'
  • I am already reading the low battery warning, I am just not exposing it :slight_smile: will do it in a next update at some point.
  • I will see if I can do read-only damper
  • the errors above are from the official integration :slight_smile:

Now, regarding stuff not being updated, I have already emailed Polyaire about changes in their communication protocol.
In short: my integration relies on existing communication and just snoops for updates. The official integration is polling, meaning every X time it asks for status. What I noticed is that there are new message types (the unknown ones), and that there are no more AC update messages sent unless thereā€™s an actual status change on the AC. So if you donā€™t change AC settings, thereā€™s no message about AC updates - and the AC (sensor) temperature will not be updated. The solution would be to ask for updates from time to time, but I suspect the new message types might contain update information, so a protocol refresh might fix things. Iā€™ll post here if I get a reply from Polyaire.

^^^ This would fix AC (sensor) temperature not being updated, which is what I am seeing on my system. Zone information is being updated correctly for me, since I am still seeing zone update messages going though the network (without me asking for them, probably from console).

AC not being updated:

Zone being updated:

For those using Mushroom cards, Iā€™ll also share my card for the zones.

It shows icon and icon color based on AC operation (red/fire icon for heating, blue/snowflake icon for cooling etc), status information based on operation mode (On at 60% for damper, Heating to 17C for ITC), chip with current temperature, and chips for damper fan and itc thermostat, highlighted in AC operation color based on operation mode (filter icon for damper or thermometer icon for ITC). Clicking on the icons takes you to the respective entity page (where you can set percentage or target temp), long pressing on them changes the operation mode (e.g. pressing on the thermometer will switch to ITC mode). Pressing on the card icon will toggle zone ON/OFF.

type: custom:stack-in-card
cards:
  - type: custom:mushroom-template-card
    entity: fan.damper_living
    hold_action: None
    primary: Living
    secondary: |
      {% if state_attr("fan.damper_living", "preset_mode") == "ITC" %}
        {% set state = state_attr("climate.itc_living", "hvac_action") | capitalize %}
        {% set target = state_attr("climate.itc_living", "temperature") | round %}
        {% set text = "to " + target | lower + "Ā°C" if state != "Idle" and state != "Off" %} 
      {% else %}
        {% set state = states("fan.damper_living") | capitalize %}
        {% set target = state_attr("fan.damper_living", "percentage") %}
        {% set text = "at " + target | lower + "%" if state != "Off" %}
      {% endif %}
      {{ state }} {{ text }}
    icon: >
      {%- set icons = {
        "heating": "mdi:fire",
        "cooling": "mdi:snowflake",
        "drying": "mdi:water-percent",
        "idle": "mdi:air-conditioner",
        "off": "mdi:power"} -%}
      {{ icons[state_attr("climate.itc_living", "hvac_action")|lower] |
      default("mdi:autorenew") }}
    icon_color: >
      {%- set colors = {
        "heating": "#ff8100",
        "cooling": "#2b9af9",
        "drying": "#efbd07",
        "idle": "#8a8a8a",
        "off": "disabled"} -%}
      {{ colors[state_attr("climate.itc_living", "hvac_action")|lower] |
      default("#8a8a8a") }}
    card_mod:
      style: |
        :host {
          height: 84px;
        }
  - type: custom:mushroom-chips-card
    alignment: center
    chips:
      - type: template
        entity: climate.itc_living
        content: '{{ state_attr("climate.itc_living", "current_temperature") }}Ā°C'
        tap_action: None
        hold_action: None
        card_mod:
          style: |-
            ha-card {
              top: -16px;
            }
      - type: template
        entity: fan.damper_living
        icon: mdi:air-filter
        icon_color: >
          {%- set colors = {
            "heating": "#ff8100",
            "cooling": "#2b9af9",
            "drying": "#efbd07",
            "idle": "#8a8a8a",
            "off": "disabled"} -%}
          {{ colors[state_attr("climate.itc_living", "hvac_action")|lower] |
          default("#8a8a8a") if state_attr("fan.damper_living", "preset_mode")
          != "ITC" }}
        tap_action:
          action: more-info
        hold_action:
          action: call-service
          service: fan.set_preset_mode
          data:
            entity_id: fan.damper_living
            preset_mode: Damper
        card_mod:
          style: >
            {%- set colors = {
              "heating": "255, 129, 0",
              "cooling": "43, 154, 249",
              "drying": "239, 189, 7",
              "idle": "138, 138, 138",
              "off": "138, 138, 138"} -%}
            {% set color = colors[state_attr("climate.itc_living",
            "hvac_action")|lower] | default("138, 138, 138") if
            state_attr("fan.damper_living", "preset_mode") != "ITC" else
            "var(--rgb-state-disabled)" %}

            ha-card {
              top: -16px;
              --chip-background: rgba({{color}}, 0.2);
              --text-color: rgb({{color}});
            }
      - type: template
        entity: climate.itc_living
        icon: mdi:thermometer
        icon_color: >
          {%- set colors = {
            "heating": "#ff8100",
            "cooling": "#2b9af9",
            "drying": "#efbd07",
            "idle": "#8a8a8a",
            "off": "disabled"} -%}
          {{ colors[state_attr("climate.itc_living", "hvac_action")|lower] |
          default("#8a8a8a") if state_attr("fan.damper_living", "preset_mode")
          == "ITC" }}
        tap_action:
          action: more-info
        hold_action:
          action: call-service
          service: fan.set_preset_mode
          data:
            entity_id: fan.damper_living
            preset_mode: ITC
        card_mod:
          style: >
            {%- set colors = {
              "heating": "255, 129, 0",
              "cooling": "43, 154, 249",
              "drying": "239, 189, 7",
              "idle": "138, 138, 138",
              "off": "138, 138, 138"} -%}
            {% set color = colors[state_attr("climate.itc_living",
            "hvac_action")|lower] | default("138, 138, 138") if
            state_attr("fan.damper_living", "preset_mode") == "ITC" else
            "var(--rgb-state-disabled)" %}

            ha-card {
              top: -16px;
              --chip-background: rgba({{color}}, 0.2);
              --text-color: rgb({{color}});
            }