Tiemme 4Heat Stove WiFi Controller

When you cant get fourheat module with HA to work, somewhere above are comprehensive instructions how to connect NG21 with esp module.

I did look at my papers for my own stove and noticed that for NG21 board switching between pellet and wood in ESPHome would be like this

select:
  - id: combi
    name: Combi Management
    platform: fourheat
    datapoint: B20379
    options:
	  0: "Pellet"
      1: "Wood"
      2: "Wood-Pellet"
      3: "Combi 1"
	  4: "Combi 2"

There is very little chance that for you board, it could be the same so I would not get hopes too high. If not - your only remaining option is to learn communication sniffing.

wOow thx very much
Tomorrow I try it

Ho provato ma i sensori tutti non disponibili, mi puoi indicare su quale porta collegare il modulo e se hai link di tutto quello che serve per collegare la wemos? Grazie
Ho sempre una scheda ng21 e se puoi anche mandarmi la configurazione di esphome. Grazie

I tried but it doesn’t work

As I suspected it was a longshot, but when you are able to find out datapoint for your board it should go similarly.

Is anyone kind enough to rewrite the procedure for wemos on NG21? Thanks.

Your contact who gave you the NG21 datapoints, could he also give us the SY250/MB250 datapoints?

Your contact who gave you the NG21 datapoints, could he also give us the SY250/MB250 datapoints?

no :face_with_diagonal_mouth: :slightly_frowning_face:

:sob:
i sent emails and called ti emme. but no answer. can anyone find the datapoints?

I noticed that sometimes I don’t get any information from the logs. The log seems frozen until I restart the exp. Then I noticed some errors in the log in yellow

Good evening, I connected the module from rs232 to ttl all connected to rx and tx of a wemos d1 mini, I wrote the file in esp home it creates the sensors but they are all unknown, I can’t understand why the stove doesn’t communicate with me.
I have a tiemme ng21 card and I also installed the 4heat wifi module that works but even with your integration it doesn’t find any entity.
I hope someone of you can help me. Thanks.

Hi everyone!

First of all, I wanted to thank all the people in this thread who have made it possible to have an Open Source alternative to the Tiemme 4Heat device, especially @leoshusar for the ESPHome component and @maxgu for all the clarifications provided.

In my case, I have a pellet stove (air type, non-ducted) from the Ferlux brand, model Flora: Modelo Flora | Ferlux

I’m leaving here my yaml configuration for ESPHome in case it can be useful to someone with the same or similar models:

fourheat:

sensor:
  - id: exhaust_temperature
    name: Exhaust Temperature
    platform: fourheat
    datapoint: J30005
    device_class: temperature
    unit_of_measurement: °C
  
  - id: room_temperature
    name: Room Temperature
    platform: fourheat
    datapoint: J30006
    device_class: temperature
    unit_of_measurement: °C

  - id: air_flow
    name: Air Flow Pressure
    platform: fourheat
    datapoint: J30026
    device_class: pressure
    unit_of_measurement: Pa
  
  - id: combustion_fan_speed
    name: Combustion Fan Speed
    icon: "mdi:fan"
    platform: fourheat
    datapoint: J30025
    unit_of_measurement: rpm

  - id: auger_on
    name: Auger Speed
    platform: fourheat
    datapoint: J50010
    device_class: speed
    unit_of_measurement: s

  - id: ambient_fan_voltage
    name: Ambient Fan Voltage
    platform: fourheat
    datapoint: J30009
    device_class: voltage
    unit_of_measurement: V

  - id: exhaust_depression
    name: Exhaust Depression
    platform: fourheat
    datapoint: J30033
    device_class: pressure
    unit_of_measurement: Pa

text_sensor:
  - id: phase
    name: Phase
    icon: "mdi:chart-pie"
    platform: fourheat
    datapoint: J30001
    options:
      0: "Off"
      1: "Check Up"
      2: "Ignition 2"
      3: "Stabilization"
      4: "Ignition 4"
      5: "Run"
      6: "Modulation"
      7: "Extinguishing"
      8: "Safety"
      9: "Block"
      10: "Recover Ignition"
      11: "Standby"
      30: "Ignition 30"
      31: "Ignition 31"
      32: "Ignition 32"
      33: "Ignition 33"
      34: "Ignition 34"
  
  - id: error
    name: Error
    icon: "mdi:alert-circle"
    platform: fourheat
    datapoint: J30002
    options:
      0: "(None)"
      1: "Safety Thermostat HV1: signalled also in case of Stove OFF"
      2: "Safety PressureSwitch HV2: signalled with Combustion Fan ON"
      3: "Extinguishing for Exhausting Temperature lowering"
      4: "Extinguishing for water over Temperature"
      5: "Extinguishing for Exhausting over Temperature"
      6: "unknown"
      7: "Encoder Error: No Encoder Signal (in case of P25=1 or 2)"
      8: "Encoder Error: Combustion Fan regulation failed (in case of P25=1 or 2)"
      9: "Low pressure in to the Boiler"
      10: "High pressure in to the Boiler Error"
      11: "DAY and TIME not correct due to prolonged absence of Power Supply"
      12: "Failed Ignition"
      13: "Ignition"
      14: "Ignition"
      15: "Lack of Voltage Supply"
      16: "Ignition"
      17: "Ignition"
      18: "Lack of Voltage Supply"

  - id: combustion_status
    name: Combustion Status
    platform: fourheat
    datapoint: J30011
    icon: "mdi:heating-coil"
    options:
      1: "Power 1"
      2: "Power 2"
      3: "Power 3"
      4: "Power 4"
      5: "Power 5"
      6: "Cleaning"
      7: "Standby"
      8: "Ignition 2"
      9: "Modulation"
      10: "Ignition P0"
      11: "MAX P"
      12: "Extinguish"
      100: "Off"
      110: "Off"
      120: "Pmax Test"
      255: "Ignition"
      0: "Stabilizing"

binary_sensor:
  - id: controller_status
    name: Controller Status
    platform: fourheat
    type: module_offline

  - id: room_thermostat_status
    name: Room Thermostat Status
    platform: fourheat
    datapoint: J40007
    parser: return data[data.size() - 3] == '0';


switch:
  - id: status_switch
    name: Status
    platform: fourheat
    restore_mode: DISABLED
    datapoint: J30001
    on_datapoint: J30253
    off_datapoint: J30254
    on_data: '1'
    off_data: '1'
    parser: |-
      auto size = data.size();
      return
        data[size - 1] != '0' ||
        data[size - 2] != '0';

button:
  - id: clear_error
    name: Clear Error
    platform: fourheat
    datapoint: J30255

select:
  - id: target_power
    name: Target Power
    platform: fourheat
    datapoint: B20816
    options:
      1: "P1"
      2: "P2"
      3: "P3"
      4: "P4"
      5: "P5"
      6: "Auto"

number:
  - id: room_target_temperature
    name: Room Target Temperature
    platform: fourheat
    datapoint: B21700
    device_class: temperature
    unit_of_measurement: °C
    min_value: 15
    max_value: 29

climate:
  - platform: fourheat
    name: Heater
    datapoint: J30001
    on_datapoint: J30253
    off_datapoint: J30254
    on_data: '1'
    off_data: '1'
    parser: |-
      auto size = data.size();
      return
        data[size - 1] != '0' ||
        data[size - 2] != '0';
    current_temperature_datapoint: J30006
    current_temperature_parser: |-
      std::string int_str(data.begin(), data.end());
      return stoi(int_str);
    target_temperature_datapoint: B21700
    target_temperature_parser: |-
      std::string int_str(data.begin(), data.end());
      return stoi(int_str);
    visual:
      min_temperature: 15
      max_temperature: 29
      temperature_step: 1

Additionally, I’ve taken the opportunity to add a ToF distance sensor (VL53L0X Time Of Flight Distance Sensor — ESPHome) that allows me to know the state of the pellet hopper, allowing me to program alerts in Home Assistant that notify me when I need to refill the hopper. This is the yaml configuration of that part:

globals:
  # Set this to the minimun distance (in cm) from the sensor to the pellets when fully loaded
  - id: capacity_distance_min
    type: int
    initial_value: "0"
  # Set this to the maximun distance (in cm) from the sensor to the bottom of the hopper when empty
  - id: capacity_distance_max
    type: int
    initial_value: "38"

i2c:
  sda: GPIO21
  scl: GPIO22
  scan: True

sensor:
  - platform: vl53l0x
    name: Hopper Distance
    id: vl53l0x_distance
    timeout: 200us
    update_interval: 5s
    accuracy_decimals: 2
    filters:
      - round: 3
      - sliding_window_moving_average:
          window_size: 12
          send_every: 6
          send_first_at: 2
      - round: 2
  
  - platform: template
    name: Hopper Capacity
    device_class: battery
    unit_of_measurement: "%"
    update_interval: 30s
    lambda: |-
      int min = id(capacity_distance_min);
      int max = id(capacity_distance_max);
      if (id(vl53l0x_distance).state) {
        int distance = int(id(vl53l0x_distance).state * 100);
        if (distance > 1000) {
          // Wrong measurement
          return {};
        }
        if (distance < min) {
          distance = min;
        } else if (distance > max) {
          distance = max;
        }
        // Calculate capcity as a percentage
        return 100 - ((distance - min) * 100) / (max - min);
      } else {
        return {};
      }

As a finishing touch, I designed and 3D printed a custom enclosure to house all the components. It features two RJ-11 connectors: one for the stove and the other for the pellet sensor:

And this is the ToF sensor inside the hopper:

Following up on my previous message, I wanted to see if anyone could help me with a couple of issues:

  1. The LCD control panel on my stove isn’t working properly (I think humidity has damaged the circuit during the months it hasn’t been in use). The problem is that I had the stove scheduled to turn on in the morning and off at night at a certain time every weekday, and now that the panel is broken, I can’t deactivate it without replacing the component (which costs €80). Does anyone know if it’s possible to deactivate the scheduling using serial commands? I’ve re-read the thread several times but haven’t seen anyone mention how to do it.

  2. Another datapoint I can’t figure out is the speed of the fan that expels air from the front of the stove. I usually have it at level 4 (it supports 1 to 7) and because of the same LCD problem, I can’t change it either. Does anyone know what datapoint that is?

Thank you all!

@gregoriohc

Display from your link looks like a CP 115, the price is around 50 euros

From my post 211 in edit 7 where it talks about fogosur you can download the NG01 air board manual which I think your stove has, the password is 1357.

As you see depending on the setup (page 29) the fan works in a way or another.

From tpar it is very easy to do what you want but for that you must have the display although I think it could be done without the display, the important is to know what you want this fan to do, you want less noisy always, only in low power…

When you use +7 to -7 you are increasing or decreasing the speed in all powers, but if you want decrease them only in some powers I think that is not the way

I think deactivating the schedule is not possible by wifi, because it can be activated by display or by wifi, but if you activate it by display( your case) you cannot deactivate it by wifi

@maxgu yes, that’s the display. Thanks for the link! I don’t know why it was more expensive when I searched for it.

My stove has the SY100 (aka MB100), exactly the same as @jorgezazo. So I guess that manual doesn’t work for me.
The user manual for my stove is this one: https://ferlux.es/wp-content/uploads/2022/03/MANUAL-GAMA-CANALIZABLE-ferlux-espanol.pdf
If you see section 6.2, what I want to configure is 6.2.1 [rAir] and 6.2.4 [Cron]. Those are user options and are outside the technical menu (6.2.8 [tPAr]).
For [rAir], I guess I can try to read different datapoints until I see one with value 4 (my current setting).

Oh, well, that’s too bad. I guess I’ll have to end up buying a new display to deactivate it.

Thanks!

@gregoriohc

Your board is not the same that.@jorgezazo because .@jorgezazo is MB100/SYS100 Hydro board and yours is the MB100/SYS100 Air board.

They have the same hardware but different firmware.

In my post 229 edit 7 you can download Mb100 hydro Tiemme manual(.@jorgezazo)

Ferlux sometimes says it uses one board and it uses another, to know which board has, look where RJ11, RJ45 and display sockets are

Placa electronica

About the datapoints that allow you to increase or decrease rAir, Uent and pell from +7 to -7.

I think these could be

rAir B20908
Uent B20185
Pell B20189

Positive numbers 0-7 B209080000000000x x= 0,1,2…7
Negative numbers -1 to -7 B209080000000655ay a= 3 y=5 to-1, y=4 to -2…y=0 to -6,#### a=2 y =9 to -7
Same Uent pell

Tell me if they work on your board.Please

EDIT

The schedule that can be done with the 4Heat module and with the official Tiemme application has a particular behavior:

You can only schedule an activity if you choose weekly (every day) you cannot choose daily (only one day), on weekends here you can choose between all days except the weekend Saturday and Sunday or only Saturday and Sunday

4Heat schedule is not recorded on the board but in the cloud, so if the 4Heat module is disconnected the scheduled action does not happens, but if the 4Heat module is connected at the programmed interval time then the stove turns on

Tiemme says that you can schedule the stove with the display or with the app, but this is not true, since they work in a different way and can work at the same time.

For instance if, I schedule it with the display, on at 1 and off at 2, the schedule LED lights on the display and no widget on smartphone screen.

If I schedule it with the app, on at 3 and off at 4, on the smartphone the widget appears, but the schedule LED does not appear on the display.

What happens? the stove is put on at 1 and put off at 2, put on at 3 and put off at 4.
Are there datapoints that writes the schedule put on/off on the board? I don’t know