New electric water heater / boiler (integrated with HA)

Looks like the setup process :slight_smile: should be no harm in completing it? Its not in any language I can read.

Hmm, then this data should also be locally available :slight_smile: just need to find the right URL



No, this is not the setup, but the local control. The setup is completed 5 or 6 yrs ago :slight_smile: , can’t rememeber when I`ve get the boiler, I think it was 2018 or earlier.

Ah oke, And if you look on the inspect page there while you click around there is no secret json that contains the KWH ?

No, there is no word about power or else, just passwords etc :frowning:

have a look here:

he is using:
value_template: "{{ ((states('sensor.boiler_power') | float / 3600000) * 2400) | round(2) }}

with the sum

1 Like

I will try this, maybe @Jjesper have the same FW as mine. I had to restart mine also every few weeks, and sometimes days.
Thanks

1 Like

I was looking into integrating vacation mode into HA for the boiler:

(This is WIP and not working, still also needs a trigger when you press a button)

Notes:

# 1 december 2021 till 20:00 set to 70 This is day number 3 of the week sunday = 0 monday = 1..
http://192.168.2.254/setVacation?_=1634990969916&vYear=21&vMonth=12&vMDay=1&vWDay=3&vHour=20&vTemp=70

Code so far:

rest_command:
  tsvaca:
    #set tesy vacation
    url: "http://192.168.2.254/setVacation?_=1634990836894&vYear={{ vYear }}&vMonth={{ vMonth }}&vMDay={{ vMDay }}&vWDay={{ vWDay }}&vHour={{ vYear }}&vTemp={{ vTemp }}"
    method: get
rest:
  - authentication: basic
    scan_interval: 600
    resource: "http://192.168.2.254/getVacation?_=1634911711432"
    sensor:
      - name: Tesy Vacation status
        icon: "mdi:water-boiler"
        unique_id: "tesy_water_vacation_status"
        value_template: "OK"
        json_attributes:
          - "vYear"
          - "vMonth"
          - "vMDay"
          - "vWDay"
          - "vHour"
          - "vTemp"
          - "vSet"

input_number:
  # This is the imput for a manual temp change.
  tesyboilerVacationBackTemp:
    name: Set Tesy vacation back temp
    min: 14
    max: 75
    step: 1
    unit_of_measurement: "°C"
    icon: mdi:temperature-celsius
  tesyboilervYear:
    # 21 would be 2021
    name: Set Tesy vacation back vYear
    min: 23
    max: 50
    step: 1
  tesyboilervMonth:
    # Number of the month
    name: Set Tesy vacation back vMonth
    min: 1
    max: 12
    step: 1
  tesyboilervWDay:
    # Number of the day sunday = 0 (this is sad as by default monday is 0 in HA)
    name: Set Tesy vacation back vWDay
    min: 0
    max: 6
    step: 1
  tesyboilervWMDay:
    # Actual date number 
    name: Set Tesy vacation back vWMDay
    min: 1
    max: 31
    step: 1
  tesyboilervHour:
    # Actual hour
    name: Hours military style
    min: 00
    max: 23
    step: 1

The idea is to get the input numbers on a card, and a “set” button, Getting the day number by default its
0 being Monday and 6 being Sunday in HA, which sucks as the boiler wants something else :frowning:

Perhaps something to automate the calculation would be nice so you only actually have to set a date with a date picker ?

Any way input / ideas welcome :slight_smile:

Thanks! I changed this. I wasn’t using the switch actually but left it in there in case I want to use it in the future.

### TESY CONFIGURATION ###
rest:
  - authentication: basic
    scan_interval: 300
    resource: http://192.168.2.36/api?name=_all
    sensor:
      - name: "Tesy Water Heater"
        icon: mdi:water-boiler
        unique_id: "TesyWaterHeater"
        value_template: "OK"
        json_attributes:
          - "prfl"
          - "tmpT"
          - "tmpR"
          - "tmpC"
          - "bst"
          - "pwr"
          - "err"
          - "mode"
          - "ht"

template:
  - sensor:
      - name: "Tesy Mode"
        icon: mdi:calendar
        unique_id: "TesyMode"
        state: "{{ state_attr('sensor.tesy_water_heater', 'mode') }}"
  - sensor:
      - name: "Tesy Error"
        icon: mdi:water-boiler-alert
        unique_id: "TesyError"
        state: "{{ state_attr('sensor.tesy_water_heater', 'err') }}"
  - sensor:
      - name: "Tesy Boost Status"
        icon: mdi:lightning-bolt
        unique_id: "TesyBoostStatus"
        state: "{{ state_attr('sensor.tesy_water_heater', 'bst') }}"
  - sensor:
      - name: "Tesy Power Status"
        icon: mdi:power
        unique_id: "TesyPowerStatus"
        state: "{{ state_attr('sensor.tesy_water_heater', 'pwr') }}"
  - sensor:
      - name: "Tesy Target Temperature"
        icon: mdi:shower-head
        unique_id: "TesyTargetTemperature"
        state: "{{ state_attr('sensor.tesy_water_heater', 'tmpT') }}"
        unit_of_measurement: "Shower"
  - sensor:
      - name: "Tesy Current Temperature"
        icon: mdi:shower-head
        unique_id: "TesyCurrentTemperature"
        state: "{{ state_attr('sensor.tesy_water_heater', 'tmpC') }}"
        unit_of_measurement: "Shower"
  - sensor:
      - name: "Tesy Refferent Temperature"
        icon: mdi:shower-head
        unique_id: "TesyRefferentTemperature"
        state: "{{ state_attr('sensor.tesy_water_heater', 'tmpR') }}"
        unit_of_measurement: "Shower"
  - sensor:
      - name: "Tesy Heating"
        icon: mdi:heat-wave
        unique_id: "TesyHeating"
        state: "{{ state_attr('sensor.tesy_water_heater', 'ht') }}"
  
command_line:
  - switch:
        name: tesyboostonoff
        unique_id: tesy_boost_on_off
        command_on: "/usr/bin/curl -X GET 'http://192.168.2.36/api?name=bst&set=1'"
        command_off: "/usr/bin/curl -X GET 'http://192.168.2.36/api?name=bst&set=0'"
        command_state: "/usr/bin/curl -sX GET 'http://192.168.2.36/api?name=_all'"
        value_template: "{{ value_json['bst'] == '1' }}"
        icon: >
          {% if value_json['bst'] == '0' %} mdi:rocket
          {% elif value_json['bst'] == '1' %} mdi:rocket-launch
          {% else %} mdi:help-circle
          {% endif %}
  - switch:
        name: tesyonoff
        unique_id: tesy_on_off
        command_on: "/usr/bin/curl -X GET 'http://192.168.2.36/api?name=pwr&set=1'"
        command_off: "/usr/bin/curl -X GET 'http://192.168.2.36/api?name=pwr&set=0'"
        command_state: "/usr/bin/curl -sX GET 'http://192.168.2.36/api?name=_all'"
        value_template: "{{ value_json['pwr'] == '1' }}"
        icon: >
          {% if value_json['pwr'] == "1" %} mdi:toggle-switch
          {% else %} mdi:toggle-switch-off
          {% endif %}

### TESY CONFIGURATION END ###
1 Like

Good, glad you got it to work

Have you solved this issue? I got it too…
Because I don’t keep my Water Boiler connected to the electricity 24/7, I get errors when the rest sensor is trying to connect with the boiler… I have added a scan_interval: 1576800000 and I made an automation which will only update the entity if the boiler it is on, but does not care, he will still scan it. I don’t understand how and why…

Anyone got this issue till now, with the rest integration?

Hello everyone,

I created an integration for heaters that expose local “/api” interface (I have one of those). One caveat is that it does not support operation modes (besides off/manual) because I don’t use those but otherwise works and exposes heater and its features.

2 Likes

Thank you! very nice integration! for now I only miss the enable boost function.

Since update 2023.12 we need to change the command_line script in the configuration.yaml. (see the patch nodes)

I’ve updated the script earlier shared in this topic to the new format. If you see some errors please let me know and I hope someone can use this.

Don’t forget to change [IP Tesy Boiler]

command_line:
  - switch:
      name: Tesy Boost on/off
      command_on: curl -X GET "http://[IP Tesy Boiler]/api?name=bst&set=1"
      command_off: curl -X GET "http://[IP Tesy Boiler]/api?name=bst&set=0"
      command_state: curl -sX GET http://[IP Tesy Boiler]/api?name=_all
      value_template: "{{ value_json['bst'] == '1' }}"
      icon: >
        {% if value_json['bst'] == '0' %} mdi:rocket
        {% elif value_json['bst'] == '1' %} mdi:rocket-launch
        {% else %} mdi:help-circle
        {% endif %}
  - switch:
      name: Tesy Power on/off
      command_on: curl -X GET "http://[IP Tesy Boiler]/api?name=pwr&set=1"
      command_off: curl -X GET "http://[IP Tesy Boiler]/api?name=pwr&set=0"
      command_state: curl -sX GET http://[IP Tesy Boiler]/api?name=_all
      value_template: "{{ value_json['pwr'] == '1' }}"
      icon: >
        {% if value_json['pwr'] == '0' %} mdi:toggle-switch
        {% elif value_json['pwr'] == '1' %} mdi:toggle-switch-off
        {% endif %}

Nice! Feel free to open up a PR in my repo to add boost support - I’ll be happy to review, merge, release.

Hello all,

For everyone having the new water heaters with esp32 based PCB(black board, responds with “IoT” on get request to “/”). Feel free to check out my fork of @krasnoukhov extenstion.

I made it work with all waterheaters. All modes and boost are implemented as well as energy monitoring. Automatically identifyes the device model.

1 Like

Nice work, do you plan to create a PR or are you going to maintain your own fork?

hmm, yes, but euhm, where is the esp32 build to flash if I have to replace the pcb? Or do you mean “after you replaced the old board with a new one from Tesy you can use this”?

Seems i have the newer one:
image

Works fine, thanks for that.

Hi,

I have a Tesy ModEco water heater in my summerhouse I just bought. I have not yet connected it to the cloud.

If I want to use these integrations to connect the heater to HA what is the procedure?

  1. Connect to ModEco cloud, according to manufactors instructions.
  2. Install and configure the HA integration to connect to the water heater.
    → Done?

I was wondering (and I guess I know the answer) but will ask to be sure: do any of these Tesy models allow to modulate the power use? Or are they just turning on or off the heating element with a relay?

Use-case I’m trying to build looks like what is discussed here: DIY Boiler Solar Energy Storage

Only: I have limited space so the ideal scenario of buying a cheap ‘dumb’ boiler and adding the controls on it will most likely not work, the classic boilers are too big in diameter. Tesy has a range that is only 28cm deep which would work, but they’re all “smart”, and that means sticking the dimmer in front of them will not work, unless I rewire the whole thing and skip their own hardware entirely.

So, long story short: would be great if Tesy boilers can adapt how much energy is put in the tank :smiley:

You could probably rewire the heaters to your own controls?

I have a Thermex horizontal boiler with two tanks, with 3 different settings, 700, 1300 and 2000W, I switch now between these modes. This boiler has removable side-covers so I think the wiring is accessible. In the future I might rewire mine…