Wanted: Replacement for electric floor heating control

Hello Home Assistant Community!

I’m new to Home Assistant in ESPHome, having installed both only a couple of days ago. So I do not really know my way around both project and their communities, yet. Hence, I’m not 100% sure which category or tags to choose for this topic.

I bought a house that came with an electric floor heating mat in the bathroom. The control unit is a Halmburger FHK-50-Plus. It consists of a temperature controller with a NTC floor sensor, a LCD display. The controller allows to program switch times and temperatures. This is the installation manual and datasheet (German only, I’m afraid).

image

After installing a photovoltaics system to the House I find the time-based controller logic of the floor heater to be too inflexible on its own and would like to amend the trigger with the information about the PV power surplus: The heater shall run if there is more power available as there is currently used in the house. I have my PV inverter and smartmeter integrated with Home Assistant already so all the information regarding available power surplus is already there.

Now I am looking for a (ESP or PicoW-based) solution to replace the FHK-50, that would allow me

  • to read out the current temperatur from the NTC temperature sensor
  • set the target temperature
  • read out the current state of the relay
  • have enough logic in the controller to switch power to the heating mat based on a comparison between desired temperature and target temperature
  • reusing the existing 230V wiring to the controller (L/N/PE)

Replacing the NTC with some other means of temperature measurement is out of the question as the sensor is cast in the bathroom floor beneath the tiles (and measuring air temperature instead has too much delay). Luckily, the NTC resistance at various temperatures is given in the datasheet (see image above), so I guess I could calibrate an ESPHome ntc sensor with that.

With Home Assistant I could then increase/decrease the target temperature based on PV power and/or daytime.

My questions are:

  1. Are you awarre of any commercial products on the market that could serve as a replacement for the existing controllers? Does not necessarily need to be ESPHome-based as long as it can be integrated with Home Assistant. Ideally such product would be flush-mounted (“Unterputzdose”), but that’s not a hard requirement. I wasn’t able to find anything on devices.esphome.io, but I may have missed something? For example, I’d happily use a Shelly/Sonoff/Tasmota device if it could read the 2.5kOhm NTC.

  2. I found ESP8266 230V I/O Modul – LUANI but would that support reading out the NTC?

  3. Would I be to string something up with ESPHome NTC Sensor and switch output components as well as an optocoupler relay, wouldn’t I? Is ESPHome powerful enough to implement something like that? (I might be able to construct and 3D-print housing that could integrate with the existing flush-mounting socket, I guess). I would probably need some sort of 230V-based power supply for a NodeMCU or something…

Thanks,
Fabian

Hi Fabian,

regarding 2.: Yes, ESP8266 230V I/O Modul – LUANI, supports reading NTCs at the ADC Pin. Trying to solve the same problem with an old AEG underfloor heating with an Eberle thermostat and playing around right now with the module running ESPHome. So far I have been able to read NTC, switch the O1 relay (150W max), and configure the module as a generic_thermostat in HASS.

Best,
Karsten

Thanks @vLausitzOelpen, that’s good to know. You wouldn’t happen to know any source for purchasing pre-assembled modules of that type, would you?

On second thought it seems that the Luani module is not applicable for my use case because the heater draws a power higher than the 150W supplied by the O1/O2 pins.

Well, back to researching alternatives, then…

Over the weekend I built a prototype solution, which works quite well. As far as I understand, the voltage divider resistor should have a similar resistance as the NTC at 25 degrees, so I went with 2kOhm here (two 1kOhm resistors in series, actually).

Next steps are to include a display and some manual controls. For a high WAF, I’m looking at M5Stack CoreInk or M5Stack Core 2 which will be mounted in front of the existing flush-mount box.

esphome:
  name: floorheater
  friendly_name: floorheater

esp32:
  board: nodemcu-32s
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: <herebedragonsandsecrets>

ota:
  password: <herebedragonsandsecrets>

wifi:
  ssid: <herebedragonsandsecrets>
  password: <herebedragonsandsecrets>
  manual_ip:
    static_ip: 192.168.xxx.yyy
    gateway: 192.168.xxx.1
    subnet: 255.255.255.0
    dns1: 192.168.xxx.1
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Floorheater Fallback Hotspot"
    password: <herebedragonsandsecrets>

captive_portal:


web_server:
  port: 80
    
sensor:
  - platform: uptime
    name: Uptime Sensor

  - platform: wifi_signal
    name: "WiFi Signal Sensor"

  - platform: ntc
    sensor: resistance_sensor
    id: floor_temperature
    # from datasheet https://www.halmburger.eu/download/Anleitung_Fussbodenheizungsregler_FHK-50-PLUS_deutsch.pdf
    # additional value from datasheet
    # - 1.15kOhm -> 40°C
    # - 2.43kOhm -> 20°C
    calibration:
      - 3.66kOhm -> 10°C
      - 1.66kOhm -> 30°C
      - 0.82kOhm -> 50°C
    name: Floor Temperature

  # Example source sensors:
  - platform: resistance
    id: resistance_sensor
    sensor: source_sensor
    configuration: DOWNSTREAM
    resistor: 2kOhm
    name: Resistance Sensor

  - platform: adc
    id: source_sensor
    pin: A0
    update_interval: never
    name: ADC Value
    attenuation: 11db

switch:
  - platform: gpio
    pin: GPIO2
    id: ntc_vcc
  - platform: gpio
    pin: 
      number: GPIO26
      inverted: true
    name: "Relay"
    id: relay_floorheater

interval:
  - interval: 60s
    then:
      - switch.turn_on: ntc_vcc
      - component.update: source_sensor
      - switch.turn_off: ntc_vcc

climate:
  - platform: thermostat
    name: "Bodenheizung"
    sensor: floor_temperature
    min_heating_off_time: 30s
    min_heating_run_time: 30s
    min_idle_time: 30s
    visual:
      min_temperature: 20
      max_temperature: 35
      temperature_step: 
        target_temperature: 1.0
        current_temperature: 0.1
    heat_action:
      - switch.turn_on: relay_floorheater
    idle_action:
      - switch.turn_off: relay_floorheater
    default_preset: Home
    preset:
      - name: Home
        default_target_temperature_low: 25 °C
1 Like

Well, starting from the breadboard and a USB power supply, I got myself familiar with KiCAD to a certain degree and strung up a schematic and PCB layout for a combination of

  • 5V power supply,
  • relay,
  • NTC voltage divider circuit

that I can actually put in the concealed mounting box with a 3D printed housing, with a M5Stack CoreInk as high-WAF userinterface.




I laid out the voltage divider resistore (R1) as a through-hole component so I can easily adapt to the various NTC thermistors that are embedded in my house (I have at least one 2K and one 15K NTC in the cast plaster floors of two different rooms.

Currently I have a hand-soldered protoyping board mounted to the wall, powered by a small RECOM 5V power supply behind it:


Assembled PCBs are ordered. I am going to share a photo of the finished installation.

Oh, and there is an idea revision 2 for vertical mounting, but I came up with that only after paying for the PCB manufacturing and assembly of rev1 so I am most likely not going to implement rev2 at my home unless I have to.

image