Bringing a 20-year-old heating control system into the future with EQSP32 and Home Assistant.
Upgrading legacy home infrastructure often presents a trade-off between preserving functional hardware and gaining the benefits of modern automation. In this project, a 450 m² home with a fully functional but outdated heating control system was brought into the digital era using the EQSP32 Industrial IoT controller and Home Assistant, a powerful open-source automation platform.
While this article describes an upgrade situation, the solution presented would perform equally well in a new installation.
Heating control panel before and after EQSP32 retrofit
Why Home Assistant?
Home Assistant is a local, open-source home automation platform designed for reliability, flexibility, and privacy. It supports thousands of devices and integrations, offers advanced automations, and is entirely user-configurable. One of its greatest strengths is its ability to interface with MQTT, the lightweight messaging protocol ideal for low-power or embedded devices like the EQSP32.
However, Home Assistant requires a server to run. In this project, the server is a Raspberry Pi, equipped with a small DC UPS (uninterruptible power supply) to ensure continuous uptime even during power flickers. This small, inexpensive setup acts as the central hub for scheduling, dashboards, remote access, and historical logging.
For industrial-grade control with the convenience of a modern user interface, Home Assistant is a perfect match—especially when paired with a controller like the EQSP32, which handles all critical logic locally but reports state and listens to commands through MQTT.
A House with Good Bones and Bad Brains
Hydronic in-floor heating water circuit with multiple zones and heat pump buffer
The home in question had a robust heating setup:
Five underfloor heating zones, each with a motorized valve.
Three circulation pumps, driving hot water from a 10 kW heat pump.
A hot water tank, integrated into the same heating circuit.
Motorized valve controlling an individual heating zone
However, all control was handled by an aging mechanical relay box with basic timers and wall thermostats. There was no internet access, no way to log temperatures or detect faults, and no remote control.
Rather than rip out functioning components, the retrofit focused on replacing the control logic. The chosen replacement: an EQSP32 MicroPLC.
A DIN-Mount MicroPLC Built for the Smart Home
The EQSP32 brought several key advantages:
16 I/O pins, individually configurable for digital inputs, analog sensors, PWM outputs, relays, and more.
Native Wi-Fi and MQTT support, configured through the EQConnect mobile app.
Full integration with Home Assistant, with automatic entity discovery.
Fail-safe local logic, ensuring the system operates safely even if Wi-Fi or Home Assistant is unavailable.
The EQSP32 was mounted on a DIN rail, replacing the original relay box without disrupting the rest of the heating system.
Electrical wiring diagram for EQSP32-based heating control
Each heating zone uses a motorized valve, and each valve includes a built-in limit switch that closes when the valve is fully open. The valve’s motors are activated by relay driven by the EQSP32 outputs.
For reading the “valve open” switches, rather than using special 220 V input circuitry, the EQSP32 cleverly uses a relay coil as a sensing device. When the valve’s internal switch closes, the 220 V signal energizes the relay coil, and the EQSP32 reads the corresponding contact change. This avoids the need for external sensors or opto-isolators while maintaining electrical isolation.
Power Efficiency: Built-In Relay Derating
Driving many relays continuously can lead to significant heat and power consumption. The EQSP32 addresses this with a PWM derating feature in RELAY mode:
On activation, the relay pin drives full PWM power (100% duty cycle).
After a short delay (typically 1500 ms), it automatically drops to a holding power level (e.g., 35%).
This strategy cuts power usage across multiple relays and keeps the control panel cooler—an important factor when fitting high-density hardware into a compact enclosure.
Local Safety Logic + Remote Visibility
In this system, the EQSP32 runs a hybrid logic model:
All safety-critical decisions—such as valve timeout, pump interlock, and sensor failure handling—run locally.
Home Assistant acts as the UI layer, providing user control, thermostat switching, scheduling, and history tracking.
This architecture means the heating system remains safe and operational even if:
The Raspberry Pi running Home Assistant crashes.
The Wi-Fi network goes offline.
A sensor stops responding.
The controller monitors each Wi-Fi temperature sensor for regular heartbeat messages. If one fails, the corresponding heating zone is automatically disabled for safety.
MQTT on EQSP32: As Easy as 1, 2, 3
MQTT is the backbone of Home Assistant’s device communication. It’s a lightweight messaging protocol designed for fast, efficient updates—ideal for real-time IoT devices. Home Assistant uses it to discover devices, send commands, and receive sensor data in real-time.
The EQSP32 handles MQTT natively—no external libraries, no manual broker connections, and no need to define topics or retain flags. Once the MQTT settings are configured via the EQConnect mobile app, the EQSP32:
Connects to the broker automatically
Registers itself with Home Assistant using MQTT Discovery
Begins publishing sensor data and listening for control commands—all behind the scenes
A relay is fully declared and immediately visible to Home Assisant by simply inserting this line of code in the setup() function: createControl_Switch("Pump Zone A", "mdi:pump"); // Create switch in HA with icon
Update the state of the relay during the runtime is done with this this simple line: updateControl_Switch("Pump Zone A", true); // Report relay ON
With these two steps, the relay appears as a switch in Home Assistant, complete with a toggle button, state feedback, and support for automations and dashboards.
You can also update the switch state manually from the EQSP32 using: updateControl_Switch("Pump Zone A", true); // Report relay ON
This makes the EQSP32 one of the easiest microcontrollers to integrate with Home Assistant—ideal for both personal and industrial projects.
The Home Assistant Dashboard Experience
Home Assistant dashboard for multi-zone heating control
The user interface was built entirely within Home Assistant. Each zone features:
A Simple Thermostat card, showing:
The current temperature.
The target setpoint.
Heating status (on/off).
Zone state indicators, using custom buttons.
A summary of heat pump and hot water system status.
Heartbeat indicators for each wireless sensor.
The Simple Thermostat card is ideal for this kind of project. It provides a clean, minimal control surface that works across mobile and desktop. Users can adjust the target temperature, and the card will automatically show when heating is active. Home Assistant compares the actual vs. setpoint temperatures and sends ON/OFF commands to the EQSP32 as needed.
Seeing the Past: Graphing Thermostat History
Each thermostat card includes a history graph that shows:
The setpoint over time.
The actual temperature.
The on/off state of the zone.
This visualization helps diagnose slow-responding zones, stuck valves, or overshooting behaviors. In one instance, it revealed that a zone was underheating due to a sticky valve actuator, which could have gone unnoticed without this data. The graphs are generated automatically by Home Assistant’s built-in recorder and displayed in the Home Assistant dashboard—no extra coding or configuration required.
Temperature history and heating activity for a single zone
Final Result: Robust, Visible, Controllable
The final system is a powerful blend of industrial-grade reliability and consumer-friendly control:
All logic runs autonomously on the EQSP32.
Home Assistant provides intuitive scheduling and monitoring.
Users can adjust temperatures from their phone, anywhere in the world.
Every zone is visible in real-time and recorded for later review.
The retrofit proves that old infrastructure doesn’t mean obsolete control. With the right tools, like the EQSP32 and Home Assistant, even a 20-year-old heating system can be brought fully into the modern age—safely, efficiently, and elegantly.
Application noteJanuary 2026HVAC · Building automation
Retrofitting a Multi-Zone Hydronic Heating System with a DIN-Mount Micro-PLC
How the EQSP32 replaced a legacy relay panel in a 450 m² building, with full remote visibility and no compromise on safety.
The Control Problem
Upgrading aging building automation rarely means replacing everything. In this project, a 450 m² residential building had a fully functional hydronic heating system: five underfloor zones, three circulation pumps, a heat pump, and a buffer tank, all wired to a relay box with mechanical timers and wall thermostats.
The hardware was sound. The control logic was not: no fault detection, no temperature logging, no remote access, and no way to know whether a zone valve had actually opened.
The brief was to replace the control logic without touching the field wiring. The chosen controller: the EQSP32 micro-PLC, DIN-rail mounted in the existing panel.
The original relay box (left) and the retrofitted panel with the EQSP32 on DIN rail (right). Field wiring was unchanged.
I/O Inventory
Before writing a line of logic, the I/O requirements were mapped the same way you would for any PLC project:
The hydronic circuit: five underfloor zones, three circulation pumps, a 10 kW heat pump, and a buffer tank. Each zone is isolated by a motorized valve.
Field device
Signal type
EQSP32 port mode
Zone valve motors (×5)
Discrete output, 230 V via relay
Relay output
Valve open switches (×5)
Discrete input (230 V isolated)
Relay coil as sensor*
Circulation pumps (×3)
Discrete output, 230 V via relay
Relay output
Zone temperature sensors
Wireless (Wi-Fi / MQTT)
Virtual input
Heat pump enable
Discrete output
Relay output
* Relay coil sensing: Rather than adding opto-isolators for the 230 V open switch signals, the EQSP32 uses a relay coil as the sensing element. When the valve's internal end-of-travel switch closes, it energises a relay coil, and the EQSP32 reads the contact state. Clean electrical isolation, no extra components.
Total hard I/O: 11 discrete outputs (relay), 5 discrete inputs. Well within the EQSP32's 16-port capacity.
A motorized zone valve of the type used in this installation. The built-in end-of-travel switch (open switch) provides the feedback signal that confirms the valve has fully opened.
Control Architecture: Local Logic First
The fundamental design principle for any safety-relevant installation applies here: the controller must operate correctly regardless of what the network does.
All safety-critical logic runs locally on the EQSP32:
Valve open-switch confirmation: each zone valve has an end-of-travel open switch wired back to the EQSP32. If the switch does not close within a timeout window after the valve output is energised, the output is cut and a fault is flagged. The EQSP32 will not enable circulation for a zone until it has hardware confirmation that the valve is actually open.
Pump interlock: circulation pumps are only enabled when at least one zone valve has confirmed open via its open switch.
Heat pump minimum run timer: once the heat pump enable output is energised, a 20-minute hold-off prevents the output from de-energising, regardless of zone demand. This protects the compressor from short-cycling even if all zone setpoints are satisfied shortly after startup.
HMI heartbeat watchdog: the HMI server publishes a periodic heartbeat over MQTT. The EQSP32 monitors this heartbeat and, if it is absent for longer than a configured timeout, treats the HMI as offline: all zone valve outputs, circulation pump outputs, and the heat pump enable are de-energised in a controlled shutdown. This is a deliberate design choice: an unresponsive HMI is treated as a loss of supervision, not a safe condition.
Sensor watchdog: each wireless temperature sensor is monitored for regular heartbeat messages. If a sensor goes silent, the corresponding zone is disabled automatically.
The HMI heartbeat interlock inverts the usual assumption. In many installations the controller keeps running if the HMI drops out. Here, the HMI is considered part of the supervision chain: if the operator layer is no longer responding, the controlled system shuts down rather than running unsupervised.
Panel wiring diagram. Zone valve motors and open switches, circulation pumps, and the heat pump enable are all wired to EQSP32 relay I/O ports. No field wiring beyond the original relay box was modified.
The HMI Layer: Home Assistant as Open-Source SCADA
With safety logic running on the controller, a separate layer handles operator visibility, scheduling, and remote access. In this project that layer is Home Assistant, an open-source automation platform running on a low-power Linux mini PC backed by a UPS for ride-through during brief power events.
Think of it as a lightweight SCADA: it provides per-zone thermostat setpoints, trend logging, alarm history, and a web dashboard accessible from any browser or mobile device. It does not run any safety logic. The connection between the two layers is monitored in both directions: the HMI publishes a periodic heartbeat that the EQSP32 expects to receive. If the heartbeat stops, the EQSP32 initiates a controlled shutdown of all outputs rather than continuing to operate without supervision.
This separation of controller logic and HMI is standard practice in industrial automation. The difference here is cost: the entire HMI layer runs on open-source software with no per-seat licensing.
MQTT: The Field Bus Between Controller and HMI
Communication between the EQSP32 and Home Assistant uses MQTT, a lightweight publish/subscribe protocol widely used in industrial IoT alongside Modbus TCP and OPC-UA. The EQSP32 handles MQTT natively: broker connection, topic management, and Home Assistant device discovery are all handled automatically once credentials are configured via the EQConnect app.
From the application code perspective, exposing a relay output to the HMI is a two-step declaration:
application.cpp
// In setup() -- declare the output to Home AssistantcreateControl_Switch("Zone A Pump", "mdi:pump");
// In the control loop -- update state after each logic evaluationupdateControl_Switch("Zone A Pump", pumpA_state);
The relay then appears in Home Assistant as a controllable switch with real-time state feedback, historical logging, and automation support, with no broker configuration, no topic mapping, and no retain flag management required.
The Home Assistant dashboard. Each zone has a thermostat card showing current temperature, setpoint, and heating state. All data is published in real time by the EQSP32 over MQTT.
Power Efficiency: Relay Derating Built In
Running 11 relay outputs simultaneously in a compact panel generates heat and draws continuous coil current. The EQSP32 addresses this with an automatic derating feature on relay outputs:
On activation: full drive current for a configurable period (typically 150 ms), enough to guarantee pull-in under all load conditions.
After pull-in: automatic reduction to a holding level (e.g. 35% duty cycle via PWM).
The result is roughly one-tenth the steady-state coil power compared to holding at full current. Built-in flyback diodes suppress inductive kick at the terminals, with no external suppression components needed. For a panel with 11 relay outputs running near-continuously during heating season, this is a meaningful efficiency gain and keeps enclosure temperatures down.
Automatic relay derating is uncommon in DIN-mount micro-PLCs at this price point. On a panel running 11 relays continuously through a heating season, the cumulative power and thermal benefit is significant.
Trend Logging and Fault Diagnosis
One of the advantages of pairing a micro-PLC with an MQTT-connected HMI is automatic trend storage. Every sensor value and output state change is time-stamped and stored by Home Assistant's recorder.
In this installation, the trend data surfaced a real fault within the first heating season: one zone was consistently underheating despite the valve showing open. The temperature vs. setpoint graph revealed the zone was heating too slowly, pointing to a sticky valve actuator that was only partially opening. Without trend data, this would have been attributed to a poorly insulated room.
The same trend graphs also provide heartbeat monitoring for each wireless sensor: a missing heartbeat is immediately visible as a gap in the timeline, and the watchdog logic on the EQSP32 responds to it automatically.
Temperature history for a single zone: setpoint (dashed), actual temperature, and on/off state. The graph is generated automatically by Home Assistant's built-in recorder. Gaps in sensor data trigger the EQSP32 watchdog.
Results
Deterministic local control
All interlocks and safety logic run on the EQSP32, independent of the network or HMI server state.
Remote access
Setpoints, zone status, and fault history accessible from any browser or mobile device, anywhere.
Trend logging
Continuous temperature and output state recording, used for commissioning, fault-finding, and energy analysis.
Panel efficiency
Relay derating reduces steady-state coil power to roughly one-tenth across all 11 relay outputs.
The EQSP32 replaced a relay box. What came with it (structured I/O, local safety logic, built-in MQTT, and relay derating) is what makes a micro-PLC the right tool for this job rather than a relay timer panel or a consumer smart home hub.
Ready to spec the EQSP32 for your next panel?
Datasheet, I/O reference, and interfacing guide available for download.