Skip to the content
PCBKitNew board
2 layers51 × 71 mmOTThing, the printed circuit board in 3D

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

12

README

README.md

OTthing

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 OTthing board

OTthing OTthing wiring

OTthing web UI OTthing web interface

OTthing Home Assistant Dashboard 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

  1. 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
  2. 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)
  3. 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:

bash
platformio run --environment release
platformio run --environment release --target upload

The 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 /topics to discover supported control keys. URL-encode values when they contain reserved characters.
    • Returns 200 on success, 503 if the value cannot be set
  • GET /slaverequest?id=X&rw=Y&data=HEX - Send a raw OpenTherm slave request

    • id: OpenTherm message ID (integer)
    • rw: 1 for READ_DATA, 0 for WRITE_DATA
    • data: 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: ssid and pass (URL-encoded)
    • Triggers a device reboot and a WiFi connection attempt
  • 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:

bash
python -m pip install -r requirements.txt
python tools/mock_otthing.py

The 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 /set command is replaying it.

Schematics

OTthing schematic 1 OTthing schematic 2

Discussion

https://community.home-assistant.io/t/ot-thing-an-opentherm-wifi-gateway-with-integrated-ot-master-slave/824667

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 develop branch.
  • Address only one issue per PR.
  • Create the PR against the develop branch.

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
QtyValueFootprintReferences
16~TestPoint:TestPoint_THTPad_D1.5mm_Drill0.7mmTP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13, TP14, TP15, TP16
94k7Resistor_SMD:R_0805_2012MetricR1, R4, R29, R30, R31, R36, R38, R39, R40
6BC847CPackage_TO_SOT_SMD:SOT-23Q2, Q8, Q9, Q10, Q12, Q13
6BC857CPackage_TO_SOT_SMD:SOT-23Q1, Q4, Q5, Q6, Q7, Q11
6LL4148Diode_SMD:D_MiniMELFD4, D5, D6, D7, D8, D18
5120Resistor_SMD:R_0805_2012MetricR2, R6, R10, R11, R24
5~Inductor_SMD:L_0603_1608MetricFB1, FB2, FB3, FB4, FB5
412kResistor_SMD:R_0805_2012MetricR15, R25, R26, R28
310µCapacitor_SMD:C_0805_2012MetricC2, C4, C5
3330Resistor_SMD:R_0805_2012MetricR7, R22, R33
333kResistor_SMD:R_0805_2012MetricR13, R21, R27
33k3Resistor_SMD:R_0805_2012MetricR12, R14, R23
2470pFCapacitor_SMD:C_0805_2012MetricC1, C3
24µ7Capacitor_SMD:C_0805_2012MetricC7, C9
25k1Resistor_SMD:R_0805_2012MetricR8, R9
2GNLED_SMD:LED_0805_2012MetricD11, D13
2MountingHoleMountingHole:MountingHole_2.5mmH1, H2
2PTVS3V3S1UR,115Diode_SMD:D_SOD-123D3, D17
2YLLED_SMD:LED_0805_2012MetricD12, D14
1100Resistor_SMD:R_0805_2012MetricR20
1100µCapacitor_SMD:CP_Elec_6.3x5.4C6
110kResistor_SMD:R_0805_2012MetricR37
110µInductor_SMD:L_1210_3225MetricL1
118kResistor_SMD:R_0805_2012MetricR3
11kResistor_SMD:R_0805_2012MetricR32
1220kResistor_SMD:R_0805_2012MetricR16
122kResistor_SMD:R_0805_2012MetricR18
122pFCapacitor_SMD:C_0805_2012MetricC8
139Resistor_SMD:R_0805_2012MetricR19
1470Resistor_SMD:R_0805_2012MetricR5
1470µCapacitor_SMD:CP_Elec_6.3x7.7C10
16k8Resistor_SMD:R_0805_2012MetricR17
1AMS1117-3.3Package_TO_SOT_SMD:SOT-223-3_TabPin2U6
1BOOTButton_Switch_SMD:SW_SPST_CK_RS282G05A3SW2
1ESP32-C3-WROOM-02User:ESP32-C3-WROOM-02U1
1G6K-2F-Y-5VRelay_SMD:Relay_DPDT_Omron_G6K-2F-YK1
1MBR0540Diode_SMD:D_SOD-123D9
1PESD24VL1BADiode_SMD:D_SOD-323D15
1PTVS24VS1URDiode_SMD:D_SOD-123D16
1RDLED_SMD:LED_0805_2012MetricD10
1RST/CONFIGButton_Switch_THT:SW_Tactile_SPST_Angled_PTS645Vx83-2LFSSW1
1TPS61041Package_TO_SOT_SMD:SOT-23-5IC1
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U5
1USB_C_Receptacle_USB2.0Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J3
1ZMM15Diode_SMD:D_MiniMELFD2
1ZMM4V3Diode_SMD:D_MiniMELFD1
1~TerminalBlock_Phoenix:TerminalBlock_Phoenix_PT-1,5-10-3.5-H_1x10_P3.50mm_HorizontalJ4

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 mmOT Thing Tester, the printed circuit board in 3D

    OT Thing Tester

    Phunkafizer/OT-Thing

    A compact universal OpenTherm WiFi Interface

    68 parts28

Similar boards

  • 2 layers168.5 × 58.8 mmGruvin9x, the printed circuit board in 3D

    Gruvin9x

    gruvin/gruvin9x

    Automatically exported from code.google.com/p/gruvin9x

    261 parts7
  • 2 layers58 × 100 mmFullBoardChargePumpCapMult, the printed circuit board in 3D

    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 mmMIDI Tangle IO, the printed circuit board in 3D

    MIDI Tangle IO

    GuavTek/M2IDI_TANGLE_HW

    A multiplexer module for the M2IDI system

    118 partsCERN-OHL-W-2.0
  • 2 layers48 × 28 mmPir camper am312, the printed circuit board in 3D

    Pir camper am312

    samba09/camper-pir-switch

    PIR motion switch for Revotion NODE Ambient (AM312, PhotoMOS, KiCad)

    28 partsMIT
  • 2 layers51.5 × 76.5 mmEsp rfm, the printed circuit board in 3D

    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 mmArdor IO, the printed circuit board in 3D

    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 mmKINO D4 Carrier A0 2, the printed circuit board in 3D

    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