Control and monitor the state of Navien water heaters which are connected to the Navien cloud portal via a NaviLink or NaviLink Lite control system.
To install this integration, you can use HACS to perform the installation or you can do it manually. If you want to use HACS, you will first need to install the HACS integration which can be found at https://hacs.xyz/.
To install the integration with HACS:
- Navigate to HACS and add a custom repository
URL: https://github.com/nikshriv/hass_navien_water_heater Category: Integration - Install module as usual
- Restart Home Assistant
For manual installation:
- Install the File Editor add-on from the HA Addon Store.
- Use the File Editor to create a directory called custom_components in your /config directory
- Create another directory called navien_water_heater in the custom_components directory.
- Clone this repository
- Upload the entire content of the navien_water_heater directory from the repository into the navien_water_heater directory you created
- Restart Home Assistant
- Go to Device and Services under Settings in Home Assistant and add the Navien integration.
For water heaters with hot water recirculation functionality (e.g. A or A2) via dedicated External Loop or NaviCirc, you will also be able to directly control Hot Button functionality if a Hot Button PCB is also installed. This PCB is pre-installed on A2 models, but must be installed as an add-on kit for the older A models. Before purchasing this add-on kit, check your main PCB's model version (P20 or newer) IAW Step 2.2.4. The physical buttons do not need to be connected to gain hot button functionality through this integration. Check the NaviLink app to ensure everything is configured properly (Hot Button instead of Schedule options). If you install this integration without Hot Button functionality and later enable it, just Reload the integration to add the Recirculation switch entity. You will have a recirculation switch entity that can be manually controlled via dashboard, voice commands, and/or automation!
The preheat/recirculation settings (i.e. parameters) are inconsistently named between the A and A2 models. They can also be misleading (e.g. interval time is duration, but sample time is the interval time). This table should help you decode these settings to more effectively configure and troubleshoot your water heater. Since the Hot Button function is not standard on A models, better descriptions of these parameters can be found under Step 7.5.1.2 on pg 99 and Category 4 of Step 7.5.1.3 on pg 102 of the A2 installation manual:
A (See Note 1) | A2 | Description | Notes |
---|---|---|---|
Preheat Pump Output Time (P.12) | Recirc Interval Time | Recirculation Duration | See Note 2. Hot Button 5 mins |
Preheat Interval Time (P.14) | Recirc Sample Time | Recirculation Interval | Hot Button N/A (not mentioned in manuals) |
Preheat Off Offset Temp (P.15) | Recirc off Diff. Temp | Recirculation Off Delta | See Note 2. Hot Button --- |
On-demand Pipe Target Length (P.16) | Fixture Distance | Recirculation Off without External Temp Sensor | See Note 3 |
- For the A model, set IAW Step 6.5 on pgs 65-68 of the A installation manual.
- There are DIP switches on the Hot Button PCB (see pg 34 of the A2 installation manual). Some users find they must set DIP switch 2 to ON for the recirculation function to heat to the setpoint. This setting changes the behavior of both of these settings as described on pg 102 of the A2 installation manual.
- If recirculation does not stay on long enough after Hot Button activation, try increasing to a much higher pipe length.
Here is an example of a card that can be used to monitor and control a water heater including recirculation. It uses the following custom cards:
Code
- type: custom:stack-in-card
mode: vertical
cards:
- type: custom:stack-in-card
mode: horizontal
cards:
- type: tile
entity: water_heater.house
features:
- type: target-temperature
tap_action:
action: toggle
icon_tap_action:
action: toggle
- type: custom:mushroom-entity-card
entity: switch.water_heater_recirculation
icon_color: lime
name: Recirculation
layout: vertical
card_mod:
style: |
mushroom-shape-icon {
{% if states('switch.water_heater_recirculation') == 'on' %}
--shape-animation: spin 1.5s linear infinite;
{% else %}
{% endif %}
}
tap_action:
action: call-service
service: switch.turn_on
target:
entity_id: switch.water_heater_recirculation
icon_tap_action:
action: call-service
service: switch.turn_on
target:
entity_id: switch.water_heater_recirculation
- type: custom:stack-in-card
mode: vertical
cards:
- type: custom:apexcharts-card
graph_span: 3h
header:
show: true
title: Water Heater
yaxis:
- id: Temperature
opposite: true
decimals: 0
min: 70
max: 140
apex_config:
tickAmount: 7
title:
text: Temperature
style:
color: blue
- id: Flow Rate
opposite: true
decimals: 0
min: 0
max: 4
apex_config:
tickAmount: 4
title:
text: Flow Rate
style:
color: green
apex_config:
labels:
useSeriesColors: true
chart:
height: 300px
annotations:
position: front
yaxis:
- y: 114 # Adjust this...
y2: 116 # ...and this according to your water heater's setpoint. If anyone can make this automatically update, please share ;-)
strokeDashArray: 0
borderColor: 'red'
borderWidth: 0
fillColor: 'red'
opacity: 0.1
offsetX: 0
offsetY: -3
width: '100%'
yAxisIndex: 0
label:
text: 'Setpoint'
borderColor: '#c2c2c2'
borderWidth: 1
borderRadius: 2
textAnchor: 'start'
position: 'left'
offsetX: 0
offsetY: 0
style:
background: 'red'
color: '#c2c2c2'
fontSize: '12px'
fontWeight: 400
padding:
left: 5
right: 5
top: 0
bottom: 0
series:
- entity: switch.water_heater_power
name: Power
yaxis_id: Temperature
type: area
curve: stepline
extend_to: now
color: green
stroke_width: 0
opacity: 0.25
transform: 'return x === ''on'' ? 72 : 70;'
show:
in_header: false
legend_value: false
- entity: sensor.water_heater_flow_rate
name: Flow Rate
yaxis_id: Flow Rate
color: green
stroke_width: 1
curve: stepline
- entity: switch.water_heater_recirculation
name: Recirculation
yaxis_id: Temperature
type: area
curve: stepline
extend_to: now
color: lime
stroke_width: 0
opacity: 1.00
transform: 'return x === ''on'' ? 74 : 70;'
show:
in_header: false
legend_value: false
- entity: sensor.water_heater_inlet_temperature
name: Inlet
yaxis_id: Temperature
color: lightblue
stroke_width: 2
curve: straight
- entity: sensor.water_heater_outlet_temperature
name: Outlet
yaxis_id: Temperature
color: red
stroke_width: 2
curve: straight
A simple automation that will run recirculation at the top and bottom of each hour from 5 AM to 10 PM.
alias: Water Heater Recirculation
description: "Water heater recirculation at the top and bottom of each hour from 5 AM to 10 PM."
trigger:
- platform: time_pattern
minutes: "0"
- platform: time_pattern
minutes: "30"
condition:
- condition: time
after: "04:55:00"
before: "22:05:00"
enabled: true
action:
- service: switch.turn_on
target:
entity_id: switch.water_heater_recirculation
mode: single