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:

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:

  1. Begriffsklärung: "Klima" oder doch etwas anderes? – fachliche Einordnung für den Unterricht
  2. Teil 1: FRITZ!Box als isoliertes Sensor-WLAN einrichten – Werksreset, WLAN-Konfiguration, IP-Adressbereich
  3. Teil 2: Raspberry Pi 3 mit EmonCMS – Image, Ersteinrichtung, feste IP, RTC-Modul gegen Zeitversatz
  4. Teil 3: Sensor-Boxen – Klimamessbox (Außenbereich) und Raummessbox (Innenbereich)
  5. Fotos & Schaltpläne – noch zu ergänzende Bilddokumentation
  6. Übersicht vergebener SENSOR_IDs – Vorlage zur Konfliktvermeidung bei mehreren Boxen
  7. Wichtige Zugänge – Checkliste – welche vier Zugänge bei der Installation gesetzt werden (NICHT öffentlich mit echten Passwörtern pflegen!)
  8. Sensoren in EmonCMS einbinden – eigene Seite mit dem wiederkehrenden Ablauf für jede neue Box (API-Key, Inputs, Feeds, Dashboard)
  9. Programmcode der Sensor-Boxen – eigene Seite mit dem vollständigen Arduino-Code (Testsensor, einfacher BME280-Sensor, Klimamessbox, Raummessbox)
  10. Raspberry Pi um Echtzeituhr (RTC) erweitern – HW-111 – eigene Seite zur Nachrüstung eines DS1307-RTC-Moduls gegen Zeitversatz nach Neustarts
  11. 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

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):

  1. Auf download.avm.de/fritzbox/ das eigene Modell auswählen, dann in den Ordner deutschland und weiter in den Unterordner recover wechseln
  2. 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
  3. FRITZ!Box per LAN-Kabel direkt mit dem Windows-Rechner verbinden (kein Switch/Hub dazwischen)
  4. Die Windows-Firewall kurzzeitig deaktivieren, falls das Tool die Box nicht findet
  5. Das Wiederherstellungsprogramm starten und den Anweisungen folgen – es spielt die Firmware neu auf und versetzt die Box in den Auslieferungszustand
  6. 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):

  1. FRITZ!Box für 1 Minute vom Stromnetz trennen, dann wieder anschließen
  2. Innerhalb der nächsten 10 Minuten die Bedienoberfläche aufrufen – http://fritz.box, http://192.168.178.1 oder Notfall-IP http://169.254.1.1
  3. Auf „Kennwort vergessen?“ klicken, dann „Werkseinstellungen wiederherstellen“
  4. 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

  1. FRITZ!Box per LAN-Kabel mit einem Computer verbinden (nicht WLAN, für die Ersteinrichtung ist LAN zuverlässiger)
  2. Im Browser http://fritz.box oder http://192.168.178.1 aufrufen
  3. Den Einrichtungsassistenten ggf. abbrechen/überspringen – ein Internetanschluss wird nicht konfiguriert
  4. 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:

Schritt 4: Kein Internetzugang – das ist so gewollt

Die FRITZ!Box bleibt ohne DSL-/WAN-Anschluss. Das hat zwei angenehme Nebeneffekte:

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:

  1. Unter Heimnetz → Netzwerk → Netzwerkeinstellungen auf „IPv4-Adressen“ klicken
  2. Die IPv4-Adresse der FRITZ!Box von 192.168.178.1 auf 192.168.1.1 ändern (Netzmaske 255.255.255.0 bleibt gleich)
  3. Übernehmen – die Box startet neu und ist danach unter http://192.168.1.1 bzw. weiterhin http://fritz.box erreichbar
  4. 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:

Stolpersteine


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:

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:

  1. 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)
  2. 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

  1. 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)
  2. Die .zip-Datei muss nicht entpackt werden – sowohl balenaEtcher als auch der Raspberry Pi Imager können direkt mit der ZIP-Datei arbeiten
  3. Unter Linux (Kubuntu) den Raspberry Pi Imager installieren:
sudo apt install rpi-imager
  1. 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.

  1. SD-Karte in den Raspberry Pi 3 einlegen, kein LAN-Kabel anschließen
  2. Mit Strom versorgen und ca. 1–2 Minuten warten
  3. Auf einem Laptop oder Smartphone nach dem WLAN „emonpi“ suchen und verbinden (Passwort: emonpi2016)
  4. Im Browser http://192.168.42.1 aufrufen – dort öffnet sich die integrierte Netzwerk-Einrichtungsseite

Schritt 3: Mit dem isolierten Arduino-Messnetz verbinden

  1. In der Netzwerk-Einrichtungsseite das WLAN „ARDUINO-MESSNETZ“ (aus Teil 1) aus der Liste auswählen und das dort vergebene Passwort eingeben
  2. Der Pi verbindet sich daraufhin mit dem isolierten FRITZ!Box-Netz und ist ab sofort nur noch dort erreichbar
  3. 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:

  1. Pi kurz vom Strom trennen, SD-Karte entnehmen, in den Kartenleser des PCs stecken
  2. Die Boot-Partition (FAT32, meist automatisch als „bootfs“ o. Ä. eingebunden) öffnen
  3. Dort eine leere Datei ohne Dateiendung namens ssh anlegen, 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

  1. Im Browser die feste IP-Adresse des Pi aufrufen (solange die WLAN-Umstellung noch nicht abgeschlossen ist, weiterhin http://192.168.42.1)
  2. Anmeldung mit den Standard-Zugangsdaten: Benutzername emonsd, Passwort emonsd
  3. Sofort das Passwort ändern (über die Konto-Einstellungen)
  4. Unter Administration → Setup lässt sich der Systemstatus prüfen (Dienste emonhub, feedwriter, redis-server, mosquitto sollten „Active Running“ zeigen)
  5. 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

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:

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:

Ü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:

  1. Node/Input-Name entspricht der SENSOR_ID aus dem Sketch (z. B. „134“) – erscheint automatisch unter Inputs, sobald die Box zum ersten Mal sendet
  2. Für jedes der sieben Felder oben einen Feed anlegen (PHPFina, Interval 300 Sekunden (5 Min.) – muss zum MESSINTERVALL_MS im Sketch passen und lässt sich nur bei der Erstellung setzen, siehe Teil 2)

Raummessbox (Innenbereich)

Verbaute Sensoren:

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:

Ü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:

  1. Node/Input-Name entspricht der SENSOR_ID (z. B. „106“)
  2. Für jedes der fünf Felder oben einen Feed anlegen (PHPFina, Interval 20 Sekunden – abweichend von der Klimamessbox!)

Stolpersteine


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 Bildbeschreibung einbinden (Upload über den „Bild hinzufügen“-Button im Editor oder Medien-Manager).

Empfohlene Aufnahmen:

{{ :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:

  1. Per SSH mit dem Pi verbinden: ssh pi@192.168.1.2
  2. Sauber herunterfahren: sudo shutdown -h now
  3. 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“
  4. Erst danach die Steckdosenleiste ausschalten

Wieder einschalten:

  1. Steckdosenleiste einschalten – alle Komponenten fahren gleichzeitig hoch
  2. Der Pi braucht am längsten (ca. 1–2 Minuten bis EmonCMS erreichbar ist)
  3. 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:

  1. Begriffsklärung: "Klima" oder doch etwas anderes? – fachliche Einordnung für den Unterricht
  2. Teil 1: FRITZ!Box als isoliertes Sensor-WLAN einrichten – Werksreset, WLAN-Konfiguration, IP-Adressbereich
  3. Teil 2: Raspberry Pi 3 mit EmonCMS – Image, Ersteinrichtung, feste IP, RTC-Modul gegen Zeitversatz
  4. Teil 3: Sensor-Boxen – Klimamessbox (Außenbereich) und Raummessbox (Innenbereich)
  5. Fotos & Schaltpläne – noch zu ergänzende Bilddokumentation
  6. Übersicht vergebener SENSOR_IDs – Vorlage zur Konfliktvermeidung bei mehreren Boxen
  7. Wichtige Zugänge – Checkliste – welche vier Zugänge bei der Installation gesetzt werden (NICHT öffentlich mit echten Passwörtern pflegen!)
  8. Sensoren in EmonCMS einbinden – eigene Seite mit dem wiederkehrenden Ablauf für jede neue Box (API-Key, Inputs, Feeds, Dashboard)
  9. Programmcode der Sensor-Boxen – eigene Seite mit dem vollständigen Arduino-Code (Testsensor, einfacher BME280-Sensor, Klimamessbox, Raummessbox)
  10. Raspberry Pi um Echtzeituhr (RTC) erweitern – HW-111 – eigene Seite zur Nachrüstung eines DS1307-RTC-Moduls gegen Zeitversatz nach Neustarts
  11. 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

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):

  1. Auf download.avm.de/fritzbox/ das eigene Modell auswählen, dann in den Ordner deutschland und weiter in den Unterordner recover wechseln
  2. 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
  3. FRITZ!Box per LAN-Kabel direkt mit dem Windows-Rechner verbinden (kein Switch/Hub dazwischen)
  4. Die Windows-Firewall kurzzeitig deaktivieren, falls das Tool die Box nicht findet
  5. Das Wiederherstellungsprogramm starten und den Anweisungen folgen – es spielt die Firmware neu auf und versetzt die Box in den Auslieferungszustand
  6. 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):

  1. FRITZ!Box für 1 Minute vom Stromnetz trennen, dann wieder anschließen
  2. Innerhalb der nächsten 10 Minuten die Bedienoberfläche aufrufen – http://fritz.box, http://192.168.178.1 oder Notfall-IP http://169.254.1.1
  3. Auf „Kennwort vergessen?“ klicken, dann „Werkseinstellungen wiederherstellen“
  4. 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

  1. FRITZ!Box per LAN-Kabel mit einem Computer verbinden (nicht WLAN, für die Ersteinrichtung ist LAN zuverlässiger)
  2. Im Browser http://fritz.box oder http://192.168.178.1 aufrufen
  3. Den Einrichtungsassistenten ggf. abbrechen/überspringen – ein Internetanschluss wird nicht konfiguriert
  4. 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:

Schritt 4: Kein Internetzugang – das ist so gewollt

Die FRITZ!Box bleibt ohne DSL-/WAN-Anschluss. Das hat zwei angenehme Nebeneffekte:

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:

  1. Unter Heimnetz → Netzwerk → Netzwerkeinstellungen auf „IPv4-Adressen“ klicken
  2. Die IPv4-Adresse der FRITZ!Box von 192.168.178.1 auf 192.168.1.1 ändern (Netzmaske 255.255.255.0 bleibt gleich)
  3. Übernehmen – die Box startet neu und ist danach unter http://192.168.1.1 bzw. weiterhin http://fritz.box erreichbar
  4. 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:

Stolpersteine


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:

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:

  1. 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)
  2. 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

  1. 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)
  2. Die .zip-Datei muss nicht entpackt werden – sowohl balenaEtcher als auch der Raspberry Pi Imager können direkt mit der ZIP-Datei arbeiten
  3. Unter Linux (Kubuntu) den Raspberry Pi Imager installieren:
sudo apt install rpi-imager
  1. 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.

  1. SD-Karte in den Raspberry Pi 3 einlegen, kein LAN-Kabel anschließen
  2. Mit Strom versorgen und ca. 1–2 Minuten warten
  3. Auf einem Laptop oder Smartphone nach dem WLAN „emonpi“ suchen und verbinden (Passwort: emonpi2016)
  4. Im Browser http://192.168.42.1 aufrufen – dort öffnet sich die integrierte Netzwerk-Einrichtungsseite

Schritt 3: Mit dem isolierten Arduino-Messnetz verbinden

  1. In der Netzwerk-Einrichtungsseite das WLAN „ARDUINO-MESSNETZ“ (aus Teil 1) aus der Liste auswählen und das dort vergebene Passwort eingeben
  2. Der Pi verbindet sich daraufhin mit dem isolierten FRITZ!Box-Netz und ist ab sofort nur noch dort erreichbar
  3. 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:

  1. Pi kurz vom Strom trennen, SD-Karte entnehmen, in den Kartenleser des PCs stecken
  2. Die Boot-Partition (FAT32, meist automatisch als „bootfs“ o. Ä. eingebunden) öffnen
  3. Dort eine leere Datei ohne Dateiendung namens ssh anlegen, 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

  1. Im Browser die feste IP-Adresse des Pi aufrufen (solange die WLAN-Umstellung noch nicht abgeschlossen ist, weiterhin http://192.168.42.1)
  2. Anmeldung mit den Standard-Zugangsdaten: Benutzername emonsd, Passwort emonsd
  3. Sofort das Passwort ändern (über die Konto-Einstellungen)
  4. Unter Administration → Setup lässt sich der Systemstatus prüfen (Dienste emonhub, feedwriter, redis-server, mosquitto sollten „Active Running“ zeigen)
  5. 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

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:

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:

Ü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:

  1. Node/Input-Name entspricht der SENSOR_ID aus dem Sketch (z. B. „134“) – erscheint automatisch unter Inputs, sobald die Box zum ersten Mal sendet
  2. Für jedes der sieben Felder oben einen Feed anlegen (PHPFina, Interval 300 Sekunden (5 Min.) – muss zum MESSINTERVALL_MS im Sketch passen und lässt sich nur bei der Erstellung setzen, siehe Teil 2)

Raummessbox (Innenbereich)

Verbaute Sensoren:

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:

Ü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:

  1. Node/Input-Name entspricht der SENSOR_ID (z. B. „106“)
  2. Für jedes der fünf Felder oben einen Feed anlegen (PHPFina, Interval 20 Sekunden – abweichend von der Klimamessbox!)

Stolpersteine


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 Bildbeschreibung einbinden (Upload über den „Bild hinzufügen“-Button im Editor oder Medien-Manager).

Empfohlene Aufnahmen:

{{ :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:

  1. Per SSH mit dem Pi verbinden: ssh pi@192.168.1.2
  2. Sauber herunterfahren: sudo shutdown -h now
  3. 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“
  4. Erst danach die Steckdosenleiste ausschalten

Wieder einschalten:

  1. Steckdosenleiste einschalten – alle Komponenten fahren gleichzeitig hoch
  2. Der Pi braucht am längsten (ca. 1–2 Minuten bis EmonCMS erreichbar ist)
  3. 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.