HOMEMASTER

July 26, 2026 · View on GitHub

License: CERN-OHL-W v2 + GPLv3 + MIT Status: Open Hardware Works with: ESPHome & Home Assistant

HomeMaster combines the reliability and modularity of industrial DIN‑rail automation with the openness of the ESPHome / Home Assistant ecosystem — fully open hardware and firmware, local‑first, no cloud, no vendor lock‑in.

Website: home-master.eu · Shop / Products: Products


Why HomeMaster

StrengthWhat you get
Fully openHardware under CERN‑OHL‑W v2, firmware and ESPHome configs under MIT. Schematics, PCB data, and firmware are public — repairable, reproducible, no lock‑in. You can build or modify your own boards.
Native ESPHome APIControllers talk to Home Assistant over the native API — no MQTT broker, no hand‑mapped Modbus registers, no protocol converters. Devices appear as ready‑to‑use entities, low latency, fully local.
Local‑first / edge‑resilientThe controller does the thinking; the server only visualizes. Critical logic runs on the controller and on each module. Lighting, leak shut‑off, and alarm actions keep working if the network or Home Assistant is down. No cloud; data stays on site (GDPR‑friendly).
Distributed logicEach Modbus I/O module runs onboard rules. RP2350 modules persist configuration in on‑device flash (LittleFS) across reboots and power loss.
Standard RS‑485 Modbus RTUA deterministic, robust wired bus. Modules speak standard Modbus RTU and work with any Modbus master — HomeMaster controllers, third‑party PLCs, or industrial HMI / SCADA systems. Not locked to HomeMaster.
Driverless USB‑C WebConfig (modules)Configure each RP2350 module in the browser (Chrome, Edge, Opera): set Modbus address, calibrate, map inputs and rules. No drivers, no software to install.
EU design, CE markedDesigned and placed on the market as CE marked products. Directives and the signed EU Declaration of Conformity are listed under Safety & compliance.
Developer‑friendlyESPHome, Arduino, PlatformIO, MicroPython, ESP‑IDF, Pico SDK / CircuitPython, and UF2 drag‑and‑drop on RP2350 modules.

Hardware Guide

Industrial‑grade DIN‑rail controllers and I/O modules for smart homes, labs, and professional installations:

  • ESP32 controllersMiniPLC and MicroPLC (ESPHome pre‑installed; Modbus RTU masters on RS‑485)
  • OpenTherm Gateway — ESP32 OpenTherm master for boiler telemetry and control in Home Assistant (not a Modbus slave)
  • RP2350 Modbus I/O modules — energy, lighting, analog, alarm, leak detection, and more
  • RS‑485 Modbus RTU field bus and USB‑C WebConfig on every module

System Architecture

%%{init: {"flowchart":{"htmlLabels":true,"nodeSpacing":50,"rankSpacing":60}}}%%
flowchart TD
  classDef hub fill:#EDEFFB,stroke:#6B72FF,stroke-width:1.2px,color:#111,font-weight:bold;
  classDef big fill:#EDEFFB,stroke:#1F35FF,stroke-width:3px,color:#111,font-weight:bold,font-size:28px;
  classDef mod fill:#FFFffC,stroke:#E0B100,stroke-width:1.2px,color:#111,font-weight:bold,font-size:22px;
  classDef ot fill:#F0FFF4,stroke:#2F9E44,stroke-width:1.2px,color:#111,font-weight:bold,font-size:22px;
  classDef ghost fill:transparent,stroke:transparent,color:transparent;

  HA["Home Assistant<br/><br/>"]:::big --> PLC["MiniPLC / MicroPLC<br/><br/>"]:::big
  HA --> OTGW["OpenTherm Gateway<br/>boiler / HVAC"]:::ot
  PLC --> RS485[RS-485 Modbus RTU]:::hub

  subgraph Mods["<br/>"]
    ENM[ENM‑223‑R1<br>⚡ Energy + PQ]:::mod
    ALM[ALM‑173‑R1<br>🚨 Alarm I/O]:::mod
    DIM[DIM‑420‑R1<br>💡 AC Dimmer]:::mod
    AIO[AIO‑422‑R1<br>🌡️ Analog I/O]:::mod
    RGB[RGB‑621‑R1<br>🎨 LED Controller]:::mod
    DIO[DIO‑430‑R1<br>🔌 Digital I/O]:::mod
    STR[STR‑3221‑R1<br>💫 Staircase LED]:::mod
    WLD[WLD‑521‑R1<br>💧 Leak Detection]:::mod
    SP1["<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>"]:::ghost
  end
  style Mods fill:#FFFFFF,stroke:#E0B100,stroke-width:1.5px, font-weight:bold,font-size:22px

  RS485 --> ENM
  RS485 --> ALM
  RS485 --> DIM
  RS485 --> AIO
  RS485 --> RGB
  RS485 --> DIO
  RS485 --> STR
  RS485 --> WLD

OpenTherm Gateway joins Home Assistant over the native ESPHome API (same as the controllers). Modbus I/O modules sit on the RS‑485 bus behind MiniPLC / MicroPLC.

Quick module selector

  • 💡 Lighting → DIM‑420‑R1, RGB‑621‑R1, STR‑3221‑R1
  • Measurement & protection → ENM‑223‑R1, WLD‑521‑R1
  • 🚨 Monitoring / alarm I/O → ALM‑173‑R1 (automation module — not a certified intruder alarm)
  • 🔌 General I/O → DIO‑430‑R1, AIO‑422‑R1
  • 🔥 Boiler / HVACOpenTherm Gateway · 🛒 Product page

Controller Comparison

Feature / Use Case🟢 MiniPLC
🛒 Product page
MiniPLC
🔵 MicroPLC
🛒 Product page
MicroPLC
🔥 OpenTherm Gateway
🛒 Product page
OpenTherm Gateway
RoleFlagship ESP32 Modbus master + rich onboard I/OCompact ESP32 Modbus master — entry into the systemESP32 OpenTherm master (not a Modbus slave)
Onboard I/O6× relays, 4× DI, 4× AI 0–10 V (16‑bit), 1× AO, 2× RTD, 2× 1‑Wire, OLED, RTC1× relay, 1× DI, 1‑Wire, RTCOpenTherm interface, 1× relay, 1‑Wire
ConnectivityEthernet, USB‑C, Wi‑Fi, BLE + ImprovUSB‑C, Wi‑Fi, BLE + ImprovUSB‑C, Wi‑Fi, BLE + Improv
StoragemicroSD card slotInternal flashInternal flash
Ideal forFull homes, labs, HVAC/solar, standalone offline controlRoom‑level control, compact cabinets, modular expansionBoiler telemetry & weather‑compensated heating in HA
Power85–265 V AC or 24 V DC24 VDC only85–265 V AC or 24 V DC
FirmwareESPHome pre‑installed; runs standalone & offlineESPHome pre‑installedESPHome pre‑installed

OpenTherm relay note: the gateway relay must not be wired across a different mains phase or isolated mains source than the device L/N supply (PCB insulation is Basic). See the OpenTherm Gateway README.

Module Overview

ImageModuleInputsOutputsKey FeaturesBest For🛒 Product page
ENM‑223‑R1ENM‑223‑R13‑phase V + CTs2 relaysATM90E32 metrology + PQ events (sag, phase‑loss, overcurrent, reverse‑phase); local alarm engine / load‑shed relays; 5 kV RMS digital isolationSolar, grid, protect‑and‑measureProduct page
ALM‑173‑R1ALM‑173‑R117 DI3 relaysAUX loop power for detectors + local alarm logic. Automation / monitoring module — not a certified or insurance‑grade intruder alarm.Contact / detector monitoringProduct page
DIM‑420‑R1DIM‑420‑R14 DI2× phase‑cut ACLeading / trailing edge dimming + local switch mapping that works offlineAC lightingProduct page
AIO‑422‑R1AIO‑422‑R14× AI 0–10 V + 2× RTD2× AO 0–10 VHVAC / process‑grade analog + PT100/PT1000 in one moduleHVAC, process sensorsProduct page
DIO‑430‑R1DIO‑430‑R14 DI3 relaysPhysical override buttons + local DI→relay mapping without a serverGeneral controlProduct page
RGB‑621‑R1RGB‑621‑R12 DI5 PWM + 1 relayRGB + tunable white (CCT); 12‑bit + gamma‑corrected smooth dimmingColor / white LED stripsProduct page
STR‑3221‑R1STR‑3221‑R11 DI + 2 presence32 LED channelsMotion‑triggered staircase / architectural animationsStair & path lightingProduct page
WLD‑521‑R1WLD‑521‑R15 DI + temp2 relaysMulti‑zone leak detection, local auto valve shut‑off, pulse water meteringLeak safety & meteringProduct page

Module highlights

  • ENM‑223‑R1 — measures and protects: 3‑phase ATM90E32 metrology with power‑quality event detection and a local relay alarm engine for load‑shedding, not metering alone.
  • AIO‑422‑R1 — 4× 0–10 V in, 2× 0–10 V out, and 2× RTD (PT100/PT1000) in a single DIN module.
  • ALM‑173‑R1 — dense DI count with AUX detector power and onboard logic for automation monitoring (not a certified alarm panel).
  • DIM‑420‑R1 — two‑channel phase‑cut AC dimmer with offline local switch mapping.
  • DIO‑430‑R1 — relays, inputs, front override buttons, and DI→relay rules that survive loss of the server.
  • RGB‑621‑R1 — RGB+CCT on five PWM channels with 12‑bit gamma‑corrected dimming, plus a strip power relay.
  • STR‑3221‑R1 — 32‑channel staircase LED controller with presence inputs and motion‑triggered sequences.
  • WLD‑521‑R1 — five leak zones, temperature, local valve shut‑off, and pulse water metering on one module.
ScenarioCore devicesWhat it does
Apartment / home electrical cabinetMiniPLC + DIO-430-R1 + WLD-521-R1Wall-switch lighting and relay control, plus multi-zone leak detection with local auto valve shut-off — core automation that keeps running offline.
Whole-home lightingMiniPLC + RGB-621-R1 + DIM-420-R1 + STR-3221-R1RGB+CCT strips (12-bit + gamma dimming), phase-cut AC dimming, and motion-triggered staircase lighting, mapped locally.
3-phase energy metering & load protectionMicroPLC + ENM-223-R1Per-phase metrology with local power-quality alarms and relay-based load-shedding — measures and protects, not metering alone.
HVAC / process controlMiniPLC + AIO-422-R1 + DIO-430-R10–10 V analog in/out plus PT100/PT1000 RTD and discrete relays for valves, actuators and setpoints, with standalone controller logic.
Heating (boiler control)OpenTherm Gateway (+ MiniPLC/MicroPLC for the rest of the plant)Full OpenTherm boiler telemetry and modulating/weather-compensated heating in Home Assistant.
Contact & detector monitoringMicroPLC + ALM-173-R1High-density digital inputs with AUX detector loop power and local alarm logic. Automation/monitoring module — not a certified intruder alarm.
Modular / room-level starterMicroPLC + DIO-430-R1 + RGB-621-R1Compact entry setup: switch inputs, relay outputs and RGB control over one RS-485 bus, expandable later.

Quick Start

5-minute setup

  1. Power the controller — ESPHome is pre-installed on MiniPLC, MicroPLC, and OpenTherm Gateway.
  2. Join Wi-Fi with Improv — BLE or Serial via improv-wifi.com.
  3. Wire RS-485 (controllers + I/O modules) — A/B differential pair; 120 Ω termination at both bus ends.
  4. Configure each module — USB-C → WebConfig: set the Modbus address, calibration, mapping and rules. Note the address you assign — you'll reference it in the controller config.
  5. Add the modules to the controller — in the controller's ESPHome YAML, include the ESPHome package for each module (see the ESPHome example below) and set each module's Modbus address to match the one you assigned in WebConfig. Upload the config to the controller.
  6. Open Home Assistant — add the ESPHome controller device. Each module's entities then appear in Home Assistant through the controller's packages.

Modules do not auto-discover: they are Modbus RTU devices on the RS-485 bus, exposed to Home Assistant by the controller. The Modbus address in WebConfig must match the address used in the controller package.

OpenTherm Gateway is standalone over the native ESPHome API — it does not use the Modbus steps (3–5). Wire OT+/OT− to the boiler and commission it like any ESPHome device.


Configuration

Compatibility

ComponentHome AssistantESPHomeStandalone / offline logic
Modbus I/O modules✅ via controller packages✅ native packages✅ onboard rules + LittleFS
MiniPLC✅ full✅ pre‑installed✅ full
MicroPLC✅ full✅ pre‑installed✅ basic onboard I/O
OpenTherm Gateway✅ full✅ pre‑installed✅ relay + 1‑Wire without boiler link

Controller setup

  1. Power on
  2. Connect via improv-wifi.com (BLE or USB)
  3. Enter Wi‑Fi credentials
  4. Device appears in ESPHome Dashboard and Home Assistant

Module configuration (WebConfig)

Each Modbus module includes USB WebConfig — no drivers:

  • Set Modbus address and baud rate
  • Configure relay behavior and input mappings
  • Perform calibration and live diagnostics
  • Adjust alarm thresholds and LED modes

WebConfig requires a Chromium-based browser (Chrome, Edge, Opera). Not supported in Safari; Firefox only via Nightly with the Web Serial flag. Plug in USB-C and click Connect. Settings on RP2350 modules persist in LittleFS.

Networking

  • RS‑485 Modbus: 19200 8N1 (default), 120 Ω termination required — deterministic wired field bus
  • Wi‑Fi: controllers and OpenTherm Gateway; Improv onboarding
  • Ethernet: MiniPLC (optional LAN8720)
  • USB‑C: configuration and programming

Advanced

Firmware development

All HomeMaster controllers and modules support firmware customization via USB‑C.

  • ESPHome YAML (pre-installed on controllers and OpenTherm Gateway)
  • Arduino IDE (ESP32 and RP2040/RP2350)
  • PlatformIO (cross-platform)
  • MicroPython (via Thonny)
  • ESP-IDF (ESP32-based controllers)
  • Pico SDK / CircuitPython (RP2350-based modules)

USB‑C developer flashing

Controllers and modules support flashing and auto-reset via USB‑C, without pressing BOOT or RESET.

  • ESP32 (MiniPLC, MicroPLC, OpenTherm Gateway): Arduino IDE, PlatformIO, ESP-IDF, or ESPHome Dashboard.
  • RP2350 modules: drag‑and‑drop UF2 and the RP2040/RP2350 toolchain (Pico SDK, CircuitPython).

All devices ship with pre-installed firmware. Controllers and the OpenTherm Gateway are ESPHome-ready. Modules are functional out of the box and configurable via WebConfig. Flashing is only required to replace the default firmware.

Build environment (reproducible)

RP2350 module firmware (v0.2.0 sketches) is built with the arduino-pico core (Earle Philhower). Each sketch folder includes a sketch.yaml manifest; GitHub Actions compiles all seven modules and publishes .uf2 artifacts.

Core & board

ItemValue
Corearduino-pico — platform id rp2040:rp2040
Board Manager URLhttps://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
BoardGeneric RP2350 (generic_rp2350)
Base FQBNrp2040:rp2040:generic_rp2350:flash=2097152_1048576

Install core (arduino-cli):

arduino-cli config add board_manager.additional_urls \
  https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
arduino-cli core update-index
arduino-cli core install rp2040:rp2040@5.6.0

Arduino IDE: Boards Manager → search RP2040/RP2350 by Earle F. Philhower → install 5.6.0 → select board Generic RP2350.

Flash Size / LittleFS (required for RP2350 module sketches): In Arduino IDE → Tools → Flash Size, choose 2MB (Sketch: 1MB, FS: 1MB) — the sketches persist config in LittleFS. FQBN suffix: :flash=2097152_1048576 (already set in each sketch.yaml and CI).

Provided by the core (do not list in sketch.yaml): LittleFS, Wire, OneWire (WLD), pico/time.h, hardware/watchdog.h. Local sketch headers: hm_common.h (all modules), atm90e32.h (ENM only).

Libraries by module (Library Manager)

ModuleAdditional librariesCommon (all modules)
AIO-422-R1ADS1X15, Adafruit MAX31865 library, Adafruit MCP4725, Adafruit BusIOArduino_JSON, Modbus-Arduino, Modbus-Serial, Simple Web Serial
ALM-173-R1PCF8574Arduino_JSON, Modbus-Arduino, Modbus-Serial, Simple Web Serial
DIM-420-R1Arduino_JSON, Modbus-Arduino, Modbus-Serial, Simple Web Serial
DIO-430-R1Arduino_JSON, Modbus-Arduino, Modbus-Serial, Simple Web Serial
ENM-223-R1(atm90e32.h local)Arduino_JSON, Modbus-Arduino, Modbus-Serial, Simple Web Serial
RGB-621-R1Arduino_JSON, Modbus-Arduino, Modbus-Serial, Simple Web Serial
WLD-521-R1Arduino_JSON, Modbus-Arduino, Modbus-Serial, Simple Web Serial

Pinned versions are listed in each sketch’s sketch.yaml (aligned with CI).

Two ways to build

  1. Arduino IDE — install core and libraries at the versions listed in the module’s sketch.yaml, open the .ino sketch, set board/FQBN and Flash Size as above, then Sketch → Export Compiled Binary (UF2 appears under build/<fqbn>/).

  2. arduino-cli / CI (recommended) — reproducible, isolated build from the manifest:

cd DIO-430-R1/Firmware/v0.2.0/default_DIO_430_R1   # example
arduino-cli compile --profile default .
# or, before versions are pinned in sketch.yaml:
arduino-cli compile --fqbn rp2040:rp2040:generic_rp2350 --export-binaries .

CI workflow: .github/workflows/build-firmware.yml — runs on changes under */Firmware/v0.2.0/**, uploads artifact firmware-<sketch> containing *.ino.uf2 per module.

Note: Arduino IDE 2.x does not compile from sketch.yaml today; the manifest is for arduino-cli and CI, and as the version reference for IDE users (install matching library/core versions manually).

Home Assistant Example (ESPHome)

# Example ESPHome configuration for Alarm Module
uart:
  id: uart_modbus
  tx_pin: 17
  rx_pin: 16
  baud_rate: 19200
  parity: NONE
  stop_bits: 1

modbus:
  id: modbus_bus
  uart_id: uart_modbus
  turnaround_time: 100ms
  send_wait_time: 250ms

# ---------- Pull ALM Modbus entities from GitHub ----------
packages:

  alm1:
    url: https://github.com/isystemsautomation/homemaster-dev
    ref: main
    files:
      - path: ALM-173-R1/Firmware/v0.2.0/default_alm_173_r1_plc/default_alm_173_r1_plc.yaml

ESPHome 2026.7.0 raised the Modbus client defaultsturnaround_time from 100 ms to 600 ms and send_wait_time from 250 ms to 2000 ms (PR #11969).

At the 600 ms default the bus carries only about 1.5 Modbus transactions per second, whatever the UART speed, because the controller stays silent for 600 ms after every response. Two modules on one RS-485 bus become slow to respond. With three or more, one module can stop being polled altogether — with no timeout and no CRC error in the log.

On ESPHome 2026.7.0 and newer, set both values explicitly as shown above. On earlier releases these were the defaults and the two lines are not required.


Resources


Safety & compliance

Electrical safety

  • Only trained personnel should install or service modules
  • Disconnect all power before wiring
  • Follow local electrical codes and standards

Installation

  • Mount on 35 mm DIN rails in protective enclosures
  • Separate low‑voltage and high‑voltage wiring
  • Avoid moisture, chemicals, and extreme temperatures

Device‑specific warnings

  • Connect PE/N properly for metering modules
  • Use correct CTs (1 V or 333 mV) — never connect 5 A CTs directly
  • Avoid reverse polarity on RS‑485 lines
  • OpenTherm Gateway: observe the relay cross‑mains restriction in the device README

CE marking

HomeMaster modules and controllers are CE marked. Relevant frameworks include:

  • EMC — Directive 2014/30/EU
  • LVD — Directive 2014/35/EU, EN 62368‑1
  • RoHS — applicable substance restrictions

A signed EU Declaration of Conformity (DoC) is available for each device (see the device folder / Manuals, and the shop product page). CE here is a compliance fact, not a performance claim.


License

This project uses a hybrid licensing model.

Hardware (schematics, PCB layouts, BOMs): CERN‑OHL‑W v2

Firmware & ESPHome integration: MIT License

This keeps full compatibility with ESPHome and Home Assistant while protecting the open hardware designs under CERN‑OHL‑W v2.

See LICENSE files in each directory for full terms.


Versioning & updates

Firmware is versioned per module. Each module's firmware lives in its own folder (<MODULE>/Firmware/vX.Y.Z/) and is updated independently — there is no single system-wide version. Install or update the firmware for the specific module you are working with from that module's folder.

Documentation last updated: 2026-07-26