Polyaire Air Touch 2 or 3

Hi all, I’m about to get ducted AC installed and was considering the Airtouch 4 system. I’d like to be able to monitor and control the AC via home assistant rather than IFTTT. Has anyone had any luck with this?

does HA have an integration? i didn’t see one. What is the brand of AC you are getting. i noticed Daiken works with HA but as i am in Australia there are not fitted for IP :frowning:

I’m also in Australia and have been quoted Daikin AC with wifi module. I like the additional zone level temperature control the Airtouch 4 can provide, but still want to be able to monitor and control it from HA. There is no Airtouch 4 integration in HA that I know of, but @holsty mentioned the communication protocol was released by Polyaire so I was hoping someone might have figured something out? Airtouch 4 is also google assistant compatible if that provides any additional avenues for integration (I’m relatively new to HA)?

cant you just use the Daiken integration already in HA then? Was that an add on module? Can you share any details?..opps just re-read that…you want remote individual zone control…me too

I’m running hoobs in a docker with an Airtouch 4 plugin. This effectively turns the Airtouch into a HomeKit product that can be added to HA via the homekit intergration.

It has been working really well with full zone control etc.

https://plugins.hoobs.org/plugin/homebridge-airtouch4-platform

1 Like

I have developed a local integration + custom component for the AirTouch 3 panel

I have been using it now for over a month and its working much better than before when automating via IFTTT. Having said that it still needs a lot more testing especially with different configurations.

2 Likes

Looks like a good solution, thanks @holsty.
@ozczecho nice work with the api! Do you think the API for air touch 4 would be quite similar… I’ll have my air touch 4 installed in a couple of weeks and could try it out.

@Paulbunyan - Not sure TBH. I didn’t have much luck using https://github.com/mihailescu2m/homebridge-airtouch4-platform with my AT3. Let us know how it goes.

Great work Ozczecho.
I will now wait for confirmation from @Paulbunyan before placing an order.

Will this work with AT2?

Hi @Yuddy - I am not sure. I have an AT3 unit, so it is only tested against AT3.

It should not be too hard to try running it against AT2. Clone the repo, set the config relevant to your system, run it and then paste the following http://localhost:5353/api/aircons into a browser (assuming you are running the api on localhost). That call will return a json object with the current status of your AC unit.

Ok cool I’ll give it a shot and get back to you thanks.

I’m building a new house and it will be coming with AirTouch 4 - So I’m super keen to see this progress!

1 Like

Hi,
I would like to try this out. What is the easiest way to get it working?
I have HassOS installed on a VM in proxmox on an intel nuc.
I think that running it as a docker container in proxmox is the right way to do it but I have not used docker before…

I’m also looking for some integration with AirTouch 4
I have a current mix of AirTouch4 Upstairs and split systems downstairs using Panasonic Comfort Cloud. I would like to make a layout to integrate with both in the 1 face

Hey mate, how’d you go with the airtouch 2? Did you successfully retrofit the AT3 integration?

1 Like

Gents, i’m having a crack at this on my AirTouch 2 and coming up with some interesting stuff.

So far, if you hook up TerraTerm to the control interface unit (the HF-11 unit) and connect to port 8899, press shift and escape twice (puts it in hexadecimal mode) you will get a response when you log in with a remote client app (to let the display know what the status is), I then clear the screen and press a single button on the app, cut and paste the hex into a text editor, clear the screen again, press the same button(like power to toggle between on and off, or temperature up, or zone percentage) then cut and paste that return hex code into the same file.

I’ve imported that text into excel and then used the conditional formatting to isolate what values have changed between the 2 sets of data

So far I have isolated the Power status, Zone1-8 percentage, Set Point temperature, current temperature values, system name, service phone number, system serial number, gonna work on a few more then it’s figuring out which value determines if you are setting a value for the controller or returning a status to a client app or touchscreen.

From what I can tell the bulk of the message remains the same and it’s only a few handfulls of values that change and all these are at the back end of the returned status message. What this means is that it’ll be much easier to template the values from and controls to and from the device

2 Likes

Here’s what I have decoded so far, from what i have read for the airtouch4 protocols it’ll be a couple of bytes inthe header that determins if it’s an info\status message or a command message, but the command messages could be broken up targeting specific byes denoting a fan speed command or a zone command, anyway at least with this we can start looking at a nodeRED flow to decode and update a sensor so values can be displayed in HA.

Updates on decoding the output (probably the most useful info so far)

To make it more useful i have started to integrate into MQTT using nodeRED.

You’ll probably need to re-configure your MQTT in\out nodes inthei flow to match your settings on your network. (the code posts as a single line as that’s how it exported from nodeRED)

[{"id":"58b5e101.08975","type":"tab","label":"AirTouch","disabled":false,"info":""},{"id":"1bb819ab.902fa6","type":"tcp in","z":"58b5e101.08975","name":"","server":"client","host":"CONTROLLER_IP_ADDRESS","port":"8899","datamode":"stream","datatype":"buffer","newline":"","topic":"","base64":false,"x":220,"y":120,"wires":[["c5afa6a8.a9cb38","d094db5e.852fa8"]]},{"id":"d7a24eba.95206","type":"debug","z":"58b5e101.08975","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":670,"y":180,"wires":[]},{"id":"d094db5e.852fa8","type":"function","z":"58b5e101.08975","name":"AC Status","func":"var newMsg = \"\"\nvar mqttMessage = \"\"\nvar sysStatus = \"\"\n\nif (msg.payload[354] > 10){\n    mqttMessage = {payload:\"ON\", topic:\"tele/AirCon/Power\"};\n} else {\n    mqttMessage = {payload:\"OFF\", topic:\"tele/AirCon/Power\"};\n}\nnode.send(mqttMessage,false);\nnode.done();\n\nswitch(msg.payload[358]) {\n    case 0:\n        mqttMessage = {payload:\"auto\", topic:\"tele/AirCon/Mode\"};\n    break;\n    case 1:\n        mqttMessage = {payload:\"heat\", topic:\"tele/AirCon/Mode\"};\n    break;\n    case 2:\n        mqttMessage = {payload:\"dry\", topic:\"tele/AirCon/Mode\"};\n    break;\n    case 3:\n        mqttMessage = {payload:\"fan_only\", topic:\"tele/AirCon/Mode\"};\n    break;\n    case 4:\n        mqttMessage = {payload:\"cool\", topic:\"tele/AirCon/Mode\"};\n    break\n}\nnode.send(mqttMessage,false)\nnode.done();\n\nmqttMessage = {payload:msg.payload[362], topic:\"tele/AirCon/SetPoint\"}\nnode.send(mqttMessage,false);\nnode.done();\nmqttMessage = {payload:msg.payload[364], topic:\"tele/AirCon/CurrentTemp\"}\nnode.send(mqttMessage,false);\nnode.done();\n\nswitch(msg.payload[360]) {\n    case 48:\n        mqttMessage = {payload:\"Auto\", topic:\"tele/AirCon/FanSpeed\"};\n    break;\n    case 49:\n        mqttMessage = {payload:\"Low\", topic:\"tele/AirCon/FanSpeed\"};\n    break;\n    case 50:\n        mqttMessage = {payload:\"Medium\", topic:\"tele/AirCon/FanSpeed\"};\n    break;\n    case 51:\n        mqttMessage = {payload:\"High\", topic:\"tele/AirCon/FanSpeed\"};\n    break;\n}\nnode.send(mqttMessage,false);\nnode.done();\nreturn;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":440,"y":180,"wires":[["f740d5ae.191468","d7a24eba.95206"]]},{"id":"c5afa6a8.a9cb38","type":"mqtt out","z":"58b5e101.08975","name":"AC Raw Data","topic":"tele/AirCon/rawmessage","qos":"","retain":"","broker":"5778013a.241c4","x":460,"y":60,"wires":[]},{"id":"f740d5ae.191468","type":"mqtt out","z":"58b5e101.08975","name":"ACMQTTDecoded","topic":"","qos":"","retain":"","broker":"5778013a.241c4","x":690,"y":120,"wires":[]},{"id":"5778013a.241c4","type":"mqtt-broker","name":"HAssMQTT","broker":"MQTT_SERVER_IP_ADDRESS","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

The above flow should do a few things, it’ll connect to the port 8899 on the controller and decode a few items. In the code of the function you can see how to reference the array ID’s as decimal type index numbers from my previous posting (msg.payload(XXX) where XXX is the decimal number of the item you wish to read).

The switch statements and if’s in the function just help to translate and present the info nicely should it need it. To read out the names of the zones or other multi-byte fields you will need to use some loops to combine these entries into a string which you can then output to and MQTT topic which can be picked up by an HA MQTT sensor.

From there you can use the MQTT Climate feature natively in HA (https://www.home-assistant.io/integrations/climate.mqtt/) to present the info in a card, it’ll do basic central system stuff but for a zoned ducted system like i have then separate entities may be needed to control the indiviual air outputs (Work in progress)

I have taken the easy (lazy?) way out. I used Assistant Relay to control my Airtouch 2. I assume it’ll work with any Google integrated AC system. The guide is a little outdated and it’s not maintained anymore but it still working.

It’s not locally controlled as you need Google, buts it’s the best I could manage until someone way smarter than me produces a better solution.

The only other thing I have besides the AT2 is Aqara temp sensors in the bedrooms. My built in AC unit temp monitor is in the living area so no good for maintaining temperature overnight in the bedrooms.

First I created 8 input.booleans, 6 zones and then more 2 for switching to cooling and heating that I wanted to control, like this:

cards:
  - type: button
    tap_action:
      action: toggle
    entity: input_boolean.air_con
    show_name: true
    name: Cooling
  - type: button
    tap_action:
      action: toggle
    entity: input_boolean.heating
    show_name: true
    name: Heating
  - type: button
    tap_action:
      action: toggle
    entity: input_boolean.master_bed_aircon
    show_name: true
	name: Master Bed Aircon

Then I set up Automations to call the Assistant relay service when the input.booleans are toggled, like this:

alias: AC - Group 3 On (Master bed)
description: send relay to google assistant to turn the AC on
trigger:
  - platform: state
    entity_id: input_boolean.master_bed_aircon
    from: 'off'
    to: 'on'
condition: []
action:
  - data:
      command: turn on Group 3
    service: rest_command.assistant_relay
mode: single

alias: AC - Group 3 Off (Master Bed)
description: send relay to google assistant to turn the AC off
trigger:
  - platform: state
    entity_id: input_boolean.master_bed_aircon
    from: 'on'
    to: 'off'
condition: []
action:
  - data:
      command: turn off Group 3
    service: rest_command.assistant_relay
mode: single

So now I can switch on the AC unit to cooling or heating and turn on and off each group through HA.

And finally to make it a little smart, some more automations to switch the groups on and off to maintain temperature. Like this:

alias: AC - Group 3 Auto On (Master Bed)
description: ''
trigger:
  - platform: numeric_state
    entity_id: sensor.master_bed_temp
    below: '20'
condition: []
action:
  - service: input_boolean.turn_on
    target:
      entity_id: input_boolean.master_bed_aircon
mode: single

alias: AC - Group 3 Auto Off (Master Bed)
description: ''
trigger:
  - platform: numeric_state
    entity_id: sensor.master_bed_temp
    above: '23'
condition: []
action:
  - service: input_boolean.turn_off
    target:
      entity_id: input_boolean.master_bed_aircon
mode: single

You could possible do it using a script in a more succinct way but I find this way easy to understand and debug.

1 Like