Actron Connect and Home Assistant

“Gentlemen, I am now about to send a signal from this laptop through our local ISP, racing down fiber-optic cable at the speed of light to San Francisco, bouncing off a satellite in geosynchronous orbit to Lisbon, Portugal, where the data packets will be handed off to submerged transatlantic cables terminating in Halifax, Nova Scotia, and transferred across the continent via microwave relays back to our ISP and the X10 receiver attached to this (clicks mouse, lamp switches on) lamp.” – Howard Wolowitz.

As mentioned in a previous post (here), I was able to integrate an Actron air conditioner using the ActronConnect Wi-Fi module with my home automation software. Recently however, I decided to create an add-on for Home Assistant so that it could interface with that unit.

The add-on is experimental at the moment with a constraint being that it needs an MQTT broker to handle messaging to Home Assistant. The default configuration assumes you’re using the Mosquitto MQTT broker that comes with Home Assistant, but you could use any other product if you preferred.

The add-on has been compiled for amd64, armhf and i386, and tested on a Linux 64bit virtual machine, and a Raspberry Pi using a 32-bit Home Assistant image.

Installation

Add a new add-on repository to your Home Assistant deployment, and you should be able to access the compiled add-on.

Add On

The repository for the add-on is here: https://github.com/MikeJMcGuire/HASSAddons. It should install fairly quickly, the add-on is about 200mb.

Add On

You need only configure a couple of settings to use it. If you leave the default MQTTBroker of ‘core-mosquitto,’ it will use the Mosquitto add-on of Home Assistant (core-mosquitto is the internal name of the Mosquitto add-on (when hosted by Home Assistant). You could also put the IP address/host name of your broker if you host it elsewhere.

The logging is a little intense at the moment, but I’ll back that off once its had a bit more testing.

Once the add-on is installed, you’ll need to configure your home DNS (whether its on your router or otherwise), to make the the add-on look like the cloud service used by the ActronConnect module.

You will need to create DNS entries for these hosts, and resolve them to the IP address of your Home Assistant. Once you’ve done that, a reboot of the air conditioner will force the ActronConnect to lookup those IP addresses again, and then connect to your Home Assistant. Entries:

  • actron.ninja.is
  • actron-connect.actronair.com.au

Enjoy!

~ Mike

33 thoughts on “Actron Connect and Home Assistant

    1. The bulk of the code would be the same. You’d probably need to move the config file path to somewhere modifiable from outside the container, and maybe tweak the dockerfile slightly, then you could just run it as a standard container.

  1. OK. I’ve installed Hass.io in a docker container on RPi3 running Raspbian Lite. Previously I used the python virtual environment install for HA but you don’t get the add-on store with that option and I wanted to get my Actron Connect working with Siri ASAP. If anyone else is running HA and wants to switch to Hass.io but running on Raspbian Lite, the guide for doing this is here: https://www.home-assistant.io/hassio/installation/#alternative-install-on-generic-linux-server (there were a few RPi specific issues with the directions in that link; I’ll elaborate on the fixes for them once I get this working).

    I also setup dnsmasq on my Netgear R7000 running merlin xwrt-vortex firmware. Once I had that setup I put a DNS redirect on the router so those two urls point to the Hass.io server.

    Installed the add-on from the store. Reconfigured all of my existing HA devices…. this took a while. I got a call from my wife to open the garage door because Siri wouldn’t do it for her – had to get up and do it manually. First world problems.

    Now, it looks like Actron Connect is talking to MQTT as per the logs:

    09-01-2019 19:06:51.71 DeviceController.Data() Client: ::ffff:192.168.0.88:3053
    09-01-2019 19:06:51.87 DeviceController.Data() Data: {“G”:”0″,”V”:2,”D”:6,”DA”:{“isOn”:true,”mode”:2,”fanSpeed”:2,”setPoint”:25.0,”roomTemp_oC”:25.0,”isInESP_Mode”:true,”fanIsCont”:0,”compressorActivity”:2,”errorCode”:””,”individualZoneTemperatures_oC”:[26.1,26.1,26.4,25.9,25.6,26.5,25.4,25.0],”enabledZones”:[0,0,0,0,0,0,0,1],”liveTimer”:null}}

    However I’m not seeing a climate component showing up on the overview screen. Do I need to add something to configuration.yaml?

    Thanks Mike!!

    1. Well, the add-on is hearing from the air conditioner which is good. MQTT on the other hand – not necessarily.

      What MQTT server are you using? The default configuration of the add-on is to use ‘core-mosquitto’ which is the internal network name for the mosquitto MQTT add-on. Does the MQTT addon show the air conditioner add-on log in to it?

      1. Fantastic! Got this up and running with a bit of debugging with Mike’s input (had to add MQTT discovery option to configuration.yaml). Amazing to have HA / Siri integration to control the Actron A/C and also discarding the slow and unencrypted cloud integration. Thanks for your impressive work on this add-on Mike.

  2. Thanks for your work Mike, incredible improvement to Home Assistant, and delivered where Actron wouldnt. I know, I tried asking.

  3. Thanks, this is awesome! Managed to get the docker container running on my Synology communicating with mosquitto (docker) to Home Assistant (docker) which in turn is also connecting to HomeKit. Can now ditch the Actron Connect iOS app and not have to worry about the online service being shut down. I additionally used the reverse proxy feature of the Synology to forward to the port 80 web service.
    One question though is there a way to set the fan speed to ESP and the additional ‘const’ modes?

    1. Glad you’re getting some use from it! Unfortunately even the original iOS app to my knowledge couldn’t set ESP mode. It can report on ESP mode, but it didn’t seem to have the option to change it.

    2. Hi Andreas,
      I am completely new to Home Assistant, but was am keen to get exactly what you have working too.
      I have Home Assistant installed as a docker image on my Synology NAS. But how do I get Mike’s add-on working with this?
      Can you point me to a blog or something?
      Any help is much appreciated!

      1. I guess my question is how do I install this add-on as a docker container on my synology nas?

      2. Basically you install it as you have installed the Home Assistant Docker container on the Synology NAS through the Docker app.
        The container for a + series Synology NAS is ‘mikejmcguire/mikejmcguire-hass-actron-amd64’
        You must specify:
        Volume: Mount path ‘/data’ to a folder where you’re keeping the configuration file
        Port Settings: Local Port: 8186; Container Port: 80

        Inside the folder you pointed ‘/data’ to you need to make a file called ‘options.json’. below is mine:
        {
        “MQTTBroker”:”192.168.34.150″,
        “MQTTUser”:”homeassistant”,
        “MQTTPassword”:”{your password here}”,
        “Zones”: [
        {
        “Id”:1,”Name”:”Living”
        },
        {
        “Id”:2,”Name”:”Theatre”
        },
        {
        “Id”:3,”Name”:”Study”
        }
        ,{
        “Id”:4,”Name”:”Master Bedroom”
        },
        {
        “Id”:5,”Name”:”Bedroom 2″
        }
        ,
        {
        “Id”:6,”Name”:”Bedroom 3″
        }
        ]
        }

        This also brings up the point you need to setup an MQTTBroker Docker container too, I used Mosquitto https://www.home-assistant.io/docs/mqtt/broker/ .
        One thing I have noticed are that the commands sent to the Airconditioner are a bit laggy, can take 30 seconds to make a change. Also the Actron modules don’t show up under the MQTT integrations like other MQTT items.

  4. Hi Andreas,
    Many thanks for your reply!

    I have a mosquitto mqtt container up and running, and with your instructions, I now have the actron container running too. Couple of questions:

    How do I integrate the actron container with the home assistant container? Do I need to update the configuration.yaml file?

    I am going to have a problem setting the two required dns entries to point back to my home assistant container. I am using an eero router which does not support setting ip addresses for hostnames. Any ideas? I am thinking maybe another docker container that I can then use as a dns server.

    Thanks again for your help

    1. The only thing in the configuration.yaml is “discovery:”
      And in the Home Assistant UI go to ‘Configuration’ -> ‘Integrations’ -> Selected MQTT and add in the MQTT credentials.
      The Actron controls should be auto discovered as ‘climate.air_conditioner’ and the zones should appear as ‘switch.{name}_zone’

      1. I’ve solved my dns host name issue, but still getting no love. Here’s what I have:

        * I have the mikejmcquire-hass-actron-i386 docker container up and running. I am using the i386 image as my synology has an intel cpu. The docker container log shows that it starts up and then every 5 mins does an MQTT.SendMessage() hass-actron/status.
        I set up the options.json file for the actron contrainer. It only has the mqttbroker and zones, as I do not have a username/password for my boker.
        As far as I can tell, this container is working correctly.

        * Mosquitto MQTT is up and running as a docker container. It does not have a username/password, but I think that is OK. I can test it with MQTT.fx and can verify that I can connect, subscribe, and publish updates. I can see that the hass-actron container is connecting as I can see the following docker container log message “New client connected from 172.17.0.2 as hass-actron (c1, k15, u”)”. So I also think that this working correctly.

        * I set up a DNSmasq docker container to allow me to set host names that resolve to my synology ip address. I then set my eero router to use this as the dns server for the whole network. I can correctly resolve the two hostnames in this article as my synology nas ip address. Also the actron app no longer works. So it also seems that this is working correctly.

        * I have my home assistant docker container up and running. It is integrated with my zwave hub, and to apple homekit. So this container is working. I also set up the mqtt integration.

        However, home assistant does not have any climate entities. So it seems that the auto config is not working, or I am missing a step to get the integration working.

        Almost there! Any ideas why the climate entities are not showing up?

        Many thanks!

  5. In the log for the container, are you seeing incoming web requests from the Air Conditioner to the add-on? It should be fairly verbose. If not, check that you’re forwarding port 80 from the nas IP to the container’s port 80. The air conditioner will *only* connect to the add-on on port 80. Based on you only seeing the status message every 5 minutes, you’re probably not getting a feed from the air conditioner itself.

    1. Also. Is MQTT discovery turned on within Home Assistant? You can do that in the configuration file, or the configuration of the MQTT integration. Without that, Home Assistant won’t discover the climate device from the MQTT server. You should be seeing this regardless of whether or not the airconditioenr is sending data to the add-on.

      1. Turning discovery on has allowed the discovery of the devices, so home assistant now has all the AC entities configured correctly.

        However, I cannot control the AC most likely as per Mike’s previous comment, as the AC cannot connect to the container on port 80.

        Last piece of the puzzle! 🙂

    2. I think this is exactly what is happening.

      The container is currently configured as “Port Settings: Local Port: 8186; Container Port: 80” as per Andreas’ suggestion.

      Andreas, if this is taking traffic from port 8186 on the nas and redirecting it to port 80 on the container, then what redirects the connection from the air conditioner on port 80 to port 8186?

      1. It’s working!!!!!

        I re-read Andreas’ original comments and setup reverse proxies for the two hostnames from port 80 to 8186. This is then mapped to port 80 on the container in the container settings.

        Mike, you are an absolute champion for putting this all together. From reverse engineering Actron, to creating a solution for yourself, and then also making docker images available for other people to use. And to make yourself available to answer questions from newbies. A huge thank you!

        Andreas, I want to also thank you for the help you gave me in getting this working. Also a huge thank you!

        Cheers

  6. You’ll either need to change the local port to 80 (recommended), or you’ll need some other network device proxying that traffic for you. Either way, something will need to be listening on 80 for the air con to connect to it.

  7. Hey Mike,

    I’ve spent the last 6 months or so tinkering in python to do what you have done. I have had success getting the actron to do a GET a command from my webserver (which changes the indoor unit) but after a few minutes the GET commands drop off and eventually stop. You mentioned that the airconditioner is probably unhappy about something but I just can’t work it out. I’ve tried to compare what you have done which is obviously more comprehensive than my very non-technical approach but I can’t work it out

    Do you have any capacity to check out my code and see if you can point me in the right direction?

    https://pastebin.com/Za0JqU1F

  8. I’ll give it a go in the next few nights. It’s a bit tricky because I have to move some hardware around to do it but I’ll do it and report back

    Thanks

      1. I captured a bit more traffic between the indoor unit and the actron webserver and noticed that I only send the command I want processed ie {“tempTarget”:23} whereas actron’s webserver sends the entire message 4 or 5. Do you think that not getting the entire message might make the device unhappy? I thought the single command might be ok. I’ll do the same now with my webserver and see what happens

      2. Ok so I captured the traffic between the python service and the indoor unit. Its a lot so i’m not sure what is relevant so I’ve pasted a bit but can add more if something is missing:
        https://pastebin.com/JMq6tiPh

        I also noticed an error (“Last”:”JsonErr(2)Expected”) at the second endpoint (2.json) :
        {“ConnectionStatus”:”111″,”CurrentConnection”:{“SSID”:”xxxx”,”key”:”xxxxxx”,”IP”:”192.168.1.6″,”LinkStats”:{“errors”:{“flags”:”[C,N]”,”Count”:23,”Last”:”JsonErr(2)Expected”},”stats”:{“good”:[42,315],”bad”:[0,0,0,0]}}},”PreferredConnection”:{“SSID”:”xxxx”,”key”:”xxxxxx”,”httpProxy”:null},”RemoteServer”:”actron.ninja.is”,”ApiToken”:”xxxxxx

  9. Mike you’re an absolute legend doing this. I have the addon installed on latest hassio, MQTT broker running fine (using it for tasmota) and enabled MQTT discovery. When I attempt to start the addon I see the following message in the log:

    19-07-24 13:37:15 ERROR (SyncWorker_6) [hassio.docker] Can’t start addon_e4641267_hass-actron: 500 Server Error: Internal Server Error (“driver failed programming external connectivity on endpoint addon_e4641267_hass-actron (edc4148e4ea36203e7…): Bind for 0.0.0.0:80 failed: port is already allocated”)

    Any idea what’s causing this?
    Cheers

    1. Yep – the bind for 0.0.0.0:80 means you’ve got another application listening on port 80 – i.e. if you can simply type a hostname/ip into the browser without a :port at the end. You’ve probably got another add-on or something listening on the standard HTTP port. HA listens on 8123 by default. The Actron add-on must be on port 80, as that’s what the air conditioner will try and connect on.

  10. Hi Mike,

    You’re doing a great service here for Actron owners! It’s nice work. I can see the hours and frustration that went into this.

    I have a question for you: Have you figured out how to set the temperature of individual zones (ESP Ultima system)? I have had a 5 min skim through your code and I have a feeling the answer is no, but before I go down the rabbit hole and try to make that work, I thought it prudent to ask if it was something you tried to figure out and whether it was worth me attempting.

Leave a Reply to Lucas Perez Cancel reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s