Inhaltsverzeichnis
Eigene Klimamessstation für Schulen: Nachbauanleitung
| Seite | Inhalt | |
|---|---|---|
| Startseite | Übersicht | |
| Hauptanleitung | Gesamtüberblick, Begriffsklärung, Teil 1–3 (FRITZ!Box, Raspberry Pi/EmonCMS, Sensor-Boxen), Ein-/Ausschalten, Zugänge-Checkliste, SENSOR_ID-Übersicht | |
| Sensoren in EmonCMS einbinden | Wiederkehrender Ablauf für jede neue Sensor-Box: API-Key, Inputs, Feeds, Dashboard | |
| Programmcode der Sensor-Boxen | Vollständiger Arduino-Code: Testsensor, einfacher BME280-Sensor, Klimamessbox, Raummessbox | |
| Raspberry Pi um Echtzeituhr (RTC) erweitern – HW-111 | Nachrüstung eines DS1307-RTC-Moduls, Shutdown-Taster | |
| Schaltung | Platine | |
| Gehäuse | 3D-Druck oder LASER-Cutter | |
| Schule | Einsatz im Unterricht | |
| Sonstiges | dies und das…. |
Diese Anleitung beschreibt den vollständigen Aufbau eines eigenständigen, WLAN-basierten Sensornetzwerks zur Erfassung von Klima- und Raumluftdaten, wie es an der Sankt-Ansgar-Schule Hamburg im Rahmen der Nachhaltigkeits-AG eingesetzt wird. So werden CO2-Konzentration und Raumtemperatur im Winter gesammelt, um die Entwicklung des Wärmebedarfs und das Lüftungsverhalten protokollieren zu können und im Sommer werden Raumtemperatur und Luftfeuchtigkeit in Verbindung mit der Außentemperatur gesammelt, um in die Anpassung des Hitzeschutzplanes der Schule einfließen zu können.
Das System ist bewusst ohne Internetzugang und ohne Abhängigkeit von der Schul-IT aufgebaut – es funktioniert als geschlossenes Inselnetz und kommt größtenteils mit gebrauchter/ausgemusterter Hardware aus (Ausnahme: der Raspberry Pi, der als günstige Neuanschaffung eingeplant werden sollte).
Systemüberblick:
- Eine ausgemusterte FRITZ!Box stellt ein isoliertes WLAN bereit (kein Internet nötig)
- Ein Raspberry Pi 3 mit EmonCMS sammelt, speichert und visualisiert die Messdaten (preisgünstig und vorkonfiguriert)
- ESP8266/ESP32-Mikrocontroller mit Sensoren senden ihre Daten per WLAN an EmonCMS
Die Anleitung ist in drei Teile gegliedert, die nacheinander umgesetzt werden können.
Begriffsklärung: "Klima" oder doch etwas anderes?
Der Name „Klimastation„ hat sich für dieses Projekt eingebürgert, ist aber fachlich nicht ganz präzise – das lohnt sich, Schülerinnen und Schülern gleich zu Beginn zu erklären:
Klima bezeichnet in der Wissenschaft statistische Langzeitmuster des Wetters – die Weltorganisation für Meteorologie (WMO) definiert Klima über Mittelwerte aus mindestens 30 Jahren. Was die Sensor-Boxen hier tatsächlich liefern, sind dagegen Momentanwerte einzelner Messgrößen: Temperatur, Luftfeuchtigkeit, Luftdruck, CO2-Gehalt, Feinstaub und Helligkeit, aufgezeichnet alle 20 bis 300 Sekunden. Das ist fachlich korrekt als Wetter- bzw. Umweltdaten zu bezeichnen (genauer: eine Mischung aus meteorologischen Größen und Luftqualitätsdaten) – nicht als Klimadaten im engeren Sinn. Erst wenn diese Werte über sehr lange Zeiträume gemittelt und ausgewertet würden, ließe sich daraus etwas über das lokale Klima ableiten.
Der Begriff „Raumklima“ (für die Innenraum-Messungen der Raummessbox) ist davon ausgenommen – er ist im Deutschen ein etablierter, fachlich anerkannter Begriff aus der Gebäudetechnik für genau die hier gemessenen Größen (Temperatur, Feuchte, CO2 in Innenräumen).
Kurz gesagt: Trotz des Namens "Klimastation" erfassen die Boxen keine Klimadaten im engeren Sinn, sondern lokale Wetter- und Luftqualitätsdaten - als praktischer Beitrag zur Umweltbildung und zum Verständnis der eigenen Umgebung. Der Projektname wird trotzdem beibehalten, da er im Bildungskontext etabliert und gut verständlich ist.
Hinweis: DokuWiki erzeugt bei mehr als drei Überschriften automatisch ein Inhaltsverzeichnis rechts auf der Seite. Falls das aus irgendeinem Grund nicht erscheint, mit ~~NOTOC~~ am Seitenanfang unterdrücken lässt sich das TOC steuern; hier zusätzlich eine kurze manuelle Übersicht für den schnellen Einstieg:
Inhaltsübersicht:
- Begriffsklärung: "Klima" oder doch etwas anderes? – fachliche Einordnung für den Unterricht
- Teil 1: FRITZ!Box als isoliertes Sensor-WLAN einrichten – Werksreset, WLAN-Konfiguration, IP-Adressbereich
- Teil 2: Raspberry Pi 3 mit EmonCMS – Image, Ersteinrichtung, feste IP, RTC-Modul gegen Zeitversatz
- Teil 3: Sensor-Boxen – Klimamessbox (Außenbereich) und Raummessbox (Innenbereich)
- Fotos & Schaltpläne – noch zu ergänzende Bilddokumentation
- Übersicht vergebener SENSOR_IDs – Vorlage zur Konfliktvermeidung bei mehreren Boxen
- Wichtige Zugänge – Checkliste – welche vier Zugänge bei der Installation gesetzt werden (NICHT öffentlich mit echten Passwörtern pflegen!)
- Sensoren in EmonCMS einbinden – eigene Seite mit dem wiederkehrenden Ablauf für jede neue Box (API-Key, Inputs, Feeds, Dashboard)
- Programmcode der Sensor-Boxen – eigene Seite mit dem vollständigen Arduino-Code (Testsensor, einfacher BME280-Sensor, Klimamessbox, Raummessbox)
- Raspberry Pi um Echtzeituhr (RTC) erweitern – HW-111 – eigene Seite zur Nachrüstung eines DS1307-RTC-Moduls gegen Zeitversatz nach Neustarts
- Sicheres Ein- und Ausschalten des Gesamtsystems – wichtig für den Koffer-/mobilen Einsatz
Hinweis zu den Sprungmarken: DokuWiki erzeugt Anker automatisch aus den Überschriften (Kleinschreibung, Leerzeichen → Bindestriche, Sonderzeichen entfernt). Sollte ein Link nach dem Einfügen ins Wiki nicht funktionieren, den Anker-Namen einmal über die tatsächlich erzeugte Überschrift im Wiki prüfen und ggf. anpassen.
Teil 1: FRITZ!Box als isoliertes Sensor-WLAN einrichten
Für dieses Projekt braucht es keinen Internetanschluss und kein aktuelles Router-Modell. Fast jede Schule hat irgendwo eine ausrangierte FRITZ!Box im Schrank liegen – genau die wird hier zur reinen WLAN-Basisstation für das Sensornetz.
In diesem Beispiel: eine FRITZ!Box WLAN 3370 (Dual-Band N-Router, Baujahr ca. 2011), deren Zugangsdaten nicht mehr bekannt sind.
Warum eine alte, "nutzlose" FRITZ!Box perfekt geeignet ist
- Sie muss nicht ans Internet/DSL angeschlossen werden – sie funktioniert als reine WLAN-Basisstation im lokalen Netz
- Kein Zugriff von außen möglich, da kein Internet-Uplink besteht → datenschutz- und sicherheitstechnisch unkritisch
- Alte Geräte unterstützen meist zuverlässig 2,4 GHz – genau das, was ESP8266/ESP32 brauchen
- Nachhaltiger Zweitnutzen für Geräte, die sonst im Elektroschrott landen würden
Schritt 1: Werksreset ohne bekanntes Passwort
Wichtiger Hinweis zur FRITZ!Box 3370: Dieses Modell hat – anders als viele andere FRITZ!Box-Router – keinen externen Reset-Knopf und keinen Telefonanschluss (FON/DECT), über den sich sonst per Tastencode ein Reset auslösen ließe. Zwei Wege haben sich bewährt:
Weg A – AVM-Wiederherstellungsprogramm (getestet, funktioniert zuverlässig):
- Auf
download.avm.de/fritzbox/das eigene Modell auswählen, dann in den Ordnerdeutschlandund weiter in den Unterordnerrecoverwechseln - Die passende
.exe-Datei herunterladen (Namensschema z. B.fritz.box_wlan_3370-06.56.recover.exe– die Versionsnummer im Dateinamen kann je nach zuletzt installierter Firmware variieren) – das Tool läuft nur unter Windows - FRITZ!Box per LAN-Kabel direkt mit dem Windows-Rechner verbinden (kein Switch/Hub dazwischen)
- Die Windows-Firewall kurzzeitig deaktivieren, falls das Tool die Box nicht findet
- Das Wiederherstellungsprogramm starten und den Anweisungen folgen – es spielt die Firmware neu auf und versetzt die Box in den Auslieferungszustand
- Die FRITZ!Box startet danach neu (einige Minuten); anschließend ist sie ohne Passwort erreichbar
Weg B – „Kennwort vergessen?“ über die Bedienoberfläche (kein Windows-Rechner nötig, ggf. einen Versuch wert, bevor man das Recovery-Tool lädt):
- FRITZ!Box für 1 Minute vom Stromnetz trennen, dann wieder anschließen
- Innerhalb der nächsten 10 Minuten die Bedienoberfläche aufrufen –
http://fritz.box,http://192.168.178.1oder Notfall-IPhttp://169.254.1.1 - Auf „Kennwort vergessen?“ klicken, dann „Werkseinstellungen wiederherstellen“
- Nach dem Neustart (1–2 Minuten) ist die Oberfläche ohne Passwort erreichbar
PC unter Linux mit der FRITZ!Box verbinden
Damit die Bedienoberfläche im Browser überhaupt erreichbar ist, muss der Rechner per LAN-Kabel (nicht WLAN) verbunden sein und eine IP-Adresse im selben Subnetz wie die FRITZ!Box haben.
Zuerst probieren – meist reicht das schon: Direkt nach dem Werksreset verteilt die Box selbst per DHCP Adressen im Bereich 192.168.178.20–200. Bei aktivem NetworkManager (Standard unter Kubuntu) genügt es normalerweise, das LAN-Kabel einzustecken – der Rechner bekommt automatisch eine passende IP, und http://192.168.178.1 bzw. http://fritz.box ist direkt erreichbar.
Falls das nicht klappt (z. B. weil nur die Notfall-IP reagiert, oder DHCP der Box gerade nicht läuft), muss die IP manuell gesetzt werden. Zunächst den Namen der LAN-Schnittstelle ermitteln:
ip link
(üblich sind Namen wie eth0, enp0s25 oder bei USB-Adaptern enx…; im Folgenden als Platzhalter IFACE verwendet)
Variante A – schnell & temporär (bis zum nächsten Kabel-Stecken oder Neustart):
sudo ip addr flush dev IFACE sudo ip addr add 169.254.1.2/16 dev IFACE sudo ip link set IFACE up
Danach im Browser http://169.254.1.1 aufrufen. Für den regulären Adressbereich stattdessen:
sudo ip addr add 192.168.178.20/24 dev IFACE
und http://192.168.178.1 aufrufen.
Variante B – über NetworkManager (nmcli), als eigenes wiederverwendbares Profil:
nmcli connection add type ethernet ifname IFACE con-name fritzbox-reset \ ipv4.method manual ipv4.addresses 192.168.178.20/24 nmcli connection up fritzbox-reset
Nach getaner Arbeit wieder aufräumen:
nmcli connection down fritzbox-reset nmcli connection delete fritzbox-reset
Variante C – grafisch: Netzwerkeinstellungen → Kabelgebunden → Zahnrad-Symbol → Reiter „IPv4“ → „Manuell“ → Adresse 192.168.178.20, Netzmaske 255.255.255.0 (bzw. /24), kein Gateway nötig → Anwenden → die LAN-Verbindung einmal aus- und wieder einschalten.
Vor dem Browser-Aufruf testen:
ping -c 3 192.168.178.1
bzw. für die Notfall-IP:
ping -c 3 169.254.1.1
Kommt eine Antwort, ist die Bedienoberfläche im Browser erreichbar.
Nach erfolgreichem Reset sind Benutzername/Passwort wieder auf Werkszustand, und die Box ist ohne Kennwort erreichbar.
Schritt 2: Ersteinrichtung
- FRITZ!Box per LAN-Kabel mit einem Computer verbinden (nicht WLAN, für die Ersteinrichtung ist LAN zuverlässiger)
- Im Browser http://fritz.box oder http://192.168.178.1 aufrufen
- Den Einrichtungsassistenten ggf. abbrechen/überspringen – ein Internetanschluss wird nicht konfiguriert
- Unter System → Kennwörter ein neues, für das Kollegium dokumentierbares Admin-Kennwort vergeben (z. B. im internen, nicht-öffentlichen Wiki-Bereich hinterlegen, NICHT auf der öffentlichen Anleitungsseite!)
Schritt 3: WLAN konfigurieren – wichtig: 2,4 GHz verwenden
Unter WLAN → Funknetz:
- Frequenzband auf 2,4 GHz stellen. Die FRITZ!Box 3370 funkt wahlweise auf 2,4 GHz ODER 5 GHz (nicht gleichzeitig) – ESP8266- und die meisten ESP32-Boards unterstützen ausschließlich 2,4 GHz. Wird versehentlich 5 GHz aktiviert, finden die Sensor-Boards das Netz gar nicht erst.
- SSID vergeben, z. B.
ARDUINO-MESSNETZ - Verschlüsselung: WPA2 (nicht WPA3, aus Kompatibilitätsgründen mit älteren ESP8266-WLAN-Chips)
- WLAN-Kennwort vergeben und in der (internen) Projektdokumentation festhalten – dieses Kennwort landet später direkt im Arduino-Sketch jedes Sensors
Schritt 4: Kein Internetzugang – das ist so gewollt
Die FRITZ!Box bleibt ohne DSL-/WAN-Anschluss. Das hat zwei angenehme Nebeneffekte:
- Die Box versucht zwar im Hintergrund gelegentlich, sich mit dem AVM-Server zu verbinden (Zeitserver, Firmware-Check) – das schlägt ohne WAN-Verbindung einfach folgenlos fehl und kann ignoriert werden
- Optional lassen sich unter System → Region und Sprache sowie in den Internet-Einstellungen Cloud-Dienste (MyFRITZ!, Fernzugriff) deaktivieren – notwendig ist das aber nicht, da ohne WAN-Port ohnehin kein Zugriff von außen möglich ist
Schritt 5: IP-Adressbereich für die Sensoren
Empfehlung: Subnetz auf 192.168.1.x umstellen. Die FRITZ!Box arbeitet ab Werk im Adressbereich 192.168.178.x. Falls Sensor-Sketches (wie hier) bereits fest auf die IP-Adresse 192.168.1.2 für den EmonCMS-Server programmiert sind, lohnt es sich, gleich zu Beginn – vor dem Verbinden von Pi und Sensoren – die FRITZ!Box selbst auf das Subnetz 192.168.1.x umzustellen, statt später jeden Sketch anzupassen:
- Unter Heimnetz → Netzwerk → Netzwerkeinstellungen auf „IPv4-Adressen“ klicken
- Die IPv4-Adresse der FRITZ!Box von
192.168.178.1auf192.168.1.1ändern (Netzmaske255.255.255.0bleibt gleich) - Übernehmen – die Box startet neu und ist danach unter
http://192.168.1.1bzw. weiterhinhttp://fritz.boxerreichbar - Im Reiter „DHCP-Server“ prüfen, ob sich der Adresspool automatisch angepasst hat (z. B. 192.168.1.20–200), notfalls von Hand nachziehen
Unter Heimnetz → Netzwerk → Netzwerkeinstellungen:
- Empfehlung: Jedem Gerät (Raspberry Pi, Sensor-Boards) unter Heimnetz → Netzwerk → Netzwerkverbindungen → Gerät bearbeiten eine feste IP-Adresse zuweisen („Diesem Netzwerkgerät immer die gleiche IPv4-Adresse zuweisen“). Das erleichtert später die Fehlersuche enorm, weil jedes Gerät immer unter derselben Adresse erreichbar ist – der Raspberry Pi mit EmonCMS bekommt dabei sinnvollerweise
192.168.1.2
Stolpersteine
- ESP-Board verbindet sich nicht: Fast immer liegt es am Frequenzband – prüfen, ob die FRITZ!Box wirklich auf 2,4 GHz steht und nicht auf 5 GHz umgeschaltet wurde
- Kein Reset-Knopf vorhanden: Bei der 3370 (und einigen anderen Modellen) normal – hier führen nur Weg A (Recovery-Tool) oder Weg B („Kennwort vergessen“) zum Ziel, nicht die klassische „Büroklammer-Methode“
- Wiederherstellungsprogramm findet die Box nicht: meist Firewall- oder Antivirus-Software auf dem Windows-Rechner, die die Kommunikation blockiert – kurzzeitig deaktivieren; alternativ direkt (ohne Switch dazwischen) per LAN-Kabel verbinden
- FRITZ!Box zeigt „Kein Internet“-Fehlermeldungen im Browser-Interface: normal und unkritisch, da kein WAN-Port belegt ist – einfach ignorieren bzw. Hinweise in der Oberfläche wegklicken
- Alte FRITZ!OS-Version: Ein Firmware-Update ist für den reinen WLAN-Basisstationsbetrieb nicht zwingend nötig, kann aber über das AVM-Wiederherstellungsprogramm nachgeholt werden, falls die Oberfläche stark veraltet wirkt
- Mehrere FRITZ!Boxen im gleichen Schulgebäude: Falls parallel eine „echte“ Schul-FRITZ!Box mit Internet existiert, unbedingt einen anderen WLAN-Kanal wählen (unter WLAN → Funkkanal → Funkkanal-Einstellungen anpassen), um Störungen zu vermeiden, und eine klar unterscheidbare SSID verwenden
Teil 2: Raspberry Pi 3 mit EmonCMS
Als Basis dient das von der OpenEnergyMonitor-Community gepflegte, fertige emonSD-Image – eine vorbereitete Raspberry-Pi-OS-Installation mit vorinstalliertem EmonCMS. Der große Vorteil für den Nachbau ohne Vorkenntnisse: das Image kann komplett ohne Internetzugang in Betrieb genommen werden, da es bei fehlender Internet-/LAN-Verbindung beim ersten Start selbstständig einen eigenen WLAN-Zugangspunkt zur Einrichtung aufspannt.
Wichtig zum Verständnis: Welches Netzwerk braucht mein PC?
Für die Einrichtung verwechseln Neulinge leicht zwei völlig unabhängige Netzwerke:
- Das normale Internet-WLAN des eigenen Rechners (Zuhause oder im Lehrerzimmer) – wird nur zum Surfen/für diese Anleitung gebraucht und hat mit dem Messnetz nichts zu tun
- Das isolierte Arduino-Messnetz der FRITZ!Box aus Teil 1 – hier läuft alles, was mit Pi und Sensoren zu tun hat
Wichtig: Die FRITZ!Box verbindet LAN-Kabel-Anschluss und WLAN intern zu einem einzigen Netzwerk. Ein per Kabel an die FRITZ!Box angeschlossener Rechner ist also automatisch im selben Netz wie ein Gerät (z. B. der Pi), das per WLAN mit derselben FRITZ!Box verbunden ist – unabhängig davon, ob dieser Rechner gleichzeitig noch über WLAN mit einem ganz anderen Netz (z. B. dem Internet) verbunden ist. Ein Umschalten des eigenen Internet-WLANs ist zur Einrichtung also nicht nötig, solange das LAN-Kabel zur FRITZ!Box gesteckt ist.
Konkret zur Einrichtung des Pi:
- In der FRITZ!Box-Oberfläche (über das LAN-Kabel erreichbar, z. B.
http://192.168.1.1) unter Heimnetz → Netzwerk → Netzwerkverbindungen die aktuelle IP-Adresse des Eintrags „emonpi„ ablesen (z. B.192.168.1.5) - Im Terminal per SSH verbinden:
ssh pi@192.168.1.5
(die Adresse durch die tatsächlich angezeigte ersetzen) - Passwort: ''emonsd'' (Standard, unbedingt nach dem ersten Login ändern)
Schritt 1: Image herunterladen und auf SD-Karte schreiben
- Aktuelles Image von der offiziellen Downloadseite laden:
docs.openenergymonitor.org/emonsd/download.html(aktuell emonSD-10Mar26, ca. 2,2 GB, basierend auf Raspberry Pi OS Lite 64-bit; kompatibel mit Raspberry Pi Zero 2, 3B, 3B+, 4 und 5) - Die
.zip-Datei muss nicht entpackt werden – sowohl balenaEtcher als auch der Raspberry Pi Imager können direkt mit der ZIP-Datei arbeiten - Unter Linux (Kubuntu) den Raspberry Pi Imager installieren:
sudo apt install rpi-imager
- Imager starten, unter „Operating System“ → „Use custom“ die heruntergeladene
.zip-Datei auswählen, passende SD-Karte auswählen (mind. 8 GB, empfohlen 16 GB+)
Wichtig: Der Benutzername darf beim Schreiben NICHT geändert werden – er muss "pi" bleiben, sonst funktionieren interne emonSD-Skripte nicht korrekt. Die OS-Customisation-Funktion des Imagers (WLAN vorab eintragen o. Ä.) hier NICHT nutzen – das würde den in Schritt 2 beschriebenen Einrichtungs-Zugangspunkt verhindern.
Schritt 2: Erstes Hochfahren – ganz ohne Internetzugang
Genau hier liegt der entscheidende Vorteil dieses Images für ein Inselnetz ohne Internet: Wird die SD-Karte ohne vorkonfiguriertes WLAN und ohne angeschlossenes LAN-Kabel gestartet, öffnet der Pi automatisch einen eigenen WLAN-Zugangspunkt zur Einrichtung. Ein Update-Versuch über das Internet wird in diesem Fall gar nicht erst unternommen.
- SD-Karte in den Raspberry Pi 3 einlegen, kein LAN-Kabel anschließen
- Mit Strom versorgen und ca. 1–2 Minuten warten
- Auf einem Laptop oder Smartphone nach dem WLAN „emonpi“ suchen und verbinden (Passwort:
emonpi2016) - Im Browser
http://192.168.42.1aufrufen – dort öffnet sich die integrierte Netzwerk-Einrichtungsseite
Schritt 3: Mit dem isolierten Arduino-Messnetz verbinden
- In der Netzwerk-Einrichtungsseite das WLAN „ARDUINO-MESSNETZ“ (aus Teil 1) aus der Liste auswählen und das dort vergebene Passwort eingeben
- Der Pi verbindet sich daraufhin mit dem isolierten FRITZ!Box-Netz und ist ab sofort nur noch dort erreichbar
- In der FRITZ!Box (Teil 1, Schritt 5) dem Pi wie gehabt die feste IP-Adresse 192.168.1.2 zuweisen, damit EmonCMS dauerhaft unter dieser (auch in den Sensor-Sketches hinterlegten) Adresse erreichbar bleibt
Bekannter FRITZ!OS-Bug: Bei manchen FRITZ!Box-Firmwareständen lässt sich das Adressfeld für "immer gleiche IPv4-Adresse zuweisen" bei einzelnen Geräten nicht speichern – ein seit Jahren bekanntes, nicht restlos geklärtes Verhalten. Funktioniert die Reservierung über die FRITZ!Box-Oberfläche nicht, ist der robustere Weg, die feste IP direkt auf dem Pi selbst zu setzen (siehe Kasten "Wichtig zum Verständnis" oben für den SSH-Zugriff): sudo nmcli connection modify "NETZWERKNAME" ipv4.method manual \ ipv4.addresses 192.168.1.2/24 ipv4.gateway 192.168.1.1 ipv4.dns 192.168.1.1 sudo nmcli connection down "NETZWERKNAME" && sudo nmcli connection up "NETZWERKNAME" (NETZWERKNAME = Name des WLANs, z. B. "ARDUINO-MESSNETZ"; mit "nmcli connection show" auf dem Pi anzeigen lassen)
Schritt 3b: SSH-Zugriff auf den Pi aktivieren
Für den nächsten Schritt (feste IP-Adresse per Kommandozeile setzen) wird ein SSH-Login auf den Pi benötigt. Bei aktuellen emonSD-Images ist SSH aus Sicherheitsgründen standardmäßig deaktiviert:
- Pi kurz vom Strom trennen, SD-Karte entnehmen, in den Kartenleser des PCs stecken
- Die Boot-Partition (FAT32, meist automatisch als „bootfs“ o. Ä. eingebunden) öffnen
- Dort eine leere Datei ohne Dateiendung namens
sshanlegen, z. B. per Terminal:
lsblk sudo mkdir -p /mnt/bootfs sudo mount /dev/mmcblk0p1 /mnt/bootfs sudo touch /mnt/bootfs/ssh sudo umount /mnt/bootfs
(Gerätenamen mit ''lsblk'' vorher prüfen und anpassen) - SD-Karte zurück in den Pi, Strom wieder anschließen, ca. 1 Minute warten
Danach ist SSH-Login möglich:
ssh pi@192.168.1.5
(Adresse aus der FRITZ!Box-Geräteliste, siehe Kasten oben; Passwort: emonsd)
Hinweis zu "REMOTE HOST IDENTIFICATION HAS CHANGED"-Warnungen: Wurde eine IP-Adresse während der Einrichtung mehrfach für unterschiedliche Geräte verwendet (z. B. testweise), merkt sich SSH pro Adresse einen "Fingerabdruck" und schlägt bei einer Änderung Alarm – das ist in diesem Fall harmlos (kein Angriff), sondern nur die Folge der Testerei mit IP-Adressen. Lösung: ssh-keygen -f '~/.ssh/known_hosts' -R 'DIE-BETROFFENE-IP' und danach erneut verbinden.
Schritt 4: EmonCMS-Ersteinrichtung
- Im Browser die feste IP-Adresse des Pi aufrufen (solange die WLAN-Umstellung noch nicht abgeschlossen ist, weiterhin
http://192.168.42.1) - Anmeldung mit den Standard-Zugangsdaten: Benutzername
emonsd, Passwortemonsd - Sofort das Passwort ändern (über die Konto-Einstellungen)
- Unter Administration → Setup lässt sich der Systemstatus prüfen (Dienste emonhub, feedwriter, redis-server, mosquitto sollten „Active Running“ zeigen)
- Inputs und Feeds werden erst angelegt, sobald die ersten Sensor-Boxen Daten senden – siehe Teil 3
Optionales System-Update: Beim Einrichtungsweg über den Access-Point wird das automatische Erst-Update übersprungen. Es kann bei Bedarf später bequem über die Emoncms-Administrations- oberfläche nachgeholt werden – dafür braucht der Pi dann kurzzeitig eine Verbindung mit Internetzugang (z. B. per LAN-Kabel an einem Router mit Internet). Für den Betrieb im isolierten Messnetz ist das aber nicht zwingend nötig.
Wichtiger Hinweis zu PHPFina-Feeds: Das Speicherintervall eines PHPFina-Feeds (Standard-Feed-Engine von EmonCMS) lässt sich NUR bei der Erstellung festlegen und danach nicht mehr ändern! Das passende Intervall unterscheidet sich je nach Boxtyp (siehe Teil 3): Klimamessbox (Außenbereich) = 300 Sekunden (5 Min.), Raummessbox (Innenbereich) = 20 Sekunden. Unbedingt gleich bei der ersten Feed-Anlage korrekt setzen.
Schritt 6: Echtzeituhr (RTC) nachrüsten – dringend empfohlen
Der Raspberry Pi hat werksseitig keine batteriegepufferte Uhr. Im isolierten Messnetz ohne Internetzugang kann er sich außerdem nicht per NTP die korrekte Uhrzeit holen. Nach jedem Neustart oder Stromausfall fällt die Systemzeit daher auf einen falschen Wert zurück – neue Feed-Daten bekommen dann falsche Zeitstempel und erscheinen in Diagrammen/CSV-Exports als fehlend, obwohl sie eigentlich geschrieben wurden.
Die vollständige Einrichtung (Verkabelung, I²C aktivieren, Device-Tree-Overlay, Software-Ersatzuhr entfernen, Uhrzeit setzen) beschreibt eine eigene Seite: Raspberry Pi um Echtzeituhr (RTC) erweitern – HW-111.
Stolpersteine
- WLAN „emonpi“ taucht nicht auf: Meist, weil doch ein LAN-Kabel eingesteckt war oder versehentlich schon vorher ein WLAN konfiguriert wurde (z. B. über die Imager-OS-Customisation) – dann startet der Pi direkt ins reguläre Netz statt in den Einrichtungs-Zugangspunkt. Zur Kontrolle die SD-Karte am PC prüfen, ob im Boot-Verzeichnis eine
wpa_supplicant.confo. Ä. existiert, und diese ggf. entfernen - Emoncms-Login mit
emonsd/emonsdfunktioniert nicht: Zugangsdaten können sich mit neueren Image-Versionen ändern – im Zweifel auf der aktuellen Downloadseite unter „Credentials“ nachsehen - Feste IP-Adresse in der FRITZ!Box vergessen: Ohne feste IP wechselt die Adresse des Pi bei jedem Neustart – vor dem produktiven Einsatz unbedingt nachholen (Teil 1, Schritt 5)
- PHPFina-Intervall nachträglich ändern wollen: geht nicht – nur eine Neuanlage des Feeds hilft. Intervall (120 s) daher gleich richtig bei Feed-Erstellung setzen
- Raspberry Pi 3 wirkt „langsam“: Für ein Schulnetz mit überschaubarer Anzahl Sensor-Boxen und Dashboards reicht die Leistung eines Pi 3 problemlos aus
- Feeds zeigen aktuelle „Last value“, aber Diagramm/CSV-Export bleiben leer (
null): Klassisches Symptom einer falschen Systemzeit (siehe Schritt 6) – der Redis-Cache zeigt den Wert sofort an, die eigentliche PHPFina-Datei wird aber mit dem (falschen) Systemdatum beschrieben. Mitdateprüfen, ob das angezeigte Datum stimmt; falls nicht, RTC nachrüsten oder Uhrzeit zumindest manuell setzen (sudo date -s „JJJJ-MM-TT HH:MM:SS“)
Teil 3: Sensor-Boxen (Klimamessbox & Raummessbox)
Beide Sensor-Boxen basieren auf demselben Grundprinzip: Ein ESP8266 D1 Mini liest mehrere Sensoren aus und sendet die Werte in festen Zeitabständen per WLAN und HTTP an EmonCMS. Beide Boxen teilen sich denselben Netzwerk- und Retry-Mechanismus – nur die angeschlossenen Sensoren unterscheiden sich.
Der vollständige Programmcode (inkl. eines einfachen Testsensors zum Ausprobieren der EmonCMS-Einrichtung ohne fertige Box) steht auf einer eigenen Seite: [[sensor_code|Programmcode der Sensor-Boxen]]. Diese Seite hier beschreibt nur Pin-Belegung, Konfiguration und Funktionsprinzipien.
Klimamessbox (Außenbereich)
Verbaute Sensoren:
- BME280 (I²C) – Temperatur, Luftfeuchtigkeit, Luftdruck
- MH-Z19B (UART) – CO2-Gehalt
- SDS011 (UART) – Feinstaub PM2.5 und PM10
- LDR (analog) – Helligkeit
Hardware: ESP8266 D1 Mini. In der Arduino-IDE als Board „LOLIN(WEMOS) D1 R2 & mini“ wählen. Bei Boot-Abstürzen ersatzweise auf „Generic ESP8266 Module“ mit den Einstellungen Flash Mode: DIO, Flash Frequency: 40MHz, VTables: Flash umstellen.
Pin-Belegung:
| Sensor | Pin(s) | Hinweis |
|---|---|---|
| BME280 | I²C Standard: D1 (SCL), D2 (SDA) | I²C-Adresse 0x76 (ggf. 0x77 prüfen) |
| MH-Z19B | RX = D6 (GPIO12), TX = D5 (GPIO14) | An 5V betrieben; RX-Leitung braucht einen Spannungsteiler 5V→3,3V (1kΩ + 2kΩ), da der ESP8266 nur 3,3V-tolerant ist |
| SDS011 | RX = D7 (GPIO13), TX = D8 (GPIO15) | An 5V betrieben, ohne Spannungsteiler |
| LDR | A0 (analog) | Über Spannungsteiler mit Festwiderstand an A0 |
Konfiguration (nur diese Zeilen pro Box anpassen):
#define SENSOR_ID 134 // Eindeutige Nummer je Sensor-Box (bestimmt Name UND IP-Adresse) #define MODE_LIVE false // true = echte Daten (LIVE-API-Key), false = Testbetrieb #define CO2_OFFSET 40 // Kalibrierungs-Offset, siehe unten #define MESSINTERVALL_MS 120000 // Sendetakt in Millisekunden (120000 = alle 2 Minuten) #define DEBUG true // Ausführliche serielle Ausgaben zur Fehlersuche
Sicherheitshinweis: WLAN-Passwort und EmonCMS-API-Schlüssel stehen
im Original-Sketch als Klartext-Zugangsdaten. Diese NIEMALS in eine
öffentliche Wiki-Seite kopieren! Beim Nachbau durch andere Schulen
müssen eigene, geheime Werte eingetragen werden:
const char* ssid = "<WLAN-NAME>";
const char* password = "<WLAN-PASSWORT>";
const char* APIKEY_LIVE = "<API-KEY-LIVE-AUS-EMONCMS>";
const char* APIKEY_TEST = "<API-KEY-TEST-AUS-EMONCMS>";
Die API-Keys findet man in EmonCMS unter dem jeweiligen Nutzerkonto
("My Account" → "API Keys").
Wichtige Funktionsprinzipien:
- Feste IP statt DHCP: Jede Box bekommt ihre IP direkt aus
SENSOR_IDgebildet (192.168.1.SENSOR_ID), fest im Code überWiFi.config()eingetragen – kein DHCP nötig, jede Box ist damit sofort unter einer vorhersehbaren Adresse erreichbar - Server-Adresse: Fest auf
192.168.1.2eingestellt (die feste IP des Raspberry Pi aus Teil 2) - CO2-Kalibrierung: Die automatische Baseline-Korrektur (ABC) des MH-Z19B wird beim Boot abgeschaltet, weil sie bei einem dauerhaft im Freien montierten Sensor zu falschen Werten führen würde (ABC geht von regelmäßiger Frischluft-Referenz aus – im Außeneinsatz nicht gegeben). Stattdessen wird ein manueller
CO2_OFFSETverwendet: An einem Frischluft-Referenzpunkt (z. B. früh morgens) ablesen, was der Sensor anzeigt, und den Offset so wählen, dass ca. 420–440 ppm (aktueller globaler Referenzwert) erreicht werden - SDS011-Energiesparmodus: Der Feinstaubsensor hat einen Lüfter, der sich abnutzt. Er wird zwischen den Messungen in den Sleep-Modus versetzt und nur für die eigentliche Messung (10 Sekunden Vorlaufzeit) aufgeweckt – das verlängert die Lebensdauer von ca. 8.000 auf ca. 20.000 Betriebsstunden
- Robuste Datenübertragung: Schlägt ein Upload fehl, versucht die Box es bis zu 5-mal: zunächst 3 normale Versuche mit steigender Pause, danach zwei Versuche mit vorherigem WLAN-Soft-Reset. Das macht die Box widerstandsfähig gegen kurze WLAN-Aussetzer, wie sie im Schulalltag (viele Geräte, dicke Wände) vorkommen können
- Watchdog: Gelingt binnen 3 Minuten nach dem Booten kein einziger Upload, oder ist das WLAN länger als 2 Minuten am Stück weg, startet sich der ESP8266 selbstständig neu
Übertragene Messwerte (JSON an EmonCMS):
| Feldname | Bedeutung | Einheit |
|---|---|---|
| F_rel | Relative Luftfeuchtigkeit | % |
| T_C | Temperatur | °C |
| P_hPa | Luftdruck (auf Meereshöhe umgerechnet) | hPa |
| CO2_ppm | CO2-Gehalt | ppm |
| PM25 | Feinstaub PM2.5 | µg/m³ |
| PM10 | Feinstaub PM10 | µg/m³ |
| H_bit | Helligkeit (invertiert: hell=klein, dunkel=groß) | – |
EmonCMS-Einrichtung pro Box:
- Node/Input-Name entspricht der
SENSOR_IDaus dem Sketch (z. B. „134“) – erscheint automatisch unter Inputs, sobald die Box zum ersten Mal sendet - Für jedes der sieben Felder oben einen Feed anlegen (PHPFina, Interval 300 Sekunden (5 Min.) – muss zum
MESSINTERVALL_MSim Sketch passen und lässt sich nur bei der Erstellung setzen, siehe Teil 2)
Raummessbox (Innenbereich)
Verbaute Sensoren:
- DHT22 – Luftfeuchtigkeit (Temperaturwert des DHT22 wird hier nicht verwendet, siehe BMP180)
- BMP180 (I²C) – Temperatur, Luftdruck
- MH-Z19B (UART) – CO2-Gehalt
- LDR (analog) – Helligkeit
- NeoPixel-LED-Band (4 oder 5 LEDs) – CO2-Ampel zur direkten Anzeige im Klassenraum, ohne dass jemand ein Display ablesen muss
Im Gegensatz zur Außenbox entfällt der Feinstaubsensor (SDS011) – dafür kommt die LED-Ampel als zusätzliche Ausgabe hinzu.
Hardware: ESP8266 D1 Mini, gleiches Board-Profil wie bei der Klimamessbox („LOLIN(WEMOS) D1 R2 & mini“, bei Bootproblemen alternativ „Generic ESP8266 Module“ mit DIO/40MHz/VTables:Flash).
Pin-Belegung:
| Sensor | Pin(s) | Hinweis |
|---|---|---|
| DHT22 | D7 (GPIO13) | Nur Luftfeuchtigkeit wird ausgelesen |
| BMP180 | I²C Standard: D1 (SCL), D2 (SDA) | Adresse fest in der Bibliothek (SFE_BMP180) |
| MH-Z19B | RX = D6 (GPIO12), TX = D5 (GPIO14) | Wie bei der Klimamessbox: an 5V betrieben, RX-Leitung braucht Spannungsteiler 5V→3,3V |
| LDR | A0 (analog) | Invertiert ausgewertet (hell → kleiner Wert) |
| NeoPixel-LED-Band | D4 (GPIO2) | 4- oder 5-LED-Variante, siehe NUM_LEDS |
Konfiguration (nur diese Zeilen pro Box anpassen):
#define SENSOR_ID 106 // Eindeutige Nummer je Sensor-Box (bestimmt Name UND IP-Adresse) #define MODE_LIVE true // true = echte Daten (LIVE-API-Key), false = Testbetrieb #define NUM_LEDS 4 // Anzahl verbauter LEDs: 5 = Normalausführung, 4 = kompakte Bauform #define CO2_OFFSET 40 // Kalibrierungs-Offset, wie bei der Klimamessbox
Sicherheitshinweis: Wie bei der Klimamessbox stehen im Original- Sketch echte Zugangsdaten (WLAN-Passwort, API-Keys) im Klartext. Auch hier gilt: niemals in die öffentliche Wiki-Seite kopieren, sondern durch eigene, geheime Werte ersetzen (siehe Hinweis-Kasten bei der Klimamessbox oben).
Besonderheiten gegenüber der Klimamessbox:
- Kürzeres Messintervall: 20 Sekunden statt 300 Sekunden (
const int Schreibpause = 20000;), gedacht für engmaschiges Langzeit-Monitoring im Klassenraum. Der EmonCMS-Feed muss dafür mit Intervall 20 statt 300 angelegt werden – nicht mit der Klimamessbox verwechseln! - CO2-Ampel über NeoPixel-LEDs: Ein Farbverlauf von Blau (< 500 ppm, sehr gut) über Grün und Gelb bis Rot (> 2250 ppm, kritisch) zeigt die Luftqualität direkt vor Ort an – nützlich für den Unterricht, da Schüler:innen die CO2-Ampel ohne Bildschirm ablesen können. Ab 2700 ppm blinkt das Band fünfmal abwechselnd Rot/Weiß als Alarm, danach leuchtet es dauerhaft Rot
NUM_LEDS-Umschalter: Da im Einsatz zwei Bauformen (4 und 5 LEDs) existieren, passt sich das Anzeigemuster automatisch an – nicht verbaute LED-Positionen werden einfach dunkel gelassen- Kein Feinstaubsensor: Entsprechend fehlt im gesendeten JSON das Feld für PM2.5/PM10 (siehe unten)
Übertragene Messwerte (JSON an EmonCMS):
| Feldname | Bedeutung | Einheit |
|---|---|---|
| F_rel | Relative Luftfeuchtigkeit (DHT22) | % |
| T_C | Temperatur (BMP180) | °C |
| P_hPa | Luftdruck (auf Meereshöhe umgerechnet) | hPa |
| CO2_ppm | CO2-Gehalt | ppm |
| H_bit | Helligkeit (invertiert) | – |
EmonCMS-Einrichtung pro Box:
- Node/Input-Name entspricht der
SENSOR_ID(z. B. „106“) - Für jedes der fünf Felder oben einen Feed anlegen (PHPFina, Interval 20 Sekunden – abweichend von der Klimamessbox!)
Stolpersteine
- MH-Z19B liefert unplausible Werte direkt nach dem Einschalten: Der Sensor braucht ca. 3 Minuten Aufwärmzeit – erste Messwerte in dieser Zeit ignorieren
- BME280 wird nicht gefunden (Endlosschleife beim Boot): I²C-Verkabelung prüfen (SDA/SCL vertauscht?) sowie die I²C-Adresse – manche Module nutzen 0x77 statt 0x76
- SDS011 liefert dauerhaft Fehler: Meist Verkabelungsfehler bei RX/TX (leicht zu vertauschen) oder zu kurze Aufwachzeit bei sehr kurz eingestelltem
MESSINTERVALL_MS– die KonstanteschreibpauseRohzieht die 10 Sekunden SDS011-Aufwachzeit automatisch vom Gesamtintervall ab, bei Intervallen unter 15 Sekunden greift eine Mindestpause von 2 Sekunden - Zwei Boxen mit derselben
SENSOR_ID: Führt zu IP- und Node-Konflikten – vor der Inbetriebnahme einer neuen Box unbedingt sicherstellen, dass die Nummer noch nicht vergeben ist (Übersicht am besten zentral im Wiki oder in EmonCMS unter „Inputs“ pflegen) - Box startet ständig neu (Watchdog): Deutet meist auf ein instabiles WLAN-Signal am Aufstellort hin – Empfangsstärke (RSSI) über die Debug-Ausgabe prüfen, ggf. Position ändern oder FRITZ!Box-Sendeleistung erhöhen
- LED-Band zeigt bei der Raummessbox falsche/fehlende LEDs:
NUM_LEDSmuss zur tatsächlich verbauten Bauform passen (4 oder 5) – falsch eingestellt, bleibt entweder die letzte LED immer dunkel oder es wird versucht, eine nicht vorhandene LED anzusteuern - BMP180 wird nicht gefunden (Endlosschleife beim Boot der Raummessbox): I²C-Verkabelung prüfen (D1=SCL, D2=SDA, GND, 3V3) – anders als beim BME280 der Klimamessbox hat der BMP180 keine wählbare Adresse
Fotos & Schaltpläne
Noch zu ergänzen – dieser Abschnitt dient als Platzhalter und Checkliste, welche Bilder für den Nachbau durch andere Schulen besonders hilfreich sind. Bilder lassen sich in DokuWiki mit der Syntax einbinden (Upload über den „Bild hinzufügen“-Button im Editor oder Medien-Manager).

Empfohlene Aufnahmen:
- FRITZ!Box von hinten/unten (Anschlüsse, ggf. Typenschild mit Modellbezeichnung)
- Aufbau Raspberry Pi (Gehäuse, SD-Karte, Stromversorgung) im Praxiseinsatz
- Klimamessbox (Außenbereich): Platinenaufbau von oben, mit beschrifteten Sensoren
- Klimamessbox: Verkabelung des Spannungsteilers am MH-Z19B (RX-Leitung), Nahaufnahme
- Raummessbox (Innenbereich): Platinenaufbau von oben, mit LED-Band
- Raummessbox: LED-Ampel in Aktion (Foto bei unterschiedlichen CO2-Werten, falls möglich)
- Montageort im Klassenraum bzw. draußen (Beispielfoto für Aufhängung/Wetterschutz)
- Screenshot des EmonCMS-Dashboards mit Live-Daten
- Schaltplan/Fritzing-Skizze je Sensor-Box (Verdrahtung BME280/BMP180, MH-Z19B, SDS011, LDR, LED-Band)
{{ :platinen:klimamessbox_verkabelung.jpg?600 |Verkabelung der Klimamessbox: MH-Z19B mit Spannungsteiler}}
Übersicht vergebener SENSOR_IDs
Damit beim Nachbau nicht versehentlich zwei Boxen dieselbe SENSOR_ID (und damit dieselbe IP-Adresse) bekommen, empfiehlt sich eine zentral gepflegte Tabelle – idealerweise direkt hier im Wiki, gut sichtbar für alle, die neue Boxen in Betrieb nehmen.
| SENSOR_ID | IP-Adresse | Boxtyp | Standort | Node-Name (EmonCMS) | Bemerkung |
|---|---|---|---|---|---|
| 106 | 192.168.1.106 | Raummessbox | z. B. Klassenraum 2.14 | 106 | 4-LED-Variante |
| 134 | 192.168.1.134 | Klimamessbox | z. B. Außenfassade Nordseite | 134 | mit Wetterschutzgehäuse |
| … | 192.168.1…. | … | … | … | … |
Empfehlung zur Nummernvergabe: Feste Wertebereiche pro Boxtyp reservieren, z. B. 100-149 für Raummessboxen und 150-199 für Klimamessboxen (Außenbereich) - das erleichtert auf einen Blick, worum es sich bei einer bestimmten SENSOR_ID handelt, ohne die Tabelle nachschlagen zu müssen. IDs 2-99 bleiben für Infrastruktur (Raspberry Pi = 2, FRITZ!Box = 1, Reserve für Zukünftiges) frei.
Sicheres Ein- und Ausschalten des Gesamtsystems
Praktisch relevant, sobald die komplette Station (FRITZ!Box, Raspberry Pi, ggf. Sensorboxen) gemeinsam an einer Steckdosenleiste hängt, z. B. in einem Koffer für den mobilen/temporären Einsatz.
Nur der Raspberry Pi braucht eine kontrollierte Abschaltung – FRITZ!Box und ESP8266-Sensorboxen vertragen einfaches Stromwegnehmen problemlos. Beim Pi dagegen kann ein abrupter Stromausfall während eines Schreibvorgangs die SD-Karte beschädigen.
Richtig ausschalten:
- Per SSH mit dem Pi verbinden:
ssh pi@192.168.1.2 - Sauber herunterfahren:
sudo shutdown -h now - Warten, bis die grüne Aktivitäts-LED am Pi dauerhaft aus ist (meist 10–20 Sekunden) – erst dann ist die SD-Karte sicher „geparkt“
- Erst danach die Steckdosenleiste ausschalten
Wieder einschalten:
- Steckdosenleiste einschalten – alle Komponenten fahren gleichzeitig hoch
- Der Pi braucht am längsten (ca. 1–2 Minuten bis EmonCMS erreichbar ist)
- Dank der Retry-Logik in allen Sensor-Sketches (3 WLAN-Versuche mit Backoff, siehe Programmcode-Seite) verbinden sich die Sensorboxen automatisch, sobald FRITZ!Box und Pi bereit sind – kein manuelles Eingreifen nötig
Dank RTC-Modul (siehe eigene Seite zur HW-111-Nachrüstung) bleibt die Uhrzeit ab jetzt automatisch korrekt erhalten - ein manuelles Nachstellen der Systemzeit nach dem Wiedereinschalten ist nicht mehr nötig.
Wichtige Zugänge – Checkliste
ACHTUNG - NICHT ÖFFENTLICH AUSFÜLLEN! Diese Tabelle dient nur als Checkliste, WELCHE vier Zugänge bei der Installation gesetzt werden und WO sie zu finden sind. Die echten Passwörter/Keys gehören NICHT auf diese öffentliche Wiki-Seite, sondern in einen Passwort-Manager oder eine interne, nicht- öffentliche Wiki-Seite (z. B. im geschützten Kollegiumsbereich). Wer diese Anleitung nachbaut, trägt eigene, neue Zugangsdaten ein - niemals die aus einem Beispiel oder einer anderen Schule übernehmen.
Bei der Einrichtung werden vier voneinander unabhängige Zugänge gesetzt bzw. sichtbar:
| # | Zugang | Wo gesetzt/geändert | Wo zu finden | Notiz |
|---|---|---|---|---|
| 1 | FRITZ!Box Admin-Kennwort | Teil 1, Schritt 2 (Ersteinrichtung) | FRITZ!Box-Weboberfläche → System → Kennwörter | Schützt die Router-Konfiguration selbst |
| 2 | WLAN-Kennwort „SAS-ARDUINO“ / „SAS-ARDUINO-mobil“ | Teil 1, Schritt 3 | FRITZ!Box-Weboberfläche → WLAN → Funknetz | Wird 1:1 in jeden Sensor-Sketch eingetragen (Bereich A/B/C, siehe Sensorcode-Seite) |
| 3 | Raspberry Pi – SSH-Login (Benutzer pi) | Teil 2, Schritt 4 (bzw. per passwd nachträglich) | Direkt am Pi per SSH änderbar: ssh pi@[IP-Adresse] → passwd | Getrennt vom EmonCMS-Weblogin, eigenes Passwort |
| 4 | EmonCMS – Weblogin (Benutzer emonsd, änderbar) | Teil 2, Schritt 4 | EmonCMS-Oberfläche → My Account | Zusätzlich dort: Read-&-Write- und Read-Only-API-Key (siehe „Sensoren einbinden“, Schritt 1) |
Empfehlung: Für jede Installation (Produktiv-Pi UND ggf. separater Test-/Entwicklungs-Pi) diese vier Zugänge getrennt und mit klarem Bezug zum jeweiligen Gerät im Passwort-Manager ablegen - gerade bei mehreren Pis (z. B. Schul-Livesystem und ein mobiler Test-Pi) erleichtert das die spätere Übersicht erheblich.
Begriffsklärung: "Klima" oder doch etwas anderes?
Der Name „Klimastation„ hat sich für dieses Projekt eingebürgert, ist aber fachlich nicht ganz präzise – das lohnt sich, Schülerinnen und Schülern gleich zu Beginn zu erklären:
Klima bezeichnet in der Wissenschaft statistische Langzeitmuster des Wetters – die Weltorganisation für Meteorologie (WMO) definiert Klima über Mittelwerte aus mindestens 30 Jahren. Was die Sensor-Boxen hier tatsächlich liefern, sind dagegen Momentanwerte einzelner Messgrößen: Temperatur, Luftfeuchtigkeit, Luftdruck, CO2-Gehalt, Feinstaub und Helligkeit, aufgezeichnet alle 20 bis 300 Sekunden. Das ist fachlich korrekt als Wetter- bzw. Umweltdaten zu bezeichnen (genauer: eine Mischung aus meteorologischen Größen und Luftqualitätsdaten) – nicht als Klimadaten im engeren Sinn. Erst wenn diese Werte über sehr lange Zeiträume gemittelt und ausgewertet würden, ließe sich daraus etwas über das lokale Klima ableiten.
Der Begriff „Raumklima“ (für die Innenraum-Messungen der Raummessbox) ist davon ausgenommen – er ist im Deutschen ein etablierter, fachlich anerkannter Begriff aus der Gebäudetechnik für genau die hier gemessenen Größen (Temperatur, Feuchte, CO2 in Innenräumen).
Kurz gesagt: Trotz des Namens "Klimastation" erfassen die Boxen keine Klimadaten im engeren Sinn, sondern lokale Wetter- und Luftqualitätsdaten - als praktischer Beitrag zur Umweltbildung und zum Verständnis der eigenen Umgebung. Der Projektname wird trotzdem beibehalten, da er im Bildungskontext etabliert und gut verständlich ist.
Hinweis: DokuWiki erzeugt bei mehr als drei Überschriften automatisch ein Inhaltsverzeichnis rechts auf der Seite. Falls das aus irgendeinem Grund nicht erscheint, mit ~~NOTOC~~ am Seitenanfang unterdrücken lässt sich das TOC steuern; hier zusätzlich eine kurze manuelle Übersicht für den schnellen Einstieg:
Inhaltsübersicht:
- Begriffsklärung: "Klima" oder doch etwas anderes? – fachliche Einordnung für den Unterricht
- Teil 1: FRITZ!Box als isoliertes Sensor-WLAN einrichten – Werksreset, WLAN-Konfiguration, IP-Adressbereich
- Teil 2: Raspberry Pi 3 mit EmonCMS – Image, Ersteinrichtung, feste IP, RTC-Modul gegen Zeitversatz
- Teil 3: Sensor-Boxen – Klimamessbox (Außenbereich) und Raummessbox (Innenbereich)
- Fotos & Schaltpläne – noch zu ergänzende Bilddokumentation
- Übersicht vergebener SENSOR_IDs – Vorlage zur Konfliktvermeidung bei mehreren Boxen
- Wichtige Zugänge – Checkliste – welche vier Zugänge bei der Installation gesetzt werden (NICHT öffentlich mit echten Passwörtern pflegen!)
- Sensoren in EmonCMS einbinden – eigene Seite mit dem wiederkehrenden Ablauf für jede neue Box (API-Key, Inputs, Feeds, Dashboard)
- Programmcode der Sensor-Boxen – eigene Seite mit dem vollständigen Arduino-Code (Testsensor, einfacher BME280-Sensor, Klimamessbox, Raummessbox)
- Raspberry Pi um Echtzeituhr (RTC) erweitern – HW-111 – eigene Seite zur Nachrüstung eines DS1307-RTC-Moduls gegen Zeitversatz nach Neustarts
- Sicheres Ein- und Ausschalten des Gesamtsystems – wichtig für den Koffer-/mobilen Einsatz
Hinweis zu den Sprungmarken: DokuWiki erzeugt Anker automatisch aus den Überschriften (Kleinschreibung, Leerzeichen → Bindestriche, Sonderzeichen entfernt). Sollte ein Link nach dem Einfügen ins Wiki nicht funktionieren, den Anker-Namen einmal über die tatsächlich erzeugte Überschrift im Wiki prüfen und ggf. anpassen.
Teil 1: FRITZ!Box als isoliertes Sensor-WLAN einrichten
Für dieses Projekt braucht es keinen Internetanschluss und kein aktuelles Router-Modell. Fast jede Schule hat irgendwo eine ausrangierte FRITZ!Box im Schrank liegen – genau die wird hier zur reinen WLAN-Basisstation für das Sensornetz.
In diesem Beispiel: eine FRITZ!Box WLAN 3370 (Dual-Band N-Router, Baujahr ca. 2011), deren Zugangsdaten nicht mehr bekannt sind.
Warum eine alte, "nutzlose" FRITZ!Box perfekt geeignet ist
- Sie muss nicht ans Internet/DSL angeschlossen werden – sie funktioniert als reine WLAN-Basisstation im lokalen Netz
- Kein Zugriff von außen möglich, da kein Internet-Uplink besteht → datenschutz- und sicherheitstechnisch unkritisch
- Alte Geräte unterstützen meist zuverlässig 2,4 GHz – genau das, was ESP8266/ESP32 brauchen
- Nachhaltiger Zweitnutzen für Geräte, die sonst im Elektroschrott landen würden
Schritt 1: Werksreset ohne bekanntes Passwort
Wichtiger Hinweis zur FRITZ!Box 3370: Dieses Modell hat – anders als viele andere FRITZ!Box-Router – keinen externen Reset-Knopf und keinen Telefonanschluss (FON/DECT), über den sich sonst per Tastencode ein Reset auslösen ließe. Zwei Wege haben sich bewährt:
Weg A – AVM-Wiederherstellungsprogramm (getestet, funktioniert zuverlässig):
- Auf
download.avm.de/fritzbox/das eigene Modell auswählen, dann in den Ordnerdeutschlandund weiter in den Unterordnerrecoverwechseln - Die passende
.exe-Datei herunterladen (Namensschema z. B.fritz.box_wlan_3370-06.56.recover.exe– die Versionsnummer im Dateinamen kann je nach zuletzt installierter Firmware variieren) – das Tool läuft nur unter Windows - FRITZ!Box per LAN-Kabel direkt mit dem Windows-Rechner verbinden (kein Switch/Hub dazwischen)
- Die Windows-Firewall kurzzeitig deaktivieren, falls das Tool die Box nicht findet
- Das Wiederherstellungsprogramm starten und den Anweisungen folgen – es spielt die Firmware neu auf und versetzt die Box in den Auslieferungszustand
- Die FRITZ!Box startet danach neu (einige Minuten); anschließend ist sie ohne Passwort erreichbar
Weg B – „Kennwort vergessen?“ über die Bedienoberfläche (kein Windows-Rechner nötig, ggf. einen Versuch wert, bevor man das Recovery-Tool lädt):
- FRITZ!Box für 1 Minute vom Stromnetz trennen, dann wieder anschließen
- Innerhalb der nächsten 10 Minuten die Bedienoberfläche aufrufen –
http://fritz.box,http://192.168.178.1oder Notfall-IPhttp://169.254.1.1 - Auf „Kennwort vergessen?“ klicken, dann „Werkseinstellungen wiederherstellen“
- Nach dem Neustart (1–2 Minuten) ist die Oberfläche ohne Passwort erreichbar
PC unter Linux mit der FRITZ!Box verbinden
Damit die Bedienoberfläche im Browser überhaupt erreichbar ist, muss der Rechner per LAN-Kabel (nicht WLAN) verbunden sein und eine IP-Adresse im selben Subnetz wie die FRITZ!Box haben.
Zuerst probieren – meist reicht das schon: Direkt nach dem Werksreset verteilt die Box selbst per DHCP Adressen im Bereich 192.168.178.20–200. Bei aktivem NetworkManager (Standard unter Kubuntu) genügt es normalerweise, das LAN-Kabel einzustecken – der Rechner bekommt automatisch eine passende IP, und http://192.168.178.1 bzw. http://fritz.box ist direkt erreichbar.
Falls das nicht klappt (z. B. weil nur die Notfall-IP reagiert, oder DHCP der Box gerade nicht läuft), muss die IP manuell gesetzt werden. Zunächst den Namen der LAN-Schnittstelle ermitteln:
ip link
(üblich sind Namen wie eth0, enp0s25 oder bei USB-Adaptern enx…; im Folgenden als Platzhalter IFACE verwendet)
Variante A – schnell & temporär (bis zum nächsten Kabel-Stecken oder Neustart):
sudo ip addr flush dev IFACE sudo ip addr add 169.254.1.2/16 dev IFACE sudo ip link set IFACE up
Danach im Browser http://169.254.1.1 aufrufen. Für den regulären Adressbereich stattdessen:
sudo ip addr add 192.168.178.20/24 dev IFACE
und http://192.168.178.1 aufrufen.
Variante B – über NetworkManager (nmcli), als eigenes wiederverwendbares Profil:
nmcli connection add type ethernet ifname IFACE con-name fritzbox-reset \ ipv4.method manual ipv4.addresses 192.168.178.20/24 nmcli connection up fritzbox-reset
Nach getaner Arbeit wieder aufräumen:
nmcli connection down fritzbox-reset nmcli connection delete fritzbox-reset
Variante C – grafisch: Netzwerkeinstellungen → Kabelgebunden → Zahnrad-Symbol → Reiter „IPv4“ → „Manuell“ → Adresse 192.168.178.20, Netzmaske 255.255.255.0 (bzw. /24), kein Gateway nötig → Anwenden → die LAN-Verbindung einmal aus- und wieder einschalten.
Vor dem Browser-Aufruf testen:
ping -c 3 192.168.178.1
bzw. für die Notfall-IP:
ping -c 3 169.254.1.1
Kommt eine Antwort, ist die Bedienoberfläche im Browser erreichbar.
Nach erfolgreichem Reset sind Benutzername/Passwort wieder auf Werkszustand, und die Box ist ohne Kennwort erreichbar.
Schritt 2: Ersteinrichtung
- FRITZ!Box per LAN-Kabel mit einem Computer verbinden (nicht WLAN, für die Ersteinrichtung ist LAN zuverlässiger)
- Im Browser http://fritz.box oder http://192.168.178.1 aufrufen
- Den Einrichtungsassistenten ggf. abbrechen/überspringen – ein Internetanschluss wird nicht konfiguriert
- Unter System → Kennwörter ein neues, für das Kollegium dokumentierbares Admin-Kennwort vergeben (z. B. im internen, nicht-öffentlichen Wiki-Bereich hinterlegen, NICHT auf der öffentlichen Anleitungsseite!)
Schritt 3: WLAN konfigurieren – wichtig: 2,4 GHz verwenden
Unter WLAN → Funknetz:
- Frequenzband auf 2,4 GHz stellen. Die FRITZ!Box 3370 funkt wahlweise auf 2,4 GHz ODER 5 GHz (nicht gleichzeitig) – ESP8266- und die meisten ESP32-Boards unterstützen ausschließlich 2,4 GHz. Wird versehentlich 5 GHz aktiviert, finden die Sensor-Boards das Netz gar nicht erst.
- SSID vergeben, z. B.
ARDUINO-MESSNETZ - Verschlüsselung: WPA2 (nicht WPA3, aus Kompatibilitätsgründen mit älteren ESP8266-WLAN-Chips)
- WLAN-Kennwort vergeben und in der (internen) Projektdokumentation festhalten – dieses Kennwort landet später direkt im Arduino-Sketch jedes Sensors
Schritt 4: Kein Internetzugang – das ist so gewollt
Die FRITZ!Box bleibt ohne DSL-/WAN-Anschluss. Das hat zwei angenehme Nebeneffekte:
- Die Box versucht zwar im Hintergrund gelegentlich, sich mit dem AVM-Server zu verbinden (Zeitserver, Firmware-Check) – das schlägt ohne WAN-Verbindung einfach folgenlos fehl und kann ignoriert werden
- Optional lassen sich unter System → Region und Sprache sowie in den Internet-Einstellungen Cloud-Dienste (MyFRITZ!, Fernzugriff) deaktivieren – notwendig ist das aber nicht, da ohne WAN-Port ohnehin kein Zugriff von außen möglich ist
Schritt 5: IP-Adressbereich für die Sensoren
Empfehlung: Subnetz auf 192.168.1.x umstellen. Die FRITZ!Box arbeitet ab Werk im Adressbereich 192.168.178.x. Falls Sensor-Sketches (wie hier) bereits fest auf die IP-Adresse 192.168.1.2 für den EmonCMS-Server programmiert sind, lohnt es sich, gleich zu Beginn – vor dem Verbinden von Pi und Sensoren – die FRITZ!Box selbst auf das Subnetz 192.168.1.x umzustellen, statt später jeden Sketch anzupassen:
- Unter Heimnetz → Netzwerk → Netzwerkeinstellungen auf „IPv4-Adressen“ klicken
- Die IPv4-Adresse der FRITZ!Box von
192.168.178.1auf192.168.1.1ändern (Netzmaske255.255.255.0bleibt gleich) - Übernehmen – die Box startet neu und ist danach unter
http://192.168.1.1bzw. weiterhinhttp://fritz.boxerreichbar - Im Reiter „DHCP-Server“ prüfen, ob sich der Adresspool automatisch angepasst hat (z. B. 192.168.1.20–200), notfalls von Hand nachziehen
Unter Heimnetz → Netzwerk → Netzwerkeinstellungen:
- Empfehlung: Jedem Gerät (Raspberry Pi, Sensor-Boards) unter Heimnetz → Netzwerk → Netzwerkverbindungen → Gerät bearbeiten eine feste IP-Adresse zuweisen („Diesem Netzwerkgerät immer die gleiche IPv4-Adresse zuweisen“). Das erleichtert später die Fehlersuche enorm, weil jedes Gerät immer unter derselben Adresse erreichbar ist – der Raspberry Pi mit EmonCMS bekommt dabei sinnvollerweise
192.168.1.2
Stolpersteine
- ESP-Board verbindet sich nicht: Fast immer liegt es am Frequenzband – prüfen, ob die FRITZ!Box wirklich auf 2,4 GHz steht und nicht auf 5 GHz umgeschaltet wurde
- Kein Reset-Knopf vorhanden: Bei der 3370 (und einigen anderen Modellen) normal – hier führen nur Weg A (Recovery-Tool) oder Weg B („Kennwort vergessen“) zum Ziel, nicht die klassische „Büroklammer-Methode“
- Wiederherstellungsprogramm findet die Box nicht: meist Firewall- oder Antivirus-Software auf dem Windows-Rechner, die die Kommunikation blockiert – kurzzeitig deaktivieren; alternativ direkt (ohne Switch dazwischen) per LAN-Kabel verbinden
- FRITZ!Box zeigt „Kein Internet“-Fehlermeldungen im Browser-Interface: normal und unkritisch, da kein WAN-Port belegt ist – einfach ignorieren bzw. Hinweise in der Oberfläche wegklicken
- Alte FRITZ!OS-Version: Ein Firmware-Update ist für den reinen WLAN-Basisstationsbetrieb nicht zwingend nötig, kann aber über das AVM-Wiederherstellungsprogramm nachgeholt werden, falls die Oberfläche stark veraltet wirkt
- Mehrere FRITZ!Boxen im gleichen Schulgebäude: Falls parallel eine „echte“ Schul-FRITZ!Box mit Internet existiert, unbedingt einen anderen WLAN-Kanal wählen (unter WLAN → Funkkanal → Funkkanal-Einstellungen anpassen), um Störungen zu vermeiden, und eine klar unterscheidbare SSID verwenden
Teil 2: Raspberry Pi 3 mit EmonCMS
Als Basis dient das von der OpenEnergyMonitor-Community gepflegte, fertige emonSD-Image – eine vorbereitete Raspberry-Pi-OS-Installation mit vorinstalliertem EmonCMS. Der große Vorteil für den Nachbau ohne Vorkenntnisse: das Image kann komplett ohne Internetzugang in Betrieb genommen werden, da es bei fehlender Internet-/LAN-Verbindung beim ersten Start selbstständig einen eigenen WLAN-Zugangspunkt zur Einrichtung aufspannt.
Wichtig zum Verständnis: Welches Netzwerk braucht mein PC?
Für die Einrichtung verwechseln Neulinge leicht zwei völlig unabhängige Netzwerke:
- Das normale Internet-WLAN des eigenen Rechners (Zuhause oder im Lehrerzimmer) – wird nur zum Surfen/für diese Anleitung gebraucht und hat mit dem Messnetz nichts zu tun
- Das isolierte Arduino-Messnetz der FRITZ!Box aus Teil 1 – hier läuft alles, was mit Pi und Sensoren zu tun hat
Wichtig: Die FRITZ!Box verbindet LAN-Kabel-Anschluss und WLAN intern zu einem einzigen Netzwerk. Ein per Kabel an die FRITZ!Box angeschlossener Rechner ist also automatisch im selben Netz wie ein Gerät (z. B. der Pi), das per WLAN mit derselben FRITZ!Box verbunden ist – unabhängig davon, ob dieser Rechner gleichzeitig noch über WLAN mit einem ganz anderen Netz (z. B. dem Internet) verbunden ist. Ein Umschalten des eigenen Internet-WLANs ist zur Einrichtung also nicht nötig, solange das LAN-Kabel zur FRITZ!Box gesteckt ist.
Konkret zur Einrichtung des Pi:
- In der FRITZ!Box-Oberfläche (über das LAN-Kabel erreichbar, z. B.
http://192.168.1.1) unter Heimnetz → Netzwerk → Netzwerkverbindungen die aktuelle IP-Adresse des Eintrags „emonpi„ ablesen (z. B.192.168.1.5) - Im Terminal per SSH verbinden:
ssh pi@192.168.1.5
(die Adresse durch die tatsächlich angezeigte ersetzen) - Passwort: ''emonsd'' (Standard, unbedingt nach dem ersten Login ändern)
Schritt 1: Image herunterladen und auf SD-Karte schreiben
- Aktuelles Image von der offiziellen Downloadseite laden:
docs.openenergymonitor.org/emonsd/download.html(aktuell emonSD-10Mar26, ca. 2,2 GB, basierend auf Raspberry Pi OS Lite 64-bit; kompatibel mit Raspberry Pi Zero 2, 3B, 3B+, 4 und 5) - Die
.zip-Datei muss nicht entpackt werden – sowohl balenaEtcher als auch der Raspberry Pi Imager können direkt mit der ZIP-Datei arbeiten - Unter Linux (Kubuntu) den Raspberry Pi Imager installieren:
sudo apt install rpi-imager
- Imager starten, unter „Operating System“ → „Use custom“ die heruntergeladene
.zip-Datei auswählen, passende SD-Karte auswählen (mind. 8 GB, empfohlen 16 GB+)
Wichtig: Der Benutzername darf beim Schreiben NICHT geändert werden – er muss "pi" bleiben, sonst funktionieren interne emonSD-Skripte nicht korrekt. Die OS-Customisation-Funktion des Imagers (WLAN vorab eintragen o. Ä.) hier NICHT nutzen – das würde den in Schritt 2 beschriebenen Einrichtungs-Zugangspunkt verhindern.
Schritt 2: Erstes Hochfahren – ganz ohne Internetzugang
Genau hier liegt der entscheidende Vorteil dieses Images für ein Inselnetz ohne Internet: Wird die SD-Karte ohne vorkonfiguriertes WLAN und ohne angeschlossenes LAN-Kabel gestartet, öffnet der Pi automatisch einen eigenen WLAN-Zugangspunkt zur Einrichtung. Ein Update-Versuch über das Internet wird in diesem Fall gar nicht erst unternommen.
- SD-Karte in den Raspberry Pi 3 einlegen, kein LAN-Kabel anschließen
- Mit Strom versorgen und ca. 1–2 Minuten warten
- Auf einem Laptop oder Smartphone nach dem WLAN „emonpi“ suchen und verbinden (Passwort:
emonpi2016) - Im Browser
http://192.168.42.1aufrufen – dort öffnet sich die integrierte Netzwerk-Einrichtungsseite
Schritt 3: Mit dem isolierten Arduino-Messnetz verbinden
- In der Netzwerk-Einrichtungsseite das WLAN „ARDUINO-MESSNETZ“ (aus Teil 1) aus der Liste auswählen und das dort vergebene Passwort eingeben
- Der Pi verbindet sich daraufhin mit dem isolierten FRITZ!Box-Netz und ist ab sofort nur noch dort erreichbar
- In der FRITZ!Box (Teil 1, Schritt 5) dem Pi wie gehabt die feste IP-Adresse 192.168.1.2 zuweisen, damit EmonCMS dauerhaft unter dieser (auch in den Sensor-Sketches hinterlegten) Adresse erreichbar bleibt
Bekannter FRITZ!OS-Bug: Bei manchen FRITZ!Box-Firmwareständen lässt sich das Adressfeld für "immer gleiche IPv4-Adresse zuweisen" bei einzelnen Geräten nicht speichern – ein seit Jahren bekanntes, nicht restlos geklärtes Verhalten. Funktioniert die Reservierung über die FRITZ!Box-Oberfläche nicht, ist der robustere Weg, die feste IP direkt auf dem Pi selbst zu setzen (siehe Kasten "Wichtig zum Verständnis" oben für den SSH-Zugriff): sudo nmcli connection modify "NETZWERKNAME" ipv4.method manual \ ipv4.addresses 192.168.1.2/24 ipv4.gateway 192.168.1.1 ipv4.dns 192.168.1.1 sudo nmcli connection down "NETZWERKNAME" && sudo nmcli connection up "NETZWERKNAME" (NETZWERKNAME = Name des WLANs, z. B. "ARDUINO-MESSNETZ"; mit "nmcli connection show" auf dem Pi anzeigen lassen)
Schritt 3b: SSH-Zugriff auf den Pi aktivieren
Für den nächsten Schritt (feste IP-Adresse per Kommandozeile setzen) wird ein SSH-Login auf den Pi benötigt. Bei aktuellen emonSD-Images ist SSH aus Sicherheitsgründen standardmäßig deaktiviert:
- Pi kurz vom Strom trennen, SD-Karte entnehmen, in den Kartenleser des PCs stecken
- Die Boot-Partition (FAT32, meist automatisch als „bootfs“ o. Ä. eingebunden) öffnen
- Dort eine leere Datei ohne Dateiendung namens
sshanlegen, z. B. per Terminal:
lsblk sudo mkdir -p /mnt/bootfs sudo mount /dev/mmcblk0p1 /mnt/bootfs sudo touch /mnt/bootfs/ssh sudo umount /mnt/bootfs
(Gerätenamen mit ''lsblk'' vorher prüfen und anpassen) - SD-Karte zurück in den Pi, Strom wieder anschließen, ca. 1 Minute warten
Danach ist SSH-Login möglich:
ssh pi@192.168.1.5
(Adresse aus der FRITZ!Box-Geräteliste, siehe Kasten oben; Passwort: emonsd)
Hinweis zu "REMOTE HOST IDENTIFICATION HAS CHANGED"-Warnungen: Wurde eine IP-Adresse während der Einrichtung mehrfach für unterschiedliche Geräte verwendet (z. B. testweise), merkt sich SSH pro Adresse einen "Fingerabdruck" und schlägt bei einer Änderung Alarm – das ist in diesem Fall harmlos (kein Angriff), sondern nur die Folge der Testerei mit IP-Adressen. Lösung: ssh-keygen -f '~/.ssh/known_hosts' -R 'DIE-BETROFFENE-IP' und danach erneut verbinden.
Schritt 4: EmonCMS-Ersteinrichtung
- Im Browser die feste IP-Adresse des Pi aufrufen (solange die WLAN-Umstellung noch nicht abgeschlossen ist, weiterhin
http://192.168.42.1) - Anmeldung mit den Standard-Zugangsdaten: Benutzername
emonsd, Passwortemonsd - Sofort das Passwort ändern (über die Konto-Einstellungen)
- Unter Administration → Setup lässt sich der Systemstatus prüfen (Dienste emonhub, feedwriter, redis-server, mosquitto sollten „Active Running“ zeigen)
- Inputs und Feeds werden erst angelegt, sobald die ersten Sensor-Boxen Daten senden – siehe Teil 3
Optionales System-Update: Beim Einrichtungsweg über den Access-Point wird das automatische Erst-Update übersprungen. Es kann bei Bedarf später bequem über die Emoncms-Administrations- oberfläche nachgeholt werden – dafür braucht der Pi dann kurzzeitig eine Verbindung mit Internetzugang (z. B. per LAN-Kabel an einem Router mit Internet). Für den Betrieb im isolierten Messnetz ist das aber nicht zwingend nötig.
Wichtiger Hinweis zu PHPFina-Feeds: Das Speicherintervall eines PHPFina-Feeds (Standard-Feed-Engine von EmonCMS) lässt sich NUR bei der Erstellung festlegen und danach nicht mehr ändern! Das passende Intervall unterscheidet sich je nach Boxtyp (siehe Teil 3): Klimamessbox (Außenbereich) = 300 Sekunden (5 Min.), Raummessbox (Innenbereich) = 20 Sekunden. Unbedingt gleich bei der ersten Feed-Anlage korrekt setzen.
Schritt 6: Echtzeituhr (RTC) nachrüsten – dringend empfohlen
Der Raspberry Pi hat werksseitig keine batteriegepufferte Uhr. Im isolierten Messnetz ohne Internetzugang kann er sich außerdem nicht per NTP die korrekte Uhrzeit holen. Nach jedem Neustart oder Stromausfall fällt die Systemzeit daher auf einen falschen Wert zurück – neue Feed-Daten bekommen dann falsche Zeitstempel und erscheinen in Diagrammen/CSV-Exports als fehlend, obwohl sie eigentlich geschrieben wurden.
Die vollständige Einrichtung (Verkabelung, I²C aktivieren, Device-Tree-Overlay, Software-Ersatzuhr entfernen, Uhrzeit setzen) beschreibt eine eigene Seite: Raspberry Pi um Echtzeituhr (RTC) erweitern – HW-111.
Stolpersteine
- WLAN „emonpi“ taucht nicht auf: Meist, weil doch ein LAN-Kabel eingesteckt war oder versehentlich schon vorher ein WLAN konfiguriert wurde (z. B. über die Imager-OS-Customisation) – dann startet der Pi direkt ins reguläre Netz statt in den Einrichtungs-Zugangspunkt. Zur Kontrolle die SD-Karte am PC prüfen, ob im Boot-Verzeichnis eine
wpa_supplicant.confo. Ä. existiert, und diese ggf. entfernen - Emoncms-Login mit
emonsd/emonsdfunktioniert nicht: Zugangsdaten können sich mit neueren Image-Versionen ändern – im Zweifel auf der aktuellen Downloadseite unter „Credentials“ nachsehen - Feste IP-Adresse in der FRITZ!Box vergessen: Ohne feste IP wechselt die Adresse des Pi bei jedem Neustart – vor dem produktiven Einsatz unbedingt nachholen (Teil 1, Schritt 5)
- PHPFina-Intervall nachträglich ändern wollen: geht nicht – nur eine Neuanlage des Feeds hilft. Intervall (120 s) daher gleich richtig bei Feed-Erstellung setzen
- Raspberry Pi 3 wirkt „langsam“: Für ein Schulnetz mit überschaubarer Anzahl Sensor-Boxen und Dashboards reicht die Leistung eines Pi 3 problemlos aus
- Feeds zeigen aktuelle „Last value“, aber Diagramm/CSV-Export bleiben leer (
null): Klassisches Symptom einer falschen Systemzeit (siehe Schritt 6) – der Redis-Cache zeigt den Wert sofort an, die eigentliche PHPFina-Datei wird aber mit dem (falschen) Systemdatum beschrieben. Mitdateprüfen, ob das angezeigte Datum stimmt; falls nicht, RTC nachrüsten oder Uhrzeit zumindest manuell setzen (sudo date -s „JJJJ-MM-TT HH:MM:SS“)
Teil 3: Sensor-Boxen (Klimamessbox & Raummessbox)
Beide Sensor-Boxen basieren auf demselben Grundprinzip: Ein ESP8266 D1 Mini liest mehrere Sensoren aus und sendet die Werte in festen Zeitabständen per WLAN und HTTP an EmonCMS. Beide Boxen teilen sich denselben Netzwerk- und Retry-Mechanismus – nur die angeschlossenen Sensoren unterscheiden sich.
Der vollständige Programmcode (inkl. eines einfachen Testsensors zum Ausprobieren der EmonCMS-Einrichtung ohne fertige Box) steht auf einer eigenen Seite: [[sensor_code|Programmcode der Sensor-Boxen]]. Diese Seite hier beschreibt nur Pin-Belegung, Konfiguration und Funktionsprinzipien.
Klimamessbox (Außenbereich)
Verbaute Sensoren:
- BME280 (I²C) – Temperatur, Luftfeuchtigkeit, Luftdruck
- MH-Z19B (UART) – CO2-Gehalt
- SDS011 (UART) – Feinstaub PM2.5 und PM10
- LDR (analog) – Helligkeit
Hardware: ESP8266 D1 Mini. In der Arduino-IDE als Board „LOLIN(WEMOS) D1 R2 & mini“ wählen. Bei Boot-Abstürzen ersatzweise auf „Generic ESP8266 Module“ mit den Einstellungen Flash Mode: DIO, Flash Frequency: 40MHz, VTables: Flash umstellen.
Pin-Belegung:
| Sensor | Pin(s) | Hinweis |
|---|---|---|
| BME280 | I²C Standard: D1 (SCL), D2 (SDA) | I²C-Adresse 0x76 (ggf. 0x77 prüfen) |
| MH-Z19B | RX = D6 (GPIO12), TX = D5 (GPIO14) | An 5V betrieben; RX-Leitung braucht einen Spannungsteiler 5V→3,3V (1kΩ + 2kΩ), da der ESP8266 nur 3,3V-tolerant ist |
| SDS011 | RX = D7 (GPIO13), TX = D8 (GPIO15) | An 5V betrieben, ohne Spannungsteiler |
| LDR | A0 (analog) | Über Spannungsteiler mit Festwiderstand an A0 |
Konfiguration (nur diese Zeilen pro Box anpassen):
#define SENSOR_ID 134 // Eindeutige Nummer je Sensor-Box (bestimmt Name UND IP-Adresse) #define MODE_LIVE false // true = echte Daten (LIVE-API-Key), false = Testbetrieb #define CO2_OFFSET 40 // Kalibrierungs-Offset, siehe unten #define MESSINTERVALL_MS 120000 // Sendetakt in Millisekunden (120000 = alle 2 Minuten) #define DEBUG true // Ausführliche serielle Ausgaben zur Fehlersuche
Sicherheitshinweis: WLAN-Passwort und EmonCMS-API-Schlüssel stehen
im Original-Sketch als Klartext-Zugangsdaten. Diese NIEMALS in eine
öffentliche Wiki-Seite kopieren! Beim Nachbau durch andere Schulen
müssen eigene, geheime Werte eingetragen werden:
const char* ssid = "<WLAN-NAME>";
const char* password = "<WLAN-PASSWORT>";
const char* APIKEY_LIVE = "<API-KEY-LIVE-AUS-EMONCMS>";
const char* APIKEY_TEST = "<API-KEY-TEST-AUS-EMONCMS>";
Die API-Keys findet man in EmonCMS unter dem jeweiligen Nutzerkonto
("My Account" → "API Keys").
Wichtige Funktionsprinzipien:
- Feste IP statt DHCP: Jede Box bekommt ihre IP direkt aus
SENSOR_IDgebildet (192.168.1.SENSOR_ID), fest im Code überWiFi.config()eingetragen – kein DHCP nötig, jede Box ist damit sofort unter einer vorhersehbaren Adresse erreichbar - Server-Adresse: Fest auf
192.168.1.2eingestellt (die feste IP des Raspberry Pi aus Teil 2) - CO2-Kalibrierung: Die automatische Baseline-Korrektur (ABC) des MH-Z19B wird beim Boot abgeschaltet, weil sie bei einem dauerhaft im Freien montierten Sensor zu falschen Werten führen würde (ABC geht von regelmäßiger Frischluft-Referenz aus – im Außeneinsatz nicht gegeben). Stattdessen wird ein manueller
CO2_OFFSETverwendet: An einem Frischluft-Referenzpunkt (z. B. früh morgens) ablesen, was der Sensor anzeigt, und den Offset so wählen, dass ca. 420–440 ppm (aktueller globaler Referenzwert) erreicht werden - SDS011-Energiesparmodus: Der Feinstaubsensor hat einen Lüfter, der sich abnutzt. Er wird zwischen den Messungen in den Sleep-Modus versetzt und nur für die eigentliche Messung (10 Sekunden Vorlaufzeit) aufgeweckt – das verlängert die Lebensdauer von ca. 8.000 auf ca. 20.000 Betriebsstunden
- Robuste Datenübertragung: Schlägt ein Upload fehl, versucht die Box es bis zu 5-mal: zunächst 3 normale Versuche mit steigender Pause, danach zwei Versuche mit vorherigem WLAN-Soft-Reset. Das macht die Box widerstandsfähig gegen kurze WLAN-Aussetzer, wie sie im Schulalltag (viele Geräte, dicke Wände) vorkommen können
- Watchdog: Gelingt binnen 3 Minuten nach dem Booten kein einziger Upload, oder ist das WLAN länger als 2 Minuten am Stück weg, startet sich der ESP8266 selbstständig neu
Übertragene Messwerte (JSON an EmonCMS):
| Feldname | Bedeutung | Einheit |
|---|---|---|
| F_rel | Relative Luftfeuchtigkeit | % |
| T_C | Temperatur | °C |
| P_hPa | Luftdruck (auf Meereshöhe umgerechnet) | hPa |
| CO2_ppm | CO2-Gehalt | ppm |
| PM25 | Feinstaub PM2.5 | µg/m³ |
| PM10 | Feinstaub PM10 | µg/m³ |
| H_bit | Helligkeit (invertiert: hell=klein, dunkel=groß) | – |
EmonCMS-Einrichtung pro Box:
- Node/Input-Name entspricht der
SENSOR_IDaus dem Sketch (z. B. „134“) – erscheint automatisch unter Inputs, sobald die Box zum ersten Mal sendet - Für jedes der sieben Felder oben einen Feed anlegen (PHPFina, Interval 300 Sekunden (5 Min.) – muss zum
MESSINTERVALL_MSim Sketch passen und lässt sich nur bei der Erstellung setzen, siehe Teil 2)
Raummessbox (Innenbereich)
Verbaute Sensoren:
- DHT22 – Luftfeuchtigkeit (Temperaturwert des DHT22 wird hier nicht verwendet, siehe BMP180)
- BMP180 (I²C) – Temperatur, Luftdruck
- MH-Z19B (UART) – CO2-Gehalt
- LDR (analog) – Helligkeit
- NeoPixel-LED-Band (4 oder 5 LEDs) – CO2-Ampel zur direkten Anzeige im Klassenraum, ohne dass jemand ein Display ablesen muss
Im Gegensatz zur Außenbox entfällt der Feinstaubsensor (SDS011) – dafür kommt die LED-Ampel als zusätzliche Ausgabe hinzu.
Hardware: ESP8266 D1 Mini, gleiches Board-Profil wie bei der Klimamessbox („LOLIN(WEMOS) D1 R2 & mini“, bei Bootproblemen alternativ „Generic ESP8266 Module“ mit DIO/40MHz/VTables:Flash).
Pin-Belegung:
| Sensor | Pin(s) | Hinweis |
|---|---|---|
| DHT22 | D7 (GPIO13) | Nur Luftfeuchtigkeit wird ausgelesen |
| BMP180 | I²C Standard: D1 (SCL), D2 (SDA) | Adresse fest in der Bibliothek (SFE_BMP180) |
| MH-Z19B | RX = D6 (GPIO12), TX = D5 (GPIO14) | Wie bei der Klimamessbox: an 5V betrieben, RX-Leitung braucht Spannungsteiler 5V→3,3V |
| LDR | A0 (analog) | Invertiert ausgewertet (hell → kleiner Wert) |
| NeoPixel-LED-Band | D4 (GPIO2) | 4- oder 5-LED-Variante, siehe NUM_LEDS |
Konfiguration (nur diese Zeilen pro Box anpassen):
#define SENSOR_ID 106 // Eindeutige Nummer je Sensor-Box (bestimmt Name UND IP-Adresse) #define MODE_LIVE true // true = echte Daten (LIVE-API-Key), false = Testbetrieb #define NUM_LEDS 4 // Anzahl verbauter LEDs: 5 = Normalausführung, 4 = kompakte Bauform #define CO2_OFFSET 40 // Kalibrierungs-Offset, wie bei der Klimamessbox
Sicherheitshinweis: Wie bei der Klimamessbox stehen im Original- Sketch echte Zugangsdaten (WLAN-Passwort, API-Keys) im Klartext. Auch hier gilt: niemals in die öffentliche Wiki-Seite kopieren, sondern durch eigene, geheime Werte ersetzen (siehe Hinweis-Kasten bei der Klimamessbox oben).
Besonderheiten gegenüber der Klimamessbox:
- Kürzeres Messintervall: 20 Sekunden statt 300 Sekunden (
const int Schreibpause = 20000;), gedacht für engmaschiges Langzeit-Monitoring im Klassenraum. Der EmonCMS-Feed muss dafür mit Intervall 20 statt 300 angelegt werden – nicht mit der Klimamessbox verwechseln! - CO2-Ampel über NeoPixel-LEDs: Ein Farbverlauf von Blau (< 500 ppm, sehr gut) über Grün und Gelb bis Rot (> 2250 ppm, kritisch) zeigt die Luftqualität direkt vor Ort an – nützlich für den Unterricht, da Schüler:innen die CO2-Ampel ohne Bildschirm ablesen können. Ab 2700 ppm blinkt das Band fünfmal abwechselnd Rot/Weiß als Alarm, danach leuchtet es dauerhaft Rot
NUM_LEDS-Umschalter: Da im Einsatz zwei Bauformen (4 und 5 LEDs) existieren, passt sich das Anzeigemuster automatisch an – nicht verbaute LED-Positionen werden einfach dunkel gelassen- Kein Feinstaubsensor: Entsprechend fehlt im gesendeten JSON das Feld für PM2.5/PM10 (siehe unten)
Übertragene Messwerte (JSON an EmonCMS):
| Feldname | Bedeutung | Einheit |
|---|---|---|
| F_rel | Relative Luftfeuchtigkeit (DHT22) | % |
| T_C | Temperatur (BMP180) | °C |
| P_hPa | Luftdruck (auf Meereshöhe umgerechnet) | hPa |
| CO2_ppm | CO2-Gehalt | ppm |
| H_bit | Helligkeit (invertiert) | – |
EmonCMS-Einrichtung pro Box:
- Node/Input-Name entspricht der
SENSOR_ID(z. B. „106“) - Für jedes der fünf Felder oben einen Feed anlegen (PHPFina, Interval 20 Sekunden – abweichend von der Klimamessbox!)
Stolpersteine
- MH-Z19B liefert unplausible Werte direkt nach dem Einschalten: Der Sensor braucht ca. 3 Minuten Aufwärmzeit – erste Messwerte in dieser Zeit ignorieren
- BME280 wird nicht gefunden (Endlosschleife beim Boot): I²C-Verkabelung prüfen (SDA/SCL vertauscht?) sowie die I²C-Adresse – manche Module nutzen 0x77 statt 0x76
- SDS011 liefert dauerhaft Fehler: Meist Verkabelungsfehler bei RX/TX (leicht zu vertauschen) oder zu kurze Aufwachzeit bei sehr kurz eingestelltem
MESSINTERVALL_MS– die KonstanteschreibpauseRohzieht die 10 Sekunden SDS011-Aufwachzeit automatisch vom Gesamtintervall ab, bei Intervallen unter 15 Sekunden greift eine Mindestpause von 2 Sekunden - Zwei Boxen mit derselben
SENSOR_ID: Führt zu IP- und Node-Konflikten – vor der Inbetriebnahme einer neuen Box unbedingt sicherstellen, dass die Nummer noch nicht vergeben ist (Übersicht am besten zentral im Wiki oder in EmonCMS unter „Inputs“ pflegen) - Box startet ständig neu (Watchdog): Deutet meist auf ein instabiles WLAN-Signal am Aufstellort hin – Empfangsstärke (RSSI) über die Debug-Ausgabe prüfen, ggf. Position ändern oder FRITZ!Box-Sendeleistung erhöhen
- LED-Band zeigt bei der Raummessbox falsche/fehlende LEDs:
NUM_LEDSmuss zur tatsächlich verbauten Bauform passen (4 oder 5) – falsch eingestellt, bleibt entweder die letzte LED immer dunkel oder es wird versucht, eine nicht vorhandene LED anzusteuern - BMP180 wird nicht gefunden (Endlosschleife beim Boot der Raummessbox): I²C-Verkabelung prüfen (D1=SCL, D2=SDA, GND, 3V3) – anders als beim BME280 der Klimamessbox hat der BMP180 keine wählbare Adresse
Fotos & Schaltpläne
Noch zu ergänzen – dieser Abschnitt dient als Platzhalter und Checkliste, welche Bilder für den Nachbau durch andere Schulen besonders hilfreich sind. Bilder lassen sich in DokuWiki mit der Syntax einbinden (Upload über den „Bild hinzufügen“-Button im Editor oder Medien-Manager).

Empfohlene Aufnahmen:
- FRITZ!Box von hinten/unten (Anschlüsse, ggf. Typenschild mit Modellbezeichnung)
- Aufbau Raspberry Pi (Gehäuse, SD-Karte, Stromversorgung) im Praxiseinsatz
- Klimamessbox (Außenbereich): Platinenaufbau von oben, mit beschrifteten Sensoren
- Klimamessbox: Verkabelung des Spannungsteilers am MH-Z19B (RX-Leitung), Nahaufnahme
- Raummessbox (Innenbereich): Platinenaufbau von oben, mit LED-Band
- Raummessbox: LED-Ampel in Aktion (Foto bei unterschiedlichen CO2-Werten, falls möglich)
- Montageort im Klassenraum bzw. draußen (Beispielfoto für Aufhängung/Wetterschutz)
- Screenshot des EmonCMS-Dashboards mit Live-Daten
- Schaltplan/Fritzing-Skizze je Sensor-Box (Verdrahtung BME280/BMP180, MH-Z19B, SDS011, LDR, LED-Band)
{{ :platinen:klimamessbox_verkabelung.jpg?600 |Verkabelung der Klimamessbox: MH-Z19B mit Spannungsteiler}}
Übersicht vergebener SENSOR_IDs
Damit beim Nachbau nicht versehentlich zwei Boxen dieselbe SENSOR_ID (und damit dieselbe IP-Adresse) bekommen, empfiehlt sich eine zentral gepflegte Tabelle – idealerweise direkt hier im Wiki, gut sichtbar für alle, die neue Boxen in Betrieb nehmen.
| SENSOR_ID | IP-Adresse | Boxtyp | Standort | Node-Name (EmonCMS) | Bemerkung |
|---|---|---|---|---|---|
| 106 | 192.168.1.106 | Raummessbox | z. B. Klassenraum 2.14 | 106 | 4-LED-Variante |
| 134 | 192.168.1.134 | Klimamessbox | z. B. Außenfassade Nordseite | 134 | mit Wetterschutzgehäuse |
| … | 192.168.1…. | … | … | … | … |
Empfehlung zur Nummernvergabe: Feste Wertebereiche pro Boxtyp reservieren, z. B. 100-149 für Raummessboxen und 150-199 für Klimamessboxen (Außenbereich) - das erleichtert auf einen Blick, worum es sich bei einer bestimmten SENSOR_ID handelt, ohne die Tabelle nachschlagen zu müssen. IDs 2-99 bleiben für Infrastruktur (Raspberry Pi = 2, FRITZ!Box = 1, Reserve für Zukünftiges) frei.
Sicheres Ein- und Ausschalten des Gesamtsystems
Praktisch relevant, sobald die komplette Station (FRITZ!Box, Raspberry Pi, ggf. Sensorboxen) gemeinsam an einer Steckdosenleiste hängt, z. B. in einem Koffer für den mobilen/temporären Einsatz.
Nur der Raspberry Pi braucht eine kontrollierte Abschaltung – FRITZ!Box und ESP8266-Sensorboxen vertragen einfaches Stromwegnehmen problemlos. Beim Pi dagegen kann ein abrupter Stromausfall während eines Schreibvorgangs die SD-Karte beschädigen.
Richtig ausschalten:
- Per SSH mit dem Pi verbinden:
ssh pi@192.168.1.2 - Sauber herunterfahren:
sudo shutdown -h now - Warten, bis die grüne Aktivitäts-LED am Pi dauerhaft aus ist (meist 10–20 Sekunden) – erst dann ist die SD-Karte sicher „geparkt“
- Erst danach die Steckdosenleiste ausschalten
Wieder einschalten:
- Steckdosenleiste einschalten – alle Komponenten fahren gleichzeitig hoch
- Der Pi braucht am längsten (ca. 1–2 Minuten bis EmonCMS erreichbar ist)
- Dank der Retry-Logik in allen Sensor-Sketches (3 WLAN-Versuche mit Backoff, siehe Programmcode-Seite) verbinden sich die Sensorboxen automatisch, sobald FRITZ!Box und Pi bereit sind – kein manuelles Eingreifen nötig
Dank RTC-Modul (siehe eigene Seite zur HW-111-Nachrüstung) bleibt die Uhrzeit ab jetzt automatisch korrekt erhalten - ein manuelles Nachstellen der Systemzeit nach dem Wiedereinschalten ist nicht mehr nötig.
Wichtige Zugänge – Checkliste
ACHTUNG - NICHT ÖFFENTLICH AUSFÜLLEN! Diese Tabelle dient nur als Checkliste, WELCHE vier Zugänge bei der Installation gesetzt werden und WO sie zu finden sind. Die echten Passwörter/Keys gehören NICHT auf diese öffentliche Wiki-Seite, sondern in einen Passwort-Manager oder eine interne, nicht- öffentliche Wiki-Seite (z. B. im geschützten Kollegiumsbereich). Wer diese Anleitung nachbaut, trägt eigene, neue Zugangsdaten ein - niemals die aus einem Beispiel oder einer anderen Schule übernehmen.
Bei der Einrichtung werden vier voneinander unabhängige Zugänge gesetzt bzw. sichtbar:
| # | Zugang | Wo gesetzt/geändert | Wo zu finden | Notiz |
|---|---|---|---|---|
| 1 | FRITZ!Box Admin-Kennwort | Teil 1, Schritt 2 (Ersteinrichtung) | FRITZ!Box-Weboberfläche → System → Kennwörter | Schützt die Router-Konfiguration selbst |
| 2 | WLAN-Kennwort „SAS-ARDUINO“ / „SAS-ARDUINO-mobil“ | Teil 1, Schritt 3 | FRITZ!Box-Weboberfläche → WLAN → Funknetz | Wird 1:1 in jeden Sensor-Sketch eingetragen (Bereich A/B/C, siehe Sensorcode-Seite) |
| 3 | Raspberry Pi – SSH-Login (Benutzer pi) | Teil 2, Schritt 4 (bzw. per passwd nachträglich) | Direkt am Pi per SSH änderbar: ssh pi@[IP-Adresse] → passwd | Getrennt vom EmonCMS-Weblogin, eigenes Passwort |
| 4 | EmonCMS – Weblogin (Benutzer emonsd, änderbar) | Teil 2, Schritt 4 | EmonCMS-Oberfläche → My Account | Zusätzlich dort: Read-&-Write- und Read-Only-API-Key (siehe „Sensoren einbinden“, Schritt 1) |
Empfehlung: Für jede Installation (Produktiv-Pi UND ggf. separater Test-/Entwicklungs-Pi) diese vier Zugänge getrennt und mit klarem Bezug zum jeweiligen Gerät im Passwort-Manager ablegen - gerade bei mehreren Pis (z. B. Schul-Livesystem und ein mobiler Test-Pi) erleichtert das die spätere Übersicht erheblich.