Unsere Getränkekühlbox stand neulich mal wieder längere Zeit offen - ein Zustand der auf jeden Fall zu vermeiden ist, denn neben nicht gekühlten Getränken ergibt sich dabei ein enormer Stromverbrauch, da der Kühlkompressort ständig läuft.
Das Makerspace Technik-Team hat sich dazu Gedanken gemacht und wartet mit folgender Lösung auf:
Die Kühlbox wird durch 2 übereinanderliegende Schiebeelemente, von denen eins ganz nach links, das andere ganz rechts (oder umgekehrt) geschoben werden muss, damit die Truhe geschlossen ist.
Unser Ansatz sind 2 Infrarot Opto Reflex Sensoren, die links und rechts hinten knapp unter der unteren Laufschine angebracht werden und nach oben schauen. An beide Schiebeelemente werden links und rechts Reflektoren angeklebt, die - nur wenn geschlossen - genau über den Sensoren stehen und dann ein "geschlossen" Signal an den Prozessor melden.
Beide Sensoren sind an einem 4-poligen Flachbahnkabel angeschlossen und der Plan ist, dieses so in den Laufschienen nach aussen zu führen (einkleben mit doppelseitigem Klebeband), dass die Schieber nicht behindert werden.
Als Prozessor wird ein ESP8266 D1 mini Board verwendet. In der Haupt-Task wird jede Sekunde abgefragt, ob ein (oder beide) Schieber geöffnet wurden. Wenn dem so ist, wird eine Timer gestartet (momentan 15 Sekunden).
Läuft der Timer ab, ohne dass beide Schieber wieder zurück in ihrer 'geschlossen' Position sind, wird ein Licht- und Tonsignal ausgelöst, um Anwesende hinzuweisen, dass die Getränkebox zu schließen ist.
Sobald beide Schieber wieder geschlossen sind, stoppt die Alamierung.
Ein ESP8266-basiertes IoT-Überwachungssystem für Kühlräume und Gefriergeräte mit MQTT-Integration, Temperaturmessung und Türalarm.
CoolerControl ist ein intelligentes Überwachungssystem, das die Temperatur und den Türstatus von Kühlräumen überwacht und über MQTT-Nachrichten kommuniziert. Das System bietet Alarmfunktionen bei offenstehenden Türen und ermöglicht die Fernkonfiguration über MQTT.
- Temperaturüberwachung: Kontinuierliche Temperaturmessung mit Dallas DS18B20 Sensor
- Türüberwachung: Analoger Sensor zur Erkennung offener Schiebetüren
- MQTT-Integration: Vollständige MQTT-Kommunikation mit LWT (Last Will Testament)
- Alarm-System: Akustischer (Beeper) und visueller (LED) Alarm bei offenstehenden Türen
- Verzögerbarer Alarm: Konfigurierbare Verzögerungszeit vor Alarmauslösung
- OTA-Updates: Over-the-Air Firmware-Updates via ElegantOTA
- NTP-Zeitstempel: Automatische Zeitsynchronisation mit Sommer-/Winterzeit-Unterstützung
- Persistente Einstellungen: Speicherung der Konfiguration im EEPROM
- WiFi Auto-Reconnect: Automatische Wiederverbindung bei Verbindungsverlust
- MQTT Auto-Reconnect: Robuste MQTT-Wiederverbindungsmechanismen
- Web-Interface: Einfacher Zugriff auf OTA-Update-Seite
- LWT-Status: Last Will Testament für zuverlässige Statusmeldungen
- Mikrocontroller: ESP8266 (Wemos D1 Mini oder kompatibel)
- Temperatursensor: Dallas DS18B20 (OneWire)
- Beeper: Piezo-Beeper oder Buzzer
- LED: Status-LED für visuelle Alarme
- IR-LED: Infrarot-LED für Sensorschaltung
- Analoger Sensor: Zur Türerkennung (z.B. Hall-Sensor, Reed-Kontakt mit Spannungsteiler)
| Pin | GPIO | Funktion |
|---|---|---|
| D1 | GPIO5 | Beeper |
| D2 | GPIO4 | Status-LED |
| D5 | GPIO14 | OneWire (DS18B20) |
| D7 | GPIO13 | IR-LED |
| A0 | ADC0 | Analoger Sensor (Tür) |
Das Projekt verwendet folgende Bibliotheken (automatisch über PlatformIO verwaltet):
- TaskScheduler - Kooperatives Multitasking
- PubSubClient - MQTT-Client
- ElegantOTA - OTA-Update-Webinterface
- AsyncTCP / ESPAsyncWebServer - Asynchroner Webserver
- OneWire - OneWire-Kommunikation
- DallasTemperature - Dallas Temperatursensor-Bibliothek
- ArduinoJson - JSON-Serialisierung
- ESP_EEPROM - EEPROM-Verwaltung
- NTP - Netzwerk-Zeitprotokoll
- VSCode mit PlatformIO Extension
- Git (für Bibliotheks-Downloads)
-
Repository klonen oder Projekt öffnen
cd /Users/dieter/Documents/PlatformIO/Projects/CoolerControl -
Credentials-Datei erstellen
Erstelle
src/Credentials_ms.hmit folgendem Inhalt:#ifndef CREDENTIALS_H #define CREDENTIALS_H // WiFi Credentials #define WIFI_SSID "IhrWiFiName" #define WIFI_PW "IhrWiFiPasswort" // MQTT Broker #define MQTT_BROKER "mqtt.broker.adresse" #define MQTT_PORT 1883 #define MQTT_USER "mqtt_benutzer" #define MQTT_PASS "mqtt_passwort" #endif
-
Projekt kompilieren
platformio run
-
Auf ESP8266 hochladen
platformio run --target upload
-
Serial Monitor starten (optional)
platformio device monitor
| Topic | Typ | Beschreibung |
|---|---|---|
cooler/status |
Publish | Periodischer Status (Temperatur, Einstellungen, etc.) |
cooler/doors |
Publish | Türstatus und Alarmzustand |
cooler/lwt |
Publish | Last Will Testament (online/offline) |
cooler/in |
Subscribe | Kommandos und Konfiguration |
Sende JSON-Nachrichten an cooler/in:
Alarmverzögerung setzen (in Sekunden):
{delay:15}Analog-Schwellwert setzen (0-1023):
{level:512}System aktivieren/deaktivieren:
{enable:1}oder
{enable:0}System-Reset:
{reset:1}Status-Topic (cooler/status):
{
"revision": "1.6_250617",
"enable_flag": 1,
"ip": "192.168.1.100",
"rssi": -45,
"cnt_reconnect": 0,
"temp": 4.5,
"client": "cooler_1",
"alarm_delay": 10,
"adc_value": 123,
"analog_level": 100,
"eeprom_use": 2.5,
"last TS": "07.02.26 15:30:45"
}Tür-Topic (cooler/doors):
{
"doors": 1,
"Alarm": 1
}doors: 0 = geschlossen, 1 = offenAlarm: 0 = kein Alarm, 1 = Alarm aktiv
LWT-Topic (cooler/lwt):
online- Gerät ist verbundenoffline- Gerät hat Verbindung verloren
Das System verwendet einen TaskScheduler für nicht-blockierendes Multitasking:
- Task t1 (500ms): Hauptschleife - liest Analogwert und prüft Türstatus
- Task t2 (10s): Veröffentlicht periodischen Status
- Task t3: Einmalig - startet Alarm nach Verzögerungszeit
- Task t4 (1s): LED/Beeper-Blinken während Alarm
- Task t5 (10s): Veröffentlicht Türstatus
- Tür öffnet sich → ADC-Wert steigt über Schwellwert
- Verzögerungstimer startet (konfigurierbar, Standard: 10s)
- Nach Ablauf der Verzögerung: Alarm aktiviert (LED blinkt, Beeper piept)
- Tür schließt sich → Alarm deaktiviert
- WiFi: Automatische Wiederverbindung bei Verbindungsverlust
- MQTT: Wiederverbindungsversuche alle 5 Sekunden mit Zähler
- LWT: Broker meldet automatisch "offline" bei unerwartetem Verbindungsverlust
Nach dem ersten Upload kann das Gerät per OTA (Over-The-Air) aktualisiert werden:
- IP-Adresse des Geräts ermitteln (siehe Serial Monitor oder MQTT-Status)
- Im Browser öffnen:
http://<IP-ADRESSE>/update - Neue Firmware-Datei:
.pio/build/d1_mini/firmware.bin - Über Webinterface hochladen
In main.cpp (Zeile 35):
const char *clientId = "cooler_1"; // Eindeutige ID vergeben!In main.cpp (Zeile 53):
float tempOffset = -5.0; // Nach Bedarf anpassenIn setup() (Zeilen 164-165):
ntp.ruleDST("CEST", Last, Sun, Mar, 2, 120);
ntp.ruleSTD("CET", Last, Sun, Oct, 3, 60);In main.cpp (Zeile 31):
const char *topic = "cooler"; // Basis-TopicDebug-Ausgaben aktivieren durch Auskommentieren in main.cpp:
#define DEBUGSerial Monitor mit 115200 Baud öffnen:
platformio device monitor -b 115200- v1.6 (17.06.2025): Aktuelle Version mit LWT-Unterstützung
Dieses Projekt ist freie Software. Verwendung auf eigene Verantwortung.
CoolerControl - ESP8266 Kühlraum-Überwachung
Hinweis: Vor der Verwendung müssen die WiFi- und MQTT-Zugangsdaten in src/Credentials_ms.h konfiguriert werden.