Navien Hot Water heater - Navilink

I’ve poked around a bit, and can’t find an integration for the Navien Navilink.

Has anyone tried the “Water Heater” integration with a Navien?

I’m just hoping to control temperature.


There was a fairly extensive thread on this subject a while back. One guy was trying to reverse-engineer the interface to integrate it into HA but I don’t think he finished it. I have 3 Navien furnaces and their WiFi box through which I can use the Navien app, so I am interested as well. There was also some mention that Navien may open up their system, but don’t know what happened to that either. Maybe if we bug Navien enough they will do it.

Would be nice to find a project like this on GitHub or something that can be collaborative. I have a Navien, but have not bought the Wifi module, nor will I without Home Assistant Integration as it is pointless to have a closed cloud-only app.

Kind of regretting the Navien in hindsight,but at the time our old hot water tank had failed completely, and we needed something ASAP.

1 Like

From a Smart Home perspective I totally regret my Navien purchase too! I hate that their app is terrible and it does not allow integration into a smart home automation system. However, from a pure water heater perspective… it is great.

1 Like

There is this partial project on GitHub:

It should be possible to reverse engineer it through a proxy, or perhaps use web-scraping to control it.

I’m curious if anyone has considered pulling serial data directly off the water heaters RS-485 interface or by using one of their other interface modules:

Might be easier than trying to reverse engineer the NaviLink app.

I love this idea! I just want to be able to turn the unit off and on from HA – I’m not looking for all the other granular controls. I just got a Navien last week, and didn’t realize it had a serial interface.

FYI: I rewrote this recently (rudybrian/PyNavienSmartControl) based on the protocol used by the current mobile applications (matthew1471/Navien-API was based on an earlier protocol implementation and only supported one Navien boiler type). If this is of interest to you, please reach out to me via the repo as I could use some additional testers with a variety of different hardware setups.


Oh! This is fantastic!

I can buy the navien device to test with mine. (I don’t have it currently)

I have a NPE-240a

Yep, you will need to have a NaviLink to use PyNavienSmartControl. I did all my testing with a NPE-180A, but if you have a HotButton or are using recirculation schedules, I haven’t had a chance to test these features out with a live unit yet.

Ok, got my NaviLink physically installed. Now if I can actually get it to set up and connect to the Wifi I will get it integrated with Home Assistant.

Man, their software package is PAINFUL.

Ok, I got my NaviLink working with my Navien. Their software experience is terrible.

I had to use an old ipad to be able to get it set up, as my newer iphone just refused to work with the app’s setup.

For what it is worth, when you connect to the local wifi that it has to get your setup started, you will encounter menus that you can’t always scroll down to see, so I had to use the TAB key on my ipad to be able to move to the next field to be able to answer their questions.

I think the iphone would not work because the app refused to ask if it should be allowed to connect to my network… so it just froze:

And then there were screens like this where there are fields you cannot see, and have to hit TAB on a keyboard to be able to see them. Even when using iphone mode on my ipad, and the correct orientation, you could only see the fields by scrolling, and then knowing to hit TAB to make them work.

Hopefully this helps someone else out there trying to get one of these NaviLink’s hooked up to their Navien!

As for the Python Code, it looks pretty good, I connected to Navien and got the summary info back from my device.


Channel 2 Info:
Device: 1
Controller Version: 1300
Panel Version: 33
Device Model Type: NPE
Device Count: 1
Current Channel: 2
Device Number: 1
Error Code: Normal
Operation Device Number: 0
Average Calorimeter: 0.0 %
Current Gas Usage: 0.0 BTU
Total Gas Usage: 8510.8 ft³
Hot Water Setting Temperature: 125 °F
Hot Water Current Temperature: 122 °F
Hot Water Flow Rate: 0.0 GPM
Inlet Temperature: 124 °F
Power Status: ON
Heat Status: OFF
Use On Demand: OFF
Weekly Control: OFF
Day Sequences

I would think, based on what I am seeing, it should be possible to create a true HACS integration for Navien with this - but I am an idiot; so I will see what I can do, but don’t put much faith in my ability to build an integration. Still, might make an interesting project.

You should be able to do this with the code that Setarcos posted running it as a service:

I am going to try to help out and test more of the feature set with mine, and if I can figure out how, possibly build something with HACS - but don’t put too much faith in my ability in that.

Glad it is working for you @Mr_Flibble. Let me know if you see anything weird.

FYI: I have observed on occasion that the Navien Smart Control service doesn’t complete authentication properly or disconnects in the middle of interacting with it. At present there isn’t any retry logic if this happens though, so it would just error out and you would have to run the command again.

I am looking for additional testers with other supported Navien boiler types, HotButton (on-demand recirculation), non-US (i.e. metric unit) devices and cascaded devices so if anyone has a configuration like this, please hit me up via the GitHub repo.

1 Like

I am curious to try this out - I have a slightly more complex combi boiler setup that I want to integrate to log data such as cycle time and gas usage by use type - hot water or heating.

It is hooked up to two (ecobee) thermostats and some thermostatic values that open the circuits

@Energize please give PyNavienSmartControl a try and please post your findings (either here or in open issues or the Testers Needed discussion thread in the GitHub repo). It would be great to get some test data from a setup like yours.

1 Like

I used PyNavienSmartControl to develop a custom integration if anyone is interested. It will need to be installed using HACS. You can set the temperature, set away mode (which just powers off the unit), and track gas consumption and hot water flow. If you have a cascade system, it should show stats from the secondary units, but I have not tested in this configuration as I only have one water heater for my house. I have not implemented control of an external recirculator as I use the internal recirculator, but I will add that functionality soon.


@nikshriv Thank you for making this into an integration. It worked perfectly upon first install attempt.

@Setarcos Thank you for figuring out how to communicate with the Navien! I might be one of the corner case testers you were seeking. I am European but live in the USA and my system is unfortunately reporting everything in Standard which means nothing to me… can it be switched to metric?

@aruffell the water heater itself uses either Celsius or Fahrenheit internally based on the settings chosen when the setup wizard is run after the device is first powered up. Whatever mode the device is in is reflected in units of the data shown. This is almost certainly adjustable after the fact in the installer settings menu, but how to do so will depend on what type of unit you have.

@nikshriv, thank you for the integration of the script into HA!

I have a Navien NPE2-240A2 and I just got NaviLink up and running, with the hopes that I could get this integration going. Unfortunately, after I get it installed, I get an integration error, with the following logs:

2022-07-28 09:14:29 ERROR (MainThread) [custom_components.navien_water_heater.navien_api] AttributeError: ‘NoneType’ object has no attribute ‘get’
2022-07-28 09:14:29 ERROR (MainThread) [custom_components.navien_water_heater] KeyError: ‘channel’
2022-07-28 09:15:51 ERROR (MainThread) [custom_components.navien_water_heater] KeyError: ‘channel’
2022-07-28 09:17:12 ERROR (MainThread) [custom_components.navien_water_heater] KeyError: ‘channel’
2022-07-28 09:18:34 ERROR (MainThread) [custom_components.navien_water_heater] KeyError: ‘channel’
2022-07-28 09:20:01 ERROR (MainThread) [custom_components.navien_water_heater] KeyError: ‘channel’
2022-07-28 09:21:22 ERROR (MainThread) [custom_components.navien_water_heater] KeyError: ‘channel’
2022-07-28 09:22:43 ERROR (MainThread) [custom_components.navien_water_heater] KeyError: ‘channel’
2022-07-28 09:24:03 ERROR (MainThread) [custom_components.navien_water_heater] KeyError: ‘channel’
2022-07-28 09:25:24 ERROR (MainThread) [custom_components.navien_water_heater] KeyError: ‘channel’
2022-07-28 09:26:44 ERROR (MainThread) [custom_components.navien_water_heater.navien_api] AttributeError: ‘NoneType’ object has no attribute ‘get’

I tried to do basic troubleshooting, but sadly, I couldn’t get anywhere. This component fails upon after it attempts to get the channel number? I tried to change the channel from 1 to 2, and I tried a bunch of other stuff to no avail. Login and pass are correct, integration is able to pull my gateway name and all, so it is working partially.

Thanks for your help, it is truly appreciated! If there is anything I can do to help test, I am more than happy to assist in any way.