

OTThing
A compact universal OpenTherm WiFi Interface
- Size
- 51 × 71 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 111
- Nets
- 68
- Pads
- 286
- Tracks, vias
- 555, 157
- Pours
- 8
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 8 Jan 2025
- Updated
- 5 Nov 2026
Overview
OTThing is an open-source printed circuit board by Phunkafizer, from the Phunkafizer/OT-Thing repository on GitHub. It is a 2-layer board of 51 × 71 mm with 111 parts on 68 nets, routed with 555 tracks and 157 vias.
It is built around the ESP32-C3-WROOM-02-H4, TPS61041DBV and AMS1117-3.3, with the USBLC6-2SC6, BC847C and BC857C among its other parts. Its parts include 38 resistors, 18 diodes, 12 transistors, 10 capacitors and 4 ICs. It belongs with the radio and wireless and interfaces and adapters boards and the ESP32 and RISC-V boards of this library.
Main components
12ESP32-C3-WROOM-02-H4
SMD,20x18mm-105dBm -40℃~+105℃ 2.4GHz 20.5dBm 345mA 3V~3.6V 82mA Bluetooth5.0 ESP32-C3 On-board PCB Antenna UART、SPI、I2C、I2S、USB SMD,20x18mm WiFi Modules ROHSEspressif SystemsWiFi ModulesTPS61041DBV
SOT-23-5-40℃~+125℃@(TJ) 1 1.8V~6V 1MHz 250mA 28V 28uA Adjustable Boost Boost Built-in No SOT-23-5 DC-DC Converters ROHSTexas InstrumentsLED DriversAMS1117-3.3
SOT-223-40℃~+125℃ 0.003%Vout 1 1.1V@(800mA) 15V 1A 3.3V 5mA 72dB@(120Hz) Fixed Over Current Protection、Short Circuit Protection、Thermal shutdown Positive SOT-223 Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSAdvanced Monolithic SystemsVoltage Regulators - Linear, Low Drop Out (LDO) RegulatorsUSBLC6-2SC6
SOT-23-60.35pF、0.8pF 100nA 150W@8/20us 15V 2 5V 6A@8/20us 6V ESD SOT-23-6 ESD and Surge Protection (TVS/ESD) ROHSUMWESD And Surge Protection (TVS/ESD)BC847C
SOT-23-55℃~+150℃ 1 NPN 100MHz 100mA 100nA 200mW 420 45V 500mV 6V NPN SOT-23 Bipolar (BJT) ROHShongjiachengBipolar (BJT)BC857C
SOT-23-65℃~+150℃ 1 PNP 100MHz 100mA 15nA 250mV 250mW 420 45V 5V PNP SOT-23 Bipolar (BJT) ROHSNexperiaBipolar (BJT)LL4148
LL-341 Independent 1V@10mA 200mA 4A 4ns 500mW 5uA@75V 75V LL-34 Switching Diodes ROHSMDDSwitching DiodesPTVS3V3S1UR,115-JSM
SOD-123W-55℃~+125℃ 1 200uA 3.3V 400W@10/1000us 54.8A@10/1000us 6.5V 7.3V TVS Unidirectional SOD-123W ESD and Surge Protection (TVS/ESD) ROHSJSMSEMIUncategorisedG6K-2F-Y-5V
SMD,10x6.5mm-40℃~+70℃ 100mW 100mΩ 1A 237Ω 300mA@125VAC、1A@30VDC 3ms 3ms 5V 60V@DC、125V@AC Silver+gold alloy Two groups of conversions: 2C(Double-pole double-throw conversion) SMD,10x6.5mm Signal Relays ROHSOmronSignal RelaysMBR0540
SOD-123-55℃~+150℃ 1 Independent 20uA@40V 40V 5.5A 500mA 510mV@500mA SOD-123 Schottky Diodes ROHSonsemiSchottky DiodesPESD24VL1BA
SOD-32315pF 24V 26.7V 300W@8/20us 500nA 50V 6A@8/20us Bidirectional ESD IEC 61000-4-2、IEC 61000-4-5、IEC 61000-4-4 SOD-323 ESD and Surge Protection (TVS/ESD) ROHSUMWESD And Surge Protection (TVS/ESD)PTVS24VS1UR
SOD-123ESD And Surge Protection (TVS/ESD)FUXINSEMI
README
README.mdOTthing
A compact WiFi <-> OpenTherm (master & slave) interface
Project homepage
https://www.seegel-systeme.de/2025/01/05/ot-thing-das-universelle-wifi-opentherm-interface/
OTthing board
OTthing wiring
OTthing web interface
Home Assistant integration
Overview
OTthing is a versatile OpenTherm gateway that connects your heating system to the Internet via WiFi. It acts as an OpenTherm master (controlling your boiler) and/or slave (integrating with room thermostats), providing real-time monitoring and control through a modern web interface and Home Assistant integration.
Key Features
- Dual OpenTherm Modes: Operate as both an OpenTherm master and a slave simultaneously
- Single-Board Compact Design: Cost-efficient SMD-based single-board hardware with a small enclosure footprint
- OpenTherm Compatibility: Works with OpenTherm-compatible equipment that implements the functions supported by OTthing; available features vary by device
- USB-C Powered: Simple and reliable power supply through a standard USB-C connector
- Web Dashboard: Real-time status monitoring with system metrics
- Home Assistant Integration: Native MQTT discovery and seamless HA integration
- Multi-Zone Support: Control up to 2 heating circuits with independent parameters
- Time Program: Built-in scheduling for automatic heating setpoint changes
- Heating Curve Control: Outdoor-compensated flow temperature control with configurable curve parameters
- Flow & Setpoint Management: Fine-grained control for CH temperature targets, modes, and operating limits
- Raw OpenTherm Tools: Direct read/write request endpoint for diagnostics and advanced integrations
- Real-Time Telemetry: Live updates via WebSocket for logs and status changes
- REST API: Full HTTP interface for status, configuration, control commands, and topic discovery
- WiFi Provisioning: Built-in network scan and credential setup through the web interface
- OTA Firmware Update: In-browser firmware upload endpoint with automatic reboot on success
- Local Data Export: Device data and diagnostics export from the web UI for troubleshooting
- External Inputs & Sensors: Optional DS18B20, pulse input, or photointerrupter support (for example, condensate monitoring)
- Selectable Operating Strategies: Run OTthing as a full heating controller or in monitoring-first mode for telemetry-only operation
- Automatic Bypass Behavior: Allows you to restore conventional room-thermostat operation without rewiring
- Failsafe Runtime Status: Device health and communication state tracking for robust operation
- Local Control: Responsive web UI with no cloud dependency
- Modular Design: Extensible architecture supporting multiple integrations
- Open-Source Platform: Open hardware and firmware for custom extensions and modifications
- Advanced Configuration: Room modes (off/heat/auto), flow control, heating curves, and more
- Detailed Logging: Real-time log streaming to monitor system behavior
- Turbo Mode: Temporarily raises the flow target by a configurable amount and duration
- Automatic Suspend: Optional suspension based on outside temperature, room conditions, and minimum flow thresholds
- Customizable dashboard: add metrics to dashboard
Architecture
The firmware consists of several functional modules:
- OpenTherm Control (
otcontrol.cpp): Manages master/slave communication with the boiler - Master Requests (
masterrequests.cpp): Builds and schedules OpenTherm master requests and polling cycles - OpenTherm Values (
otvalues.cpp): Stores, normalizes, and exposes decoded OpenTherm data points - Heating Curve (
heatingcurve.cpp): Calculates the target flow temperature from heating-curve parameters - MQTT Integration (
mqtt.cpp): Publishes device state and subscribes to control topics - Device Status (
devstatus.cpp): Tracks runtime health, connectivity, and status flags - Auxiliary Input (
auxInput.cpp): Handles external input signals for additional control logic - Web Portal (
portal.cpp): Serves the responsive dashboard and API endpoints - Heating Control (
CHcontrol.cpp): Manages heating circuits, setpoints, and modes - Sensor Integration (
sensors.cpp): Collects data from external sensors - Configuration Management (
devconfig.cpp): Handles persistent device settings
Hardware
- MCU: ESP32-C3 (or a compatible MCU with UART pins)
- Communication: OpenTherm interface
- Power: via USB
- Optional: DS18B20 1-Wire temperature sensors and auxiliary inputs
OpenTherm support and available controls depend on the boiler or other equipment. Check the device documentation and OTthing schematics before installation. Disconnect equipment from mains power before wiring; have boiler wiring performed by a qualified installer where required. Connect OpenTherm through the board's designated terminals, never directly to MCU GPIO pins.
Installation & Setup
-
Hardware Setup:
- Connect the OpenTherm slave side (boiler / ventilation / solar storage) to the Boiler screw terminal on OTthing
- Optionally connect the room unit to the Roomunit screw terminals on OTthing
- Connect OTthing to a USB-C power supply
-
Access the Web Interface:
- The device creates a WiFi access point for provisioning or connects to its configured network
- The default access point password is
12345678; change it before deployment - Access the web UI at
http://<otthing-ip>/(default: 4.3.2.1)
-
Configure:
- Set your boiler type and heating circuit parameters
- Configure the MQTT broker if you are using Home Assistant
- Adjust setpoints, heating curves, and control modes
Build and Flash (Developers)
Install PlatformIO, then run these commands from the Firmware/ directory:
platformio run --environment release
platformio run --environment release --target uploadThe first command builds the firmware. The next two upload the firmware and the LittleFS web assets; perform both uploads when installing a complete build. The firmware project reads access point SSID, password, and hostname from default.ini unless overridden by the build environment. Set a unique access point password before deploying devices.
API Reference
OTthing exposes the following REST endpoints and WebSocket connection:
When web authentication is configured, protected endpoints require a valid login session. Requests without a valid session return 401; log in through the web UI before using these endpoints.
Core Status Endpoints
GET /- Web dashboard (HTML)GET /status- Current device and boiler status (JSON)GET /config- Device configuration and settings (JSON)POST /config- Update device configuration (JSON body)GET /otitems- Raw OpenTherm items and values from master and slave (JSON)GET /topics- List all available MQTT control topics (text/plain)
Control Endpoints
-
GET /set?key=value- Update settings via query parameters- Examples:
/set?chSetTemp1=50,/set?chMode1=heat - Use
/topicsto discover supported control keys. URL-encode values when they contain reserved characters. - Returns 200 on success, 503 if the value cannot be set
- Examples:
-
GET /slaverequest?id=X&rw=Y&data=HEX- Send a raw OpenTherm slave requestid: OpenTherm message ID (integer)rw: 1 for READ_DATA, 0 for WRITE_DATAdata: Hex-encoded data value- Returns JSON with response type, ID, and data
System Endpoints
-
GET /scan- Scan for available WiFi networks- Returns JSON with the SSID, RSSI, and channel for each network
- Status field: -2 (scanning in progress), -1 (failed), 0+ (number of networks found)
-
POST /setwifi- Configure WiFi credentials- Parameters:
ssidandpass(URL-encoded) - Triggers a device reboot and a WiFi connection attempt
- Parameters:
-
GET /reboot- Trigger a device reboot- Returns 200 and schedules a reboot
-
POST /update- Firmware update (binary upload)- Returns 200 on success, 500/503 on error
- Triggers an automatic reboot if the update succeeds
Real-time Communication
WebSocket /ws- Real-time updates and log streaming- Receives log messages and status updates
- Can be used to monitor device behavior in real time
Testing & Development
A Python mock server is included for local UI and API testing. Install its dependencies and start it from the Firmware/ directory:
python -m pip install -r requirements.txt
python tools/mock_otthing.pyThe server listens on http://127.0.0.1:8081/. It is useful for UI development and API integration, but it does not replace testing against physical OpenTherm hardware.
MQTT Notes
The device subscribes to control topics under otthing/<device-id>/<key>/set; /topics lists the supported keys. Home Assistant discovery is provided through MQTT when a broker is configured.
Changes sent through the web API are also published to the corresponding MQTT /set topic as retained messages. A broker can replay retained commands when the device reconnects, including after a reboot. Keep this in mind for temporary controls such as Turbo mode, and clear any stale retained command from the broker when needed.
Troubleshooting
- Cannot reach the web UI: Confirm the phone or computer is connected to the OTthing access point or the same network as the device, then check the device IP.
- No OpenTherm communication: Check the board terminals, wiring polarity where applicable, boiler compatibility, and the device's status and logs.
- Home Assistant entities are missing: Confirm broker connectivity and MQTT discovery settings, then review device logs and the broker's topics.
- A setting returns 401: Log in through the web UI and retry the request with the browser session.
- A temporary action returns after reboot: Check whether a retained MQTT
/setcommand is replaying it.
Schematics
Discussion
Reporting issues
When reporting issues, please supply:
- Brand and model of the boiler and room unit
- OTthing firmware version and the steps that reproduce the issue
- expected behaviour
- Log
- Status JSON
- Configuration JSON
- OT items JSON
- Data history JSON
All of this data can be exported from the OTthing using the export function at the bottom of the web UI. Only one concern per issue!
Contributing
- Make changes in a new branch based on the
developbranch. - Address only one issue per PR.
- Create the PR against the
developbranch.
Known Working Devices
Below is an excerpt of hardware devices reported to work successfully with OTthing. If you have verified additional devices, contributions and reports are very welcome!
Boilers & Heating Systems
- De Dietrich Inidens 20/24 MI
- De Dietrich MCR 24 Home
- De Dietrich MPX 24/29 MI Compact
- Domusa BioClass HM 16 (Pellet)
- Hoval TopGas
- Intergas HRE 36/30A
- Junkers Cerasmart ZSB 3-16 (with OpenTherm module OTM 1)
- Remeha Tzerra 28c
- Remeha Tzerra Ace
- Termet Gold Plus 2
- Viessmann Vitodens 100-W (B1KG)
- Westen Boyler Digit+
- Windhager BioWin (Pellet)
Room Units & Thermostats
- Baxi RC 06.20
- De Dietrich AD304
- De Dietrich iSense (AD289)
- Honeywell DT4M
- Hoval RS-OT
- Junkers TF 30
- Siemens QAA73
- Theben / Windhager RAM 786
Feel free to open a Pull Request or issue to report additional compatible devices!
Parts
111| Qty | Value | Footprint | References |
|---|---|---|---|
| 16 | ~ | TestPoint:TestPoint_THTPad_D1.5mm_Drill0.7mm | TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13, TP14, TP15, TP16 |
| 9 | 4k7 | Resistor_SMD:R_0805_2012Metric | R1, R4, R29, R30, R31, R36, R38, R39, R40 |
| 6 | BC847C | Package_TO_SOT_SMD:SOT-23 | Q2, Q8, Q9, Q10, Q12, Q13 |
| 6 | BC857C | Package_TO_SOT_SMD:SOT-23 | Q1, Q4, Q5, Q6, Q7, Q11 |
| 6 | LL4148 | Diode_SMD:D_MiniMELF | D4, D5, D6, D7, D8, D18 |
| 5 | 120 | Resistor_SMD:R_0805_2012Metric | R2, R6, R10, R11, R24 |
| 5 | ~ | Inductor_SMD:L_0603_1608Metric | FB1, FB2, FB3, FB4, FB5 |
| 4 | 12k | Resistor_SMD:R_0805_2012Metric | R15, R25, R26, R28 |
| 3 | 10µ | Capacitor_SMD:C_0805_2012Metric | C2, C4, C5 |
| 3 | 330 | Resistor_SMD:R_0805_2012Metric | R7, R22, R33 |
| 3 | 33k | Resistor_SMD:R_0805_2012Metric | R13, R21, R27 |
| 3 | 3k3 | Resistor_SMD:R_0805_2012Metric | R12, R14, R23 |
| 2 | 470pF | Capacitor_SMD:C_0805_2012Metric | C1, C3 |
| 2 | 4µ7 | Capacitor_SMD:C_0805_2012Metric | C7, C9 |
| 2 | 5k1 | Resistor_SMD:R_0805_2012Metric | R8, R9 |
| 2 | GN | LED_SMD:LED_0805_2012Metric | D11, D13 |
| 2 | MountingHole | MountingHole:MountingHole_2.5mm | H1, H2 |
| 2 | PTVS3V3S1UR,115 | Diode_SMD:D_SOD-123 | D3, D17 |
| 2 | YL | LED_SMD:LED_0805_2012Metric | D12, D14 |
| 1 | 100 | Resistor_SMD:R_0805_2012Metric | R20 |
| 1 | 100µ | Capacitor_SMD:CP_Elec_6.3x5.4 | C6 |
| 1 | 10k | Resistor_SMD:R_0805_2012Metric | R37 |
| 1 | 10µ | Inductor_SMD:L_1210_3225Metric | L1 |
| 1 | 18k | Resistor_SMD:R_0805_2012Metric | R3 |
| 1 | 1k | Resistor_SMD:R_0805_2012Metric | R32 |
| 1 | 220k | Resistor_SMD:R_0805_2012Metric | R16 |
| 1 | 22k | Resistor_SMD:R_0805_2012Metric | R18 |
| 1 | 22pF | Capacitor_SMD:C_0805_2012Metric | C8 |
| 1 | 39 | Resistor_SMD:R_0805_2012Metric | R19 |
| 1 | 470 | Resistor_SMD:R_0805_2012Metric | R5 |
| 1 | 470µ | Capacitor_SMD:CP_Elec_6.3x7.7 | C10 |
| 1 | 6k8 | Resistor_SMD:R_0805_2012Metric | R17 |
| 1 | AMS1117-3.3 | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | U6 |
| 1 | BOOT | Button_Switch_SMD:SW_SPST_CK_RS282G05A3 | SW2 |
| 1 | ESP32-C3-WROOM-02 | User:ESP32-C3-WROOM-02 | U1 |
| 1 | G6K-2F-Y-5V | Relay_SMD:Relay_DPDT_Omron_G6K-2F-Y | K1 |
| 1 | MBR0540 | Diode_SMD:D_SOD-123 | D9 |
| 1 | PESD24VL1BA | Diode_SMD:D_SOD-323 | D15 |
| 1 | PTVS24VS1UR | Diode_SMD:D_SOD-123 | D16 |
| 1 | RD | LED_SMD:LED_0805_2012Metric | D10 |
| 1 | RST/CONFIG | Button_Switch_THT:SW_Tactile_SPST_Angled_PTS645Vx83-2LFS | SW1 |
| 1 | TPS61041 | Package_TO_SOT_SMD:SOT-23-5 | IC1 |
| 1 | USBLC6-2SC6 | Package_TO_SOT_SMD:SOT-23-6 | U5 |
| 1 | USB_C_Receptacle_USB2.0 | Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12 | J3 |
| 1 | ZMM15 | Diode_SMD:D_MiniMELF | D2 |
| 1 | ZMM4V3 | Diode_SMD:D_MiniMELF | D1 |
| 1 | ~ | TerminalBlock_Phoenix:TerminalBlock_Phoenix_PT-1,5-10-3.5-H_1x10_P3.50mm_Horizontal | J4 |
Questions
How big is the OTThing PCB?
It measures 51 × 71 mm and has 2 copper layers, 1.6 mm thick.
What parts does the OTThing use?
111 parts, built around the ESP32-C3-WROOM-02-H4, TPS61041DBV, AMS1117-3.3 and USBLC6-2SC6. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the OTThing KiCad files?
From the Phunkafizer/OT-Thing repository on GitHub, at the commit this page was made from: the board is PCB/OTThing.kicad_pcb and its schematic PCB/OTThing.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the OTThing design in my own project?
Its repository states no licence, so its author keeps all rights: ask Phunkafizer before reusing the design.
More from Phunkafizer/OT-Thing
1- 2 layers84 × 93 mm

Similar boards
- 2 layers168.5 × 58.8 mm

- 2 layers58 × 100 mm

FullBoardChargePumpCapMult
z2amiller/pedalfx
Replaces the Panasonic MN3102 (clock generator for MN3204/05/07/08/09 BBDs) with a CD4047B plus four passives. Two ways to use it:
40 parts7 - 2 layers40 × 99.5 mm

MIDI Tangle IO
GuavTek/M2IDI_TANGLE_HW
A multiplexer module for the M2IDI system
118 partsCERN-OHL-W-2.0 - 2 layers48 × 28 mm

Pir camper am312
samba09/camper-pir-switch
PIR motion switch for Revotion NODE Ambient (AM312, PhotoMOS, KiCad)
28 partsMIT - 2 layers69.9 × 58.4 mm

- 2 layers51.5 × 76.5 mm

Esp rfm
Phunkafizer/RFM-gateway
Hard- and software for the RFM-gateway, a universal platform for integrating sub-GHz radio into your WiFi network
47 parts1MIT - 2 layers68 × 46 mm

Ardor IO
balazsbencs/ardor
This is a DIY multieffects project with a Raspberry Pi and and Codec Zero and a Raspberry Pi Display 2. With Full NAM A2 support.
81 parts18MIT - 4 layers117 × 69.4 mm

KINO D4 Carrier A0 2
b5463/kino-d4
Open-source four-lens digital camera with synchronized capture, original-frame storage, and a USB control workbench.
256 parts4