Chat freely about anything...

User avatar
By Dachshund Digital
#92075 Connect ESP8266 or ESP32 to Navien Tankless Hot Water Unit?

As I understand the Navien "Hot Button" interface, see link to PDF below, is pretty straight forward. CON1 or Signal 1 connection block has 4 contacts, 12v, Signal, GND, and 5v.

I believe I can connect a ESP unit to the 5v and GND to ESP, then GPIO pin direct to the "signal 1" contacts. Not worried about opt-isolation of ESP in this case if I use the 5v and GND from "signal 1" contacts. But I will need to confirm the 5v is stable enough for the ESP of course.

My thinking is the hot button unit seems to be designed to accept high state (not 0v) signal for "Signal 1" interface. It can also use a simple switch ("signal 2") or sensor ("signal 3") control signal. PDF implies the "signal 1" interface is just a simple v0 off, non-0v on circuit. Did I miss something?

If using "Signal 1" approach, just have to program the ESP unit as needed to control the GPIO pin state. Thinking I can write the C code myself (done such before), or just use a canned firmware image like Tasmota or ESPhome. I already have a Node Red instance, and MQTT broker in my environment, so would be straight-forward to use MQTT and Node Red for controlling/communicating with the ESP unit.

Of course, I could just connect the ESP to a relay or Mofset breakout board, use the USB power on ESP, and then the relay/mofset would control the open/close of the "signal 2" contacts on the hot button interface.

Link to Navien Hot Button Kit Documentation...
https://www.navieninc.com/app/W1siZiIsIjIwMTgvMDQvMDUvMjAvNDIvNDYvMjQ3YzM3YWItODQ0ZS00NTczLTgwZGYtZWYyMDM5YjdmNDk5L0hvdEJ1dHRvbiBJbnN0YWxsYXRpb24gSW5zdHJ1Y3Rpb25zLnBkZiJdXQ/HotButton%20Installation%20Instructions.pdf?sha=df7e0fa958da1bc9
https://www.navieninc.com/app/W1siZiIsIjIwMTgvMDQvMDUvMjAvMDAvMzEvODg0OWNlMjktM2FjYy00NzUxLTg3NGQtNDVhMDNlM2MzOTM4L1NwZWMgU2hlZXQtSG90QnV0dG9uIEtpdC5wZGYiXV0/Spec%20Sheet-HotButton%20Kit.pdf?sha=250fe62529c98e9d
User avatar
By PK_
#95220 Not sure if you have gotten this to work already, but I did exactly what you mentioned back in 2020 with ESPHome.

Pic: D4 for the signal. https://imgur.com/a/0F7AUOA

Here is the ESPHome snippet which exposes a switch that remains on for 15 mins (so that you can tell that it has recently been activated).

Code: Select allsubstitutions:
  device_name: hot_water_recirculation_2
  friendly_name: Hot Water Recirculation

esphome:
  name: "${device_name}"
  platform: ESP8266
  board: d1_mini_pro

<<: !include components/wifi_dynamic.yaml
<<: !include components/captive_portal.yaml
<<: !include components/logger.yaml
<<: !include components/api.yaml
<<: !include components/ota.yaml
<<: !include components/time.yaml

globals:
  - id: last_activated
    type: int
    restore_value: no
    initial_value: '0'

# D1 Mini Pro
# D4: active low
output:
  - platform: gpio
    id: hot_button_output
    pin: D4
    inverted: True

switch:
  - platform: template
    id: hot_water
    name: ${friendly_name}
    lambda: |-
      auto time = id(homeassistant_time).utcnow();
      // Reset state in x seconds
      return time.is_valid() && id(last_activated) != 0 && (time.timestamp - id(last_activated)) < 15*60;
    turn_on_action:
      then:
        - if:
            condition:
              lambda: 'return !id(hot_water).state;'
            then:
              - lambda: |-
                  auto time = id(homeassistant_time).utcnow();
                  if (time.is_valid()) {
                    id(last_activated) = time.timestamp;
                  }
              - output.turn_on: hot_button_output
              - delay: 500ms
              - output.turn_off: hot_button_output
              - delay: 500ms
              - output.turn_on: hot_button_output
              - delay: 500ms
              - output.turn_off: hot_button_output
    turn_off_action:
      - lambda: 'id(last_activated) = 0;'