Introduction: AO Smith Water Heater Monitor Lowes IRIS

Shortly after buying a new water heater that is capable of being "Smart" or remotely controlled. Lowes discontinued their IRIS platform, making all the IRIS products useless. Although they did release source code for their hub but my water heater smart add on connected to the IRIS servers directly though WIFI meaning I had no way to remotely control or monitor the water heater.

This project uses a energy smart water heater controller modified with an Wemos Mini development board running Arduino code and sending data over MQTT to homeassistant. The energy smart water heater controller connects and communicates with your water heater so no modification is needed to the actual water heater only the smart controller is modified. The smart controller is easily removed and installed to the water heater in a minute or less. This tutorial only reads data and does not send data to the water heater preventing any malfunction of the water heater.

My main purpose was to monitor the estimated hot water volume. I know it is possible to control the water heater, change setpoints and modes of operation but this has not be pursued at this point.

**disclaimer** as always with projects you read online I am not responsible for any damage you might cause to your property or to yourself. Read and follow these directions at your own risk. I have not measured any high voltages on the circuit board or the water heater connector I used. Although it is possible your water heater is different then mine or I just missed something and was lucky that I didn't kill myself.... Use common sense and treat every wire as its high voltage or confirm with a voltmeter that its safe.

*** This is my first instructable post so I hope it doesn't completely suck ***


Items needed

  1. Energy smart water heater controller, these are found for cheap on ebay since they are basically useless with out modifications.
  2. ESP8266 board, for this project I used a Wemos Mini light
  3. Soldering iron
  4. 3 Male header pins
  5. 3 Female Dupont connectors
  6. MQTT Server and Homeassistant or any MQTT Client - I will not cover setting up of the MQTT server or homeassistant but we have google and forums on the internet... so use them if you need to set that stuff up.

Step 1: Soldering

  1. Remove the circuit board from the smart energy controller by removing the screw and releasing the 4 locking tabs
  2. Connect wires to the circuit board. Only 3 wires need to be attached TX, 5V and Ground. For these connections, I attached header pins but you can always just solder wires directly to the board. The TX pin has a though hole connecter near the WIFI module that I used to solder the header to, for 5v and Ground I used the main board connector and soldered header pins floating on the back side.
  3. Solder header pins on your Wemos board if not already installed

Step 2: Code

You will need to have setup esp8266 board in your Arduino IDE and installed EspMQTTClient library before compiling and uploading your code. If you have not setup the esp8266 in Arduino or the EspMQTTClient library there are plenty of forums out there.

You will also need to download and install a modified version of software serial, I call SoftwareSerial512, this is included in the link below along with the project code. To install the library extract the zip file into your Arduino library folder. This library is needed since the normal version of SoftwareSerial has a buffer size of 64 characters and the water heater will send over a hundred characters at a time. This library should be good for 512 characters but at a cost of additional memory usage. So use your normal SoftwareSerial library on other projects unless you need to read a long string over serial.

Modify the sketch with your WIFI and MQTT setting, and if you want/need modify the MQTT topics.

The code is relatively simple, since the water heater already sends all the data needed, periodically to the WIFI module on the circuit board. The data is sent over serial communication at 115200bps baud rate. All we are doing is reading this data and parsing it out into variables. We then publish those variables to the MQTT client. There is more data then what I am parsing but most of it was useless, feel free to read the data string and add any thing you think is relevant.

Upload the code!

Step 3: Testing

Before installing the Smart controller board back into the case you will want to make sure your 5V and GND connections are correct. Carefully install the board onto the water heater and measure the voltage on the two header pins you installed on the Left hand side of the board. You want to ensure you are getting 5v and also make sure the polarity is correct(if you see -5v you need to switch +5 and GND). Your connections should look like mine, the Red wire is obviously +5v and the black wire next to it is GND, the other black wire on the Right is TX.

Next you want to test your serial connection to the water heater, Connect the TX pin on the smart controller to the Software serial RX pin GPIO14 or D5 (not the pin labeled RX) on the wemos board. Connect the 5V and GND wires to the Wemos board as well, connect your PC and open the serial monitor. You should see data coming in after a few minutes with "DeviceText" in it. The water heater only sends these strings every few minutes so just go grab a beer and comeback. If you don't see any data in your serial monitor after 5-10 minutes check all your connections. If all is well you can install the board back into the case.

You will then want to setup you MQTT topics in your MQTT Client, for my setup I am monitoring the water heater from my home assistant. If you don't have any MQTT Clients or a MQTT server you will have to set those up... again many forums out there!