“What a piece of junk!” – Luke Skywalker.
A case could be made that I’ve chosen that specific quote because I just really like Star Wars. On an unrelated topic to that quote, I recently purchased a piece of equipment that supplements the air conditioner in my house allowing me to control the air conditioner remotely. This device was known as an ActronConnect module, designed for some of the newer Actron air conditioners. Unfortunately for me, it doesn’t look like Actron themselves designed it which is a shame because they make really good air conditioners.
I was very excited when I first learned about the device, as even though the air conditioner was new, the air conditioner didn’t have a way to control it remotely from my home automation system, without me spending a significant amount of effort reverse engineering one of the wall control units. Sadly, a lot of manufacturers still see little benefit in providing any mechanism to integrate a home automation system with their device. However, in Actron’s defence, the air conditioner does allow you to trigger an on/off electrically with a home automation system, however being able to toggle an air conditioner on/off when you don’t know its current state, the temperature or the zone configuration – not so helpful.
Back to the story. There was only so much information I could glean from the manufacturer prior to purchase, but I could find enough to see that this device would let me completely control the air conditioner “remotely.” The built in functionality the product provides plus the iPhone app was more than sufficient to remotely control the air conditioner, so I decided to purchase it. The module basically sits up in the roof space near the air conditioner, and connects to your home network wirelessly.
The first major annoyance was the misinformation from the company that supplied it, indicating that while the module had wireless as its primary method of communication, it “was so much more responsive when you used the Ethernet port.” Great I thought, the module did have an Ethernet port, the installation guide labelled it as an Ethernet port, and the supplier told me it worked as an Ethernet port. In my overexcitedness, sadly I didn’t do the fourth check and think to ring the manufacturer and ask them as well. Not that it would have made a difference – I still would have bought it. I just prefer “infrastructure” type devices like that to be wired, rather than wireless.
Let’s now assume that I didn’t run an Ethernet cable from the patch panel through the walls and up into the ceiling to the air conditioner only to find that the Ethernet port was “just for display.” Because that would be really annoying… not that I’d know of course, I’m just assuming it would, assuming someone actually did that anyway, but why would they, wireless is the best…
I configured the device, joined it to my wireless network and installed their app on my iPhone. I registered an account with Actron (as it appeared to be), and then started playing. Sure enough, after a 5 or so second delay, when I pressed a button on the app, the wall panel in the house reflected the change in configuration (e.g. different zone, fan speed, set temperature etc). Brilliant. Super exciting. I now have a networked device that controls my air conditioner.
Whilst the app really is quite pretty, it was very unresponsive. I didn’t know why at the time, although after some reverse engineering of the traffic, I’m now sadly very aware of the reason. An example of this slow response would be seen after clicking on one of the zone buttons to change the air conditioner zone, and then clicking power to turn the device on. Unfortunately, the zone command would get “lost in the matrix” as Stephen Hawking would say, and the air conditioner would turn on but the zone would not have changed. You generally had to click one action at a time, wait 5 – 10 seconds until it looked like the app had caught up, and then try your next action. Not overly impressive. But hey, at least it was pretty – they really did get the UI look and feel spot on I thought. It was such a shame that the functionality was so poor.
This was kind of academic anyway as I didn’t plan on using the app. Whilst being able to turn the air conditioner on whilst away from home is a great feature, I really wanted integration and automation. I wanted to integrate the air conditioner with my existing home automation system so that not only could I turn the air conditioner off whilst away from home using my system/app, but also have the system autonomously turn the air conditioner on/off based on its own logic – we’re trying to get our house to start thinking for itself.
The ultimate outcome I was seeking was for the house to turn the air conditioner on by itself some nights, rather than have me wake up because I’m hot and then turning the air conditioner on with my phone. Theoretically, you could leave the air conditioner on all night and adjust the thermostat, but you’d end up running the air conditioner far more than is necessary. I simply wanted the home automation system to check the temperature at about 2 am, and then if it’s over a certain temperature, re-zone the air conditioner for upstairs, turn it on, and then turn it off once the desired temperature has been achieved or the air conditioner has been on for 45 minutes.
All of this meant that the home automation system needed to communicate with the new wireless air conditioner module.
I’ve written many interfaces now from my home automation system to various other devices – the garage door, the lighting, the ceiling fans, the alarm etc so I wasn’t expecting this to be overly complex now that I had a network connection to the air conditioner. Sadly that wasn’t the case.
The manufacturer went to significant effort to produce a vision, identify a product gap in that vision, create a conceptual solution, create requirements, pick a hardware/software development organisation to outsource to, and then build the product. Unfortunately, they either didn’t think about it, or decided that enabling the device to be controlled using a standard/semi-standard interface was not required. In fact, as per advice from the manufacturer, you “must use the app provided” as the only way of sending commands to the air conditioner. They don’t provide an API, and they don’t provide any other way of directly sending commands to the controller. Not even the app talks directly to the air conditioner module.
In the next article (post 2), I’ll describe reverse engineering the application to better understand how it works. Understanding what components are involved, how they interact, and other behaviours is critical when trying to change the way a system operates. Whilst I was ultimately successful, what I learned during the reverse engineering didn’t fill me with a lot of hope. However, due to some gaping security holes in their software, my job was a lot easier.