PowerGuard-Platine und Software zur Sicherheitsüberwachung einer Heizstabsteuerung
zugehörige Repositories
- PowerGuard (dieses Repository)
- Heizstabsteuerung (Steuerungsplatine Link )
- Heizstab_ioBroker (Ansteuerungs-Blockly - ein MQTT-Broker wird benötigt - Link)
Funktion:
Der ESP32 steuert 2 Temperatursensoren (DS18B20) an und liest diese aus. Die beiden Sensoren sollen am höchsten Punkt des Pufferspeichers der Heizung angebracht werden, in dem auch der elektrische Heizstab eingeschraubt ist.
Die beiden Werte werden einerseits verglichen und andererseits benutzt, um die Pufferspeichertemperatur zu überwachen. Liegt die Temperatur zu hoch, dann ist zu viel Energie im Pufferspeicher und vermutlich ist der Heizstab dafür ursächlich -> der Heizstabsteuerung wird der Strom abgeschalten. Dies stellt eine unabhängige Sicherungsfunktion dar, das jedweder Fehler im Heizstabsystem behandelt und die Anlage in den sicheren Zustand überführt (d.h. aus).
Der PowerGuard hat 2 Möglichkeiten dies zu tun:
(1) die 5V Versorgung des ESP32 der Heizstabsteuerung abzuschalten -> die Relais werden nicht mehr angesteuert - unabhängig vom Fehlerbild.
(2) die 12V Versorgungsspannung der Lastschaltrelais (SSR siehe Heizstabsteuerung) wird abgeschaltet -> die Heizstabsteuerung bleibt aktiv, kann aber nichts mehr schalten.
Die Kommunikation mit dem ESP32 wird über WiFi abgewickelt und über das Protokoll MQTT umgesetzt. Es stehen mehrere Befehle zur Verfügung, die ebenfalls via MQTT an den ESP gesendet werden kann. Neben "restart" / "reboot" (führt zu einem Neustart des ESP32) kann die ganze Konfiguration und der debug-Level angepasst werden. Alle Anpassungen sind nach einem Neustart verloren, da diese nicht permanent gespeichert werden. Befehle werden unter der MQTT-Hierarchie in folgendem Ort empfangen: SmartHome/Keller/Heizung/ESP32_PowerGuard/command (MQTT_SERIAL_RECEIVER_COMMAND)
Entwicklungsumgebungen:
Die aktuelle Software (V2.x) für den ESP32 wird mit PlatformIO entwickelt (z. B. in VS Code mit dem PlatformIO-Plugin). Die Konfiguration des Projekts befindet sich in der Datei platformio.ini; Compilieren und Flashen erfolgen direkt über PlatformIO.
Die historische Erstversion (V1.0) wurde in der Arduino-IDE erstellt und ist im Unterordner V1.0/ archiviert.
Die Platine (PCB) habe ich in Eagle von AutoCAD modelliert. Für Maker gibt es eine kostenfreie Version. Die CAM-Daten (PCB-Produktionsdaten), sowie die BOM (Stückliste) sind ebenfalls aus Eagle ausgegeben.
Eine Übersichtsversion der Platine ist mit Fritzing umgesetzt und enthält auch einige Notizen zur Pinbelegung.
benötigte Umgebung:
- ioBroker zur Ansteuerung (geht natürlich auch mit anderen SmartHome-Systemen, solange diese MQTT sprechen können)
- ioBroker MGTT-Adapter
- MQTT-Broker: z.B. mosquitto unter Linux/Debian/Raspian...
- 230V Stromversorgung oder alternativ eine 5V Versorgung über z.B. ein USB-Ladegerät (muss 2 ESP32 sicher versorgen können -> 2A reicht völlig aus) oder über die Schraubklemmen anderweitig versorgt.
OneWire:_______________PaulStoffregen/OneWire (git-master) – v2.3.7 inkompatibel mit ESP-IDF 5.x; v2.3.8 buggy
DallasTemperature:_____milesburton/DallasTemperature v4.0.4
PubSubClient:__________knolleary/PubSubClient v2.8
WiFi.h / esp_task_wdt:_Espressif Arduino-Framework (via pioarduino platform-espressif32)
platform: pioarduino platform-espressif32 v55.03.38-1 (ESP-IDF 5.x)
board: esp32dev
framework: arduino
Hardware-Version (PCB V1.0 vs. V2.0):
In platformio.ini kann die Hardware-Version über ein Build-Flag gesetzt werden:
build_flags = -DHARDWARE_VERSION=2 ; für PCB V2.0 (mit MSG-LED an Pin 22)
Ohne Build-Flag wird V1.0-Verhalten angenommen (kein MSG-LED, Blink auf OK-LED).
| PIN | V1.0 | V2.0 |
|---|---|---|
| 19 | LED OK (grün) | LED OK (grün) |
| 22 | – | LED MSG (gelb) |
| 23 | LED ERROR (rot) | LED ERROR (rot) |
| 25 | DS18B20 OneWire Bus | DS18B20 OneWire Bus |
| 32 | PHASE 5V (Heizstabsteuerung) | PHASE 5V (Heizstabsteuerung) |
| 18 | PHASE 12V (SSR-Relaisversorgung) | PHASE 12V (SSR-Relaisversorgung) |
aktuelle Versionen:
- ESP-Software V2.x (PlatformIO,
src/PowerGuard.cpp) - ESP-Software V1.0 (Arduino IDE, archiviert in
V1.0/PowerGuard.ino) - PCB (Eagle) V2.0
- CAM V1.0
- BOM V1.0
- Fritzing V1.1
Fokus der PCB V2.0 ist die Platine mit über einen PCB-Hersteller umzusetzen. Die CAM-Datei ist passend für https://jlcpcb.com. Stand 03.11.2023 ist die Platine für 2$ (5 St.) bestellbar. In der BOM findet sich die Stückliste für die Bestückung wieder.
Zugehöriges Projekt: https://github.com/users/DieWaldfee/projects/1
Installation:
- Zugangsdaten in
/src/secrets.heintragen (Hostname, WLAN-SSID, WLAN-Passwort, MQTT-Server, MQTT-Port, MQTT-User, MQTT-Passwort) - Hardware-Version in
platformio.inials Build-Flag setzen (-DHARDWARE_VERSION=2für PCB V2.0, weglassen für V1.0) - MQTT-Pfade sind in
src/PowerGuard.cppals#definehinterlegt und können dort angepasst werden

- Debug-Level kann via MQTT-Befehl
debug=0…debug=3zur Laufzeit gesetzt werden (0 = Boot only; 1 = Basic; 2 = Advanced; 3 = Absolut); alternativ im Quellcode in Zeile 14 vonsrc/PowerGuard.cpp - ESP-Software wird über PlatformIO compiliert und auf das „ESP32 Dev Kit V4" geflasht.
- Platine entweder via Eagle an PCB-Hersteller übermitteln, oder das fertige CAM-File über die Anbieter-Webseite senden. (z.B. an https://jlcpcb.com)
- Platine bestücken + ESP und Level-Shifter (3.3V <-> 5V) aufsetzen.
- Relais anschließen.
- 12V Versorgung der Heizstabsteuerung wird über LED-Treiber realisiert.
Befehle werden auf dem Topic SmartHome/Keller/Heizung/ESP32_PowerGuard/command empfangen.
Bestätigungen erscheinen auf SmartHome/Keller/Heizung/ESP32_PowerGuard/ac.
| Befehl | Beschreibung | Antwort (ac-Topic) |
|---|---|---|
Test |
Verbindungstest | Test OK |
debug=0 … debug=3 |
Debug-Level setzen (0=Boot only, 1=Basic, 2=Advanced, 3=Absolut) | debug=X umgesetzt |
panicMode=0 |
Panic-Modus zurücksetzen; Heizstabsteuerung neu starten (wenn thermalLimit=0) | panicMode=0 umgesetzt |
panicMode=1 |
Panic-Abschaltung auslösen (5V + 12V aus) | panicMode=1 umgesetzt |
hardwareError=0 |
Hardware-Fehler-Flag zurücksetzen | hardwareError=0 umgesetzt |
hardwareError=1 |
Hardware-Fehler setzen → Panic-Abschaltung | hardwareError=1 umgesetzt |
thermalLimit=0 |
Thermisches Limit zurücksetzen; Heizstabsteuerung neu starten (wenn panicMode=0 und hardwareError=0) | thermalLimit=0 umgesetzt |
thermalLimit=1 |
Thermische Abschaltung auslösen (12V aus) | thermalLimit=1 umgesetzt |
tempLimit=<Wert> |
Abschalttemperatur 12V [°C] (Standard: 90,0) | tempLimit=<Wert> umgesetzt |
tempMaxLimit=<Wert> |
Panic-Abschalttemperatur 5V+12V [°C] (Standard: 95,0) | tempMaxLimit=<Wert> umgesetzt |
tempReconnect=<Wert> |
Wiedereinschalttemperatur [°C] (Standard: 80,0) | tempReconnect=<Wert> umgesetzt |
deltaT=<Wert> |
Max. zulässige Differenz zwischen den beiden Sensoren [K] (Standard: 2,0) | deltaT=<Wert> umgesetzt |
minTemp=<Wert> |
Untere Plausibilitätsgrenze [°C] (Standard: 10,0) | minTemp=<Wert> umgesetzt |
maxTemp=<Wert> |
Obere Plausibilitätsgrenze [°C] (Standard: 100,0) | maxTemp=<Wert> umgesetzt |
restart oder reboot |
ESP32 neu starten (Ausgänge werden vorher abgeschaltet) | reboot in einer Sekunde! |
Hinweis: Alle Parameteränderungen sind flüchtig und gehen nach einem Neustart verloren.
Basis-Pfad: SmartHome/Keller/Heizung/ESP32_PowerGuard/
| Topic (relativ zum Basis-Pfad) | Inhalt | Retain |
|---|---|---|
status |
Online-Status: true / false (LWT) |
ja |
ac |
Befehlsbestätigungen | nein |
error |
Fehlermeldungen / Reconnect-Infos | ja |
Temperatur/0/JSON |
Sensor 0 komplett als JSON | nein |
Temperatur/0/Temperatur |
Temperatur Sensor 0 [°C] | nein |
Temperatur/0/ID |
Sensor-Index 0 | nein |
Temperatur/0/Adresse |
1-Wire-Adresse Sensor 0 | nein |
Temperatur/0/Ort |
Ortsbezeichnung Sensor 0 | nein |
Temperatur/1/… |
Gleiche Subtopics für Sensor 1 | nein |
state/JSON |
Systemzustand komplett als JSON | nein |
state/panicMode |
Panic-Mode Flag (0/1) | nein |
state/thermalLimit |
Thermal-Limit Flag (0/1) | nein |
state/hardwareError |
Hardware-Fehler Flag (0/1) | nein |
state/lastError |
Letzter Fehler als Klartext | nein |
state/WiFi_Signal_Strength |
WiFi-Signalstärke [dBm] | nein |
state/WiFi_IP_Adress |
IP-Adresse | nein |
state/WiFi_MAC_Adress |
MAC-Adresse | nein |
config/JSON_0 |
Konfigurationsparameter als JSON | nein |
Bezugsquellen:
- Platinennetzteil AC-05-3 AZ-Delivery
- Levelshifter (3.3V <-> 5V) Amazon
- Relais Amazon oder AZ Delivery
- 12V LED-Treiber als Schaltspannung der SSR-Relais Amazon
- JST-Buchse Amazon
- Klemmbuchse Amazon
- Widerstände 4,7kOhm, 220 Ohm, 330 Ohm, Led grün, gelb und rot Amazon / eBay / Conrad...
- Temperatursensoren DS18B20 AZ Delivery
fertige Platine:
(oberes Relais steuert +5V -> Heizstabsteuerung; unteres Relais steuert die 12V für die SSR-40-DA Lastschaltrelais)
Haftungsausschluss
Deutsch: Dieses Projekt arbeitet mit Netzspannung (220 V) und darf ausschließlich von qualifiziertem Fachpersonal aufgebaut, installiert und betrieben werden. Durch die anliegende Spannung besteht Lebensgefahr! Fehler in Schaltung oder Software können zu Sachschäden (z. B. an Gebäude oder Heizung) oder zu gefährlichen Situationen für Leib und Leben führen. Nutzung auf eigene Gefahr – jegliche Haftung wird ausgeschlossen.
English: This project operates with mains voltage (220 V) and must only be assembled, installed, and operated by qualified professionals. The present voltage poses a risk of fatal electric shock! Errors in circuitry or software may cause property damage (e.g., to buildings or heating systems) or create life-threatening situations. Use at your own risk – any liability is disclaimed.
