Kabellose Temperaturmessung für die Loxone Haussteuerung
Beschreibung
Meine bestehende Haussteuerung auf Basis von Loxone möchte ich um zusätzliche Temperaturfühler erweitern. Die Messungen sollen an verschiedenen Stellen im Haus erfolgen – insbesondere zur Erfassung der Vor- und Rücklauftemperaturen der Heizkreise sowie der Raum- und Außentemperatur.
Eine klassische Umsetzung wäre über verkabelte Sensoren in Verbindung mit einer 1-Wire Extension möglich. Allerdings bedeutet dies einen erheblichen Installationsaufwand, da die Leitungen möglichst unsichtbar verlegt werden müssen. Neben dem handwerklichen Aufwand entstehen dabei auch nicht unerhebliche Material- und Erweiterungskosten.
Im Rahmen der Entwicklung meines hydrostatischen Füllstandsmessers konnte ich bereits umfangreiche Erfahrungen sammeln, wie sich UDP-Datenpakete zuverlässig per WLAN an eine Loxone Kleinsteuerung übertragen lassen. Diese Art der Datenübertragung ist äußerst flexibel und kann sogar ohne zusätzliche Erweiterungen oder Add-Ins direkt mit den Bordmitteln der Loxone Config umgesetzt werden.
Auf dieser Grundlage entsteht nun ein vollständig kabelloses Temperaturmesssystem. Die Sensoren werden als kompakte, einfach nachbaubare Baugruppen mit Funkschnittstelle realisiert. Jedes Sensormodul arbeitet batterie- oder akkubetrieben, verbleibt die meiste Zeit im energiesparenden Schlafmodus und aktiviert sich nur kurzzeitig zur Messung.
Die erfassten Daten werden anschließend über das extrem energieeffiziente ESP-NOW-Protokoll übertragen. Der gesamte Mess- und Sendevorgang dauert lediglich etwa 0,25 Sekunden. Als Controller kommt das kostengünstige Modul SEEED XIAO ESP32-C6 zum Einsatz. Es bietet eine integrierte Ladefunktion für Akkubetrieb und überzeugt mit einem Deep-Sleep-Stromverbrauch von unter 19 µA — ideale Voraussetzungen für eine sehr lange Batterielaufzeit.
Ein separat aufgebautes Gateway (basierend auf einem zweiten ESP32) sammelt die Funksignale aller Sensoren, bündelt die Messdaten und überträgt diese anschließend per WLAN und UDP-Protokoll an die Loxone Steuerung.
Für eine einfache Inbetriebnahme lassen sich später direkt am Sensormodul sowohl das Sendeintervall als auch die Sensornummer komfortabel über kleine DIP-Schalter einstellen.
Temperatursensor
Auf dem oben gezeigten Breadboard ist der erste Musteraufbau des kabellosen Temperatursensors zu sehen. Die Temperaturmessung erfolgt über einen DS18B20-Sensor, zusätzlich wird die aktuelle Akkuspannung überwacht, um den Energiezustand des Sensormoduls jederzeit beurteilen zu können.
Die Stromversorgung übernimmt ein kompakter 100 mAh LiPo-Akku, der direkt über den USB-C-Anschluss des eingesetzten ESP32-C6 komfortabel geladen werden kann. Durch den extrem niedrigen Deep-Sleep-Stromverbrauch von nur etwa 19 µA ergibt sich bereits bei einem Messintervall von 15 Minuten eine beeindruckende Laufzeit von rund 142 Tagen.
Weitere Optimierungen sind bereits vorgesehen: Wird das Sensormodul künftig nur dann Daten senden, wenn sich die Temperatur um mehr als 1 °C verändert hat, lässt sich die Batterielaufzeit deutlich verlängern. Unter diesen Bedingungen kann der kleine Akku voraussichtlich über ein Jahr lang betrieben werden.
Der aktuelle Aufbau dient ausschließlich zu Test- und Entwicklungszwecken. In einer späteren Ausbaustufe entsteht eine kompakte, speziell entwickelte Leiterplatte. Über kleine DIP-Schalter oder alternativ Lötbrücken können dann wichtige Softwareparameter – beispielsweise Sensornummer oder Sendeintervall – direkt am Modul eingestellt werden.
Bild vom Musteraufbau über ein Beadboard.
Layout Temperatursensor mit einem integrierten DS18B20
Auf einem sehr kleinen Layout finden sich der Seeed XAIO ESP32C6, der DS18B20, die 4 notwendigen Widerstände und der Kondensator. Der Akku wird über ein JST 2.0 Stecker angeschlossen. Es gibt sechs Lötbrücken (X1…X6) um die Sensornummer und den Sendeintervall auch ohne Programmänderung vornehmen zu können. Im ersten Quellcode weiter unten ist die Anpassung der Sensornummer und des Sendeintervalls noch nicht realisiert.
Download der Schaltung vom Temperatursensor mit ESP32C6 als PDF (10Kb)
// 16.05.2026 Jens Dietrich Loxone Sender von Temperaturdaten
// Pin 15 LED ist low active
// D1 als analog Input mit 2,7M + 2,7M um Spannung der Batterie zu messen
// Eine Sendung benötigt etwa 245ms Zeit
// Neuer fester WLAN-Kanal 5
#include <WiFi.h>
#include <esp_now.h>
#include <esp_sleep.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define SLEEP_TIME 60 // Sekunden 300 = 5 Minuten
#define LED_PIN 15
#define DEVICE_ID 1 // Gerätenummer
#define ONE_WIRE_BUS 1 // Am XIAO mit Pin D1 verwendet
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tempDeviceAddress;
// MAC-Adresse vom Empfänger M5 CoreInk
uint8_t receiverMAC[] = {0x64,0xB7,0x08,0xB8,0xDF,0xFC};
typedef struct { // Datenstruktur (11 Byte)
uint8_t device;
uint32_t counter;
float temperature;
uint16_t battery;
} SensorData;
SensorData data;
RTC_DATA_ATTR uint32_t bootCount = 0;
void onSent(const wifi_tx_info_t *tx_info, esp_now_send_status_t status)
{
Serial.print("Sendestatus: ");
Serial.println(status == ESP_NOW_SEND_SUCCESS ? "OK" : "Fail");
}
void setup() {
pinMode(LED_PIN , OUTPUT);
digitalWrite(LED_PIN, LOW); // LED ein
pinMode(A0, INPUT); // A0 ist ADC-Input
Serial.begin(115200);
data.device = DEVICE_ID; // Device-ID
// 1-Wire-Bus für die Temperaturmessung
sensors.begin();
sensors.requestTemperatures();
// Temperatur auf 0.5 Grad runden
data.temperature =
round(sensors.getTempCByIndex(0) * 2.0) / 2.0;
// Counter im nichtflüchtigen Speicher
bootCount++;
data.counter = bootCount;
WiFi.mode(WIFI_STA);
WiFi.disconnect();
if (esp_now_init() != ESP_OK) {
Serial.println("ESP-NOW Init Fehler");
return;
}
// Batteriespannung ermitteln
uint32_t Vbatt = 0;
for (int i = 0; i < 16; i++) {
Vbatt += analogReadMilliVolts(A0); // 16x lesen
}
// Berechnen und kompensieren
Vbatt = float(2 * Vbatt / 16);
data.battery = Vbatt;
esp_now_register_send_cb(onSent);
esp_now_peer_info_t peerInfo = {};
memcpy(peerInfo.peer_addr, receiverMAC, 6);
peerInfo.channel = 5; // Fester WLAN-Kanal 5
peerInfo.encrypt = false;
esp_now_add_peer(&peerInfo);
// Versenden
esp_now_send(receiverMAC,
(uint8_t *)&data,
sizeof(data));
digitalWrite(LED_PIN, HIGH); // LED vor Sleep aus
esp_deep_sleep(SLEEP_TIME * 1000000ULL);
}
void loop() {
}
Layout Temperatursensor für zwei kabelgebundene DS18B20
Bei diesem Layout habe ich eine Akkuzelle in Form von einer AAA Batterie = Bauform 10440 mit Batteriehalter vorgesehen. Die kleinen LiPo Akkurundzellen haben eine Kapazität ab 350mAh und können wieder direkt im Board über den USB-C Anschluss geladen werden. Die beiden DS18B20 Temperatursensoren werden über solide WAGO 2086 Klemmen verbunden. Bei Bedarf kann man den Teil der Leiterplatte mit der vorgesehenen Akkuzelle abtrennen. Der Akku wird dann wieder über eine JST 2.0 Steckverbindung angeschlossen. Es gibt auch wieder die sechs Lötbrücken (X1…X6) um die Sensornummer und den Sendeintervall auch ohne Programmänderung leichter ändern zu können.
Download der Schaltung Variante 2 vom Temperatursensor mit ESP32C6 als PDF (12Kb)
Temporäres Gateway zur Datensammlung
Hier ist das aktuell eingesetzte, provisorische Gateway zu sehen. Es empfängt die Funksignale der einzelnen Sensormodule, sammelt die Messdaten und überträgt diese anschließend per UDP zuverlässig an die Loxone Steuerung weiter.
Zum Testen und zur Entwicklung ist das Gateway momentan mit einem besonders energiesparenden E-Paper-Display ausgestattet. Dort werden aktuell beispielhaft die Daten des ersten Sensors angezeigt – darunter die gemessene Temperatur, die Sensornummer, ein Übertragungszähler sowie die Batteriespannung des Sensormoduls. Diese Anzeige erleichtert die Inbetriebnahme, Diagnose und Funktionskontrolle während der Entwicklungsphase erheblich.
Für den späteren Dauerbetrieb ist ein Display jedoch nicht zwingend erforderlich. Das finale Gateway wird kompakter aufgebaut sein und dauerhaft über ein kleines USB-C-Netzteil mit Strom versorgt werden. Dadurch entsteht eine wartungsfreie zentrale Einheit, die unauffällig im Hintergrund arbeitet und sämtliche Sensordaten zuverlässig an die Loxone Haussteuerung weiterleitet.
Analyse des Stromverbrauchs beim Sendevorgang
Das folgende Messbild zeigt den Stromverbrauch des Sensormoduls während eines kompletten Sendevorgangs. Zur Messung wurde in die Plusleitung des Akkus ein 1-Ohm-Shunt-Widerstand integriert. Über den Spannungsabfall an diesem Widerstand kann mit dem Oszilloskop direkt der momentane Stromverlauf aufgezeichnet werden.
Die einzelnen Aktivitätsphasen des Senders wurden im Oszillogramm mit kleinen Buchstaben markiert und anschließend energetisch ausgewertet. Daraus ergibt sich der Energiebedarf eines vollständigen Mess- und Übertragungsvorgangs:
| Abschnitt | Dauer & Spannung | Energiebedarf |
|---|---|---|
| 1 | 25 ms @ 22 mV | ca. 0,00015 mAh |
| 2 | 20 ms @ 35 mV | ca. 0,00019 mAh |
| 3 | 50 ms @ 22 mV | ca. 0,00030 mAh |
| 4 | 110 ms @ 25 mV | ca. 0,00070 mAh |
| 5 | 9 ms @ 75 mV | ca. 0,00019 mAh |
| 6 | 0,66 ms @ 500 mV | ca. 0,00009 mAh |
| 7 | 50 ms @ 70 mV | ca. 0,00100 mAh |
Gesamtenergie pro Sendevorgang:
nur 0,002599 mAh
Diese Messung bestätigt, dass der eigentliche Funk- und Messvorgang nur einen sehr kleinen Anteil am Gesamtenergieverbrauch hat — eine entscheidende Voraussetzung für lange Batterielaufzeiten.
Berechnete Laufzeiten mit einem 100 mAh LiPo-Akku
Ausgehend vom gemessenen Energiebedarf ergeben sich folgende theoretische Betriebszeiten:
- Sendeintervall 1 Minute
→ ca. 23,8 Tage bzw. rund 34.560 Sendungen
(aktueller Langzeittest läuft) - Sendeintervall 5 Minuten
→ ca. 83 Tage - Sendeintervall 15 Minuten
→ ca. 142 Tage
Die Ergebnisse zeigen deutlich, wie stark sich längere Messintervalle auf die Batterielaufzeit auswirken. In Kombination mit intelligenten Sendealgorithmen – beispielsweise einer Übertragung nur bei relevanten Temperaturänderungen – lassen sich Laufzeiten von deutlich über einem Jahr realisieren.
Infos und Historie
25.05.2026 – Der Sensor hat mit Stand jetzt 11981 Einzelsensendungen erreicht und die Batteriespannung vom 100 mAh Akku beträgt 3,884 Volt.
28.05.2026 – Schaltungen und Layouts erstellt
Stand 28.05.2026 – wird bald weitergeführt


