
Ssr
Th3Link/homeautomation
Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway.

Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway.
Switch is an open-source printed circuit board by Th3Link, from the Th3Link/homeautomation repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 48 × 49 mm with 67 parts on 62 nets, routed with 496 tracks and 46 vias.
It is built around the ESP32-WROOM-32, LM5163DDA and PESD2CAN. Its parts include 22 resistors, 14 capacitors, 10 connectors, 6 ICs and 4 switches. It belongs with the home automation and IoT boards and the ESP32 boards of this library.
Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway. This repository holds the hardware (KiCad), mechanics (3D-printable enclosures), and firmware for the whole system.
Start here: docs/index.md — the full documentation
index (requirements, architecture decisions, protocol specs), also built
into every crate's cargo doc output and published to GitHub Pages.
The firmware is Rust (#![no_std], embassy async,
esp-hal), organized as one Cargo
workspace under software/:
common-core / common-hardware
— CAN wire-format types and ESP32 hardware-support helpers shared by
both firmware lines.gateway-core / gateway-hardware
— the CAN↔MQTT bridge: web config UI, /control.json RPC, self- and
CAN-bus OTA update, over wired Ethernet (DHCPv4 + SLAAC, no WiFi).cancomponents-core / cancomponents-hardware
— the node firmware living on the bus: relays, rollershutters, buttons,
lights.tools/mqtt-log-reader — a small
Python tool for reading back the gateway's MQTT log/debug topics.sim/ — ./sim up: the unchanged gateway and node
firmware in QEMU, several gateways with their nodes on virtual CAN buses;
press buttons, set what the sensors measure, watch relays and frames, in
a TUI, from Python scripts or in pytest.legacy/ — the original C++/ESP-IDF implementation,
kept for reference. No longer built by CI.The *-core crates are hardware-independent and build/test on any
machine with stable Rust:
cargo test -p gateway-core -p cancomponents-core -p common-coreThe *-hardware crates target Xtensa (ESP32) and need Espressif's Rust
toolchain fork, installed via espup:
cargo install espup
espup install
source "$HOME/export-esp.sh" # needed once per new shellThen, from a *-hardware crate directory (e.g. software/gateway-hardware/):
cargo run --releasecargo run flashes over USB serial and opens a monitor, via espflash
(configured as each crate's custom runner in its own .cargo/config.toml).
Disclaimer: if you put mains voltage on a relais board, make sure you know what you are doing. These components are experimental and you are in charge of your own actions. Be safe — if you're unsure, get an expert or leave it.
Three PCBs, one shared firmware, to switch power on and off:
All three use the same firmware and the same ESP32 pinning, and each has one extension port for up to 4 additional relay or sensor boards.
Additional boards in hardware/ — see each board's own KiCad project for
details; written documentation for these is still a work in progress.
See docs/protocol-can.md for the byte-level CAN
wire format shared by every component, and
software/gateway-core/docs/protocol-mqtt.md
for the gateway's MQTT topic scheme. (Extension-board channel/button
numbering conventions used by the node firmware — e.g. which CAN
NO/button-id ranges map to which extension address — are documented at
the node firmware level; docs/protocol-can.md covers the CAN frame
format itself.)
cargo fmt / cargo clippy for every crate, cargo nextest
with coverage and an MSRV check for the *-core crates.cargo doc for every crate, published to GitHub Pages.cargo-audit
against the RustSec advisory database, on every dependency change and
once daily.software/legacy/ (the original C++/ESP-IDF code) is no longer built by
CI — see its own README.md for the ESP-IDF build steps if you need to
reproduce it.
GNU General Public License v3.0 (or later) — see LICENSE.
This is meant to be freely buildable, flashable, and modifiable hardware and firmware. GPLv3 was chosen deliberately: its copyleft means anything built on this stays open, and its Section 6 "Installation Information" requirement means anyone who conveys a modified version as part of a physical product also has to provide what's needed to install your own modified firmware on it — nobody gets to lock you out of hardware you own. All schematics, layouts, mechanics, tools, and software are provided so you can fix things yourself rather than throwing them away.
Feel free to report issues or open a pull request.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 12 | 100R | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R16, R17, R18, R19, R21, R22, R23, R24, R35, R36, R37, R38 |
| 6 | 100n | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C1, C4, C8, C9, C10, C11 |
| 5 | 10K | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R4, R7, R9, R11, R13 |
| 4 | MountingHole:MountingHole_2.2mm_M2 | , , , | |
| 4 | 10u | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C3, C6, C7, C12 |
| 4 | ?R | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | RESR1, RFB1, RFB2, RRON1 |
| 4 | Conn_01x06_Female | awesome:02x03MicroMatch | J8, J9, J10, J11 |
| 4 | SW_Push | Button_Switch_SMD:SW_SPST_TL3305A | SW1, SW2, SW3, SW4 |
| 3 | C | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C13, CBST1, CFF1 |
| 2 | 2K2 | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R5, R6 |
| 2 | Button-Sensors-MicroMatch2X03 | awesome:02x03MicroMatch | J1, J3 |
| 2 | D | Diode_SMD:D_SOD-123 | D1, D4 |
| 2 | IRDA | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J5, J6 |
| 1 | 100K | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R25 |
| 1 | 1u | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C2 |
| 1 | 4K7 | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R15 |
| 1 | ESP32-WROOM-32 | awesome:ESP32-WROOM-32 | U3 |
| 1 | L | Inductor_SMD:L_1210_3225Metric_Pad1.42x2.65mm_HandSolder | L1 |
| 1 | LM5163 | Package_SO:Texas_R-PDSO-G8_EP2.95x4.9mm_Mask2.4x3.1mm_ThermalVias | U5 |
| 1 | MCP1703A-3302_SOT89 | Package_TO_SOT_SMD:SOT-89-3_Handsoldering | U4 |
| 1 | MCP2562-E-SN | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U2 |
| 1 | PESD2CAN | Package_TO_SOT_SMD:SOT-23 | U1 |
| 1 | R | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R27 |
| 1 | RJ45-CAN | Connector_RJ:RJ45_OST_PJ012-8P8CX_Vertical | J7 |
| 1 | Screw_Terminal_01x02 | TerminalBlock_RND:TerminalBlock_RND_205-00001_1x02_P5.00mm_Horizontal | J2 |
| 1 | wuerthDebug6 | awesome:wuerthDebug6 | U6 |
It measures 48 × 49 mm and has 2 copper layers, 1.6 mm thick.
67 parts, built around the ESP32-WROOM-32, LM5163DDA and PESD2CAN. 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.
From the Th3Link/homeautomation repository on GitHub, at the commit this page was made from: the board is hardware/switchModule/switch.kicad_pcb and its schematic hardware/canheader/canHeader.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Th3Link/homeautomation
Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway.

Th3Link/homeautomation
Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway.

Th3Link/homeautomation
Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway.

Th3Link/homeautomation
Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway.

Th3Link/homeautomation
Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway.

Th3Link/homeautomation
Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway.

Th3Link/homeautomation
Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway.

Th3Link/homeautomation
Components for a CAN-bus home-automation system: relay/rollershutter/ light/button/sensor nodes on a shared CAN bus, bridged to MQTT (and from there to openHAB or Home Assistant) by a gateway.

G-Pereira/greenmobi-bms
A VESC compatible battery management system

G-Pereira/greenmobi-drive
A FOC motor drive compatible with VESC


LVladymyr/WAFEL-Evaluation-Board
Evaluation board for TI BQ76952 multi-chemistry BMS IC

Phil-CIA/Solar-Project-200w
Solar Project 200W is a prototype-first hardware and firmware effort for a 200W-class solar charging system built around a 4S LiFePO4 battery domain.

cherry-embedded/HSCanT-hardware
HSCanT is a USB to 4-channel CAN FD tool designed based on the HPM5321 chip.

ucandevices/CFDC_embedded
Embedded code and PCB for CAN FD to USB converter
