====== Sensoren in EmonCMS einbinden ======
{{:www-fuer-alle:raumklima-105-box-geschlossen.png?200|}}{{:www-fuer-alle:klimabox-aussen-2025-05.png?200|}}
^ Seite ^ Inhalt | |
| [[www-messdatenerfassung-sas:startseite|Startseite]] | Übersicht | |
| [[www-messdatenerfassung-sas:klimastation|Hauptanleitung]] | Gesamtüberblick, Begriffsklärung, Teil 1–3 (FRITZ!Box, Raspberry Pi/EmonCMS, Sensor-Boxen), Ein-/Ausschalten, Zugänge-Checkliste, SENSOR_ID-Übersicht | |
| [[www-messdatenerfassung-sas:sensoren_einbinden|Sensoren in EmonCMS einbinden]] | **Wiederkehrender Ablauf für jede neue Sensor-Box: API-Key, Inputs, Feeds, Dashboard** | |
| [[www-messdatenerfassung-sas:sensor_code|Programmcode der Sensor-Boxen]] | Vollständiger Arduino-Code: Testsensor, einfacher BME280-Sensor, Klimamessbox, Raummessbox | |
| [[www-messdatenerfassung-sas:raspi_rtc_hw111|Raspberry Pi um Echtzeituhr (RTC) erweitern – HW-111]] | Nachrüstung eines DS1307-RTC-Moduls, Shutdown-Taster | |
| [[Platinenschaltung|Schaltung]] | Platine | |
| [[3D-Gehäuse|Gehäuse]] | 3D-Druck oder LASER-Cutter | |
| [[Unterrichtseinsatz|Schule]] | Einsatz im Unterricht | |
| [[Sonstiges|Sonstiges]] | dies und das.... | |
====== Sensoren in EmonCMS einbinden ======
Diese Seite beschreibt den Ablauf, um einen bereits fertig verkabelten und geflashten Sensor (hier durchgängig am Beispiel des [[biebl:anleitungen:sensor_code#einfacher_sensornur_bme280_temperatur_luftfeuchtigkeit_luftdruck|einfachen BME280-Testsensors]], siehe [[biebl:anleitungen:klimastation|Hauptanleitung]] und [[biebl:anleitungen:sensor_code|Sensorcode]]) in EmonCMS sichtbar zu machen und seine Messwerte dauerhaft aufzuzeichnen. Genau derselbe Ablauf wiederholt sich später bei **jeder neuen Sensor-Box** (Klimamessbox, Raummessbox) – nur die Anzahl der Datenfelder und das passende Feed-Interval unterscheiden sich.
**Voraussetzung:** Der Testsensor ist fertig konfiguriert (eigene ''SENSOR_ID'', eigener API-Key eingetragen, siehe Hauptanleitung Teil 3 bzw. Sensorcode-Seite) und mit Strom versorgt.
----
===== Schritt 1: API-Key besorgen =====
- In EmonCMS einloggen (Standard: Benutzername ''emonsd'', siehe Hauptanleitung Teil 2)
- Oben rechts auf den Benutzernamen bzw. das Konto-Symbol klicken → **„My Account“**
- alternativ direkt die Adresse ''http://[IP-Adresse-des-Pi]/user/view'' aufrufen, z. B. ''http://192.168.1.2/user/view''
- Dort erscheinen zwei Schlüssel:
* **„Read & Write API Key“** – dieser wird gebraucht, da der Testsensor Daten *sendet* (''input/post.json'')
* **„Read Only API Key“** – nur für lesende Abfragen/Dashboards, für Sensor-Boxen ungeeignet
- Den **„Read & Write API Key“** kopieren
Verwechslungsgefahr: Unter Administration/Setup gibt es eine
"Server Information"-Seite mit vielen Systemdaten - dort steht
KEIN API-Key! Der Key findet sich ausschließlich unter "My Account"
(bzw. der /user/view-Seite des jeweiligen Benutzerkontos).
Wichtig bei mehreren EmonCMS-Installationen (z. B. Produktiv-System
und separater Test-/Entwicklungs-Pi): Vor dem Kopieren unbedingt
prüfen, bei welcher Installation man gerade eingeloggt ist - die
Adressleiste des Browsers zeigt die IP-Adresse des jeweiligen Pi.
Ein Key vom Produktiv-System darf niemals in Test- oder
Entwicklungs-Sketches landen.
Diesen Wert im Sketch des Testsensors eintragen (siehe [[biebl:anleitungen:sensor_code|Programmcode-Seite]], Platzhalter ''apikey'' im jeweils aktiven Netzwerk-Bereich A/B/C), Sketch neu hochladen, Testsensor neu starten.
----
Nachdem der [[biebl:anleitungen:sensor_code#einfacher_sensornur_bme280_temperatur_luftfeuchtigkeit_luftdruck|Testsensor]] läuft, kann EmonCMS eingerichtet werden:
===== Schritt 2: Prüfen, ob die Messdaten ankommen =====
Der Testsensor [[biebl:anleitungen:sensor_code#serieller_monitor|sendet erfolgreich]], erkennbar am seriellen Monitor:
13:14:53.275 -> [HTTP] code=200 | T=25.00°C F=49.4% P=1015.0hPa
13:15:23.311 -> [HTTP] code=200 | T=24.97°C F=48.7% P=1014.9hPa
13:15:53.373 -> [HTTP] code=200 | T=24.93°C F=48.5% P=1014.9hPa
13:16:23.428 -> [HTTP] code=200 | T=24.91°C F=48.4% P=1014.9hPa
13:16:53.451 -> [HTTP] code=200 | T=24.90°C F=48.5% P=1015.0hPa
- In EmonCMS zu [[http://192.168.1.2/input/view|**Inputs**]] wechseln
- Sobald der Testsensor **mindestens einmal erfolgreich** gesendet hat, erscheint dort automatisch ein neuer Eintrag mit dem Node-Namen = ''SENSOR_ID'' des Testsensors (in diesem Beispiel „100“)
- Darunter erscheinen die einzelnen Datenfelder aus dem JSON des Testsensors: ''T_C'', ''F_rel'', ''P_hPa''
Hinweis zur SENSOR_ID 100: Laut SENSOR_ID-Übersichtstabelle in der
Hauptanleitung sind die Bereiche 100-149 künftig für Raummessboxen
und 150-199 für Klimamessboxen vorgesehen. Für einen dauerhaft
genutzten Testsensor empfiehlt sich daher langfristig eine ID aus
dem für Infrastruktur/Tests reservierten Bereich (z. B. 998), um
spätere Kollisionen mit echten Raummessboxen zu vermeiden.
Erscheint nach mehreren Minuten immer noch nichts unter "Inputs":
- Serielle Debug-Ausgabe des Sensors prüfen (USB-Kabel + Arduino IDE,
serieller Monitor bei 115200 Baud) - zeigt HTTP-Statuscode und
Fehlermeldungen des letzten Sendeversuchs
- API-Key auf Tippfehler prüfen (führt zu HTTP 401 bzw. keiner
Aufnahme des Inputs)
- Feste IP des Sensors (aus SENSOR_ID) auf Kollision mit einem
anderen Gerät im Netz prüfen (siehe SENSOR_ID-Übersichtstabelle
in der Hauptanleitung)
----
===== Schritt 3: Feeds anlegen (ein Feed pro Messwert) =====
Für jedes Datenfeld, das dauerhaft gespeichert und später als Diagramm angezeigt werden soll, wird ein eigener **Feed** angelegt:
- Bei **Inputs** neben dem gewünschten Feld (z. B. ''T_C'') auf das Zahnrad-/Stift-Symbol klicken
- Bei „Add feed to log“ bzw. über den Prozess **„Log to feed“** einen neuen Feed erstellen → **„CREATE NEW“**
- Feed-Engine: Wird als **„Fixed Interval Time Series“** angezeigt – das ist nur die ausgeschriebene Bezeichnung für **PHPFina** (Standard, empfohlen), keine andere Engine auswählen
- Name wird automatisch aus SENSOR_ID + Feldname vorgeschlagen, z. B. ''100_T_C'' – so übernehmen (gute, eindeutige Namenskonvention bei vielen Sensoren)
- **Interval unbedingt korrekt setzen** (Standardvorschlag ist oft 10s – abändern!) – abhängig vom Sensortyp:
* Testsensor (BME280, siehe Sensorcode-Seite): **10 Sekunden**
* Klimamessbox (Außenbereich): **300 Sekunden (5 Min.)**
* Raummessbox (Innenbereich): **20 Sekunden**
Auffällig umständlicher Klick-Ablauf zum Abschließen (drei separate
Klicks nötig, sonst bleibt nichts gespeichert):
1. "Add" - übernimmt die Einstellungen in die Prozessliste des Inputs
2. "Save" - speichert die Prozessliste dauerhaft (OHNE diesen Klick
geht die Änderung beim Schließen wieder verloren!)
3. "Close" - schließt den Dialog
Alle drei Klicks sind erforderlich, in genau dieser Reihenfolge.
KRITISCH: Das Interval eines PHPFina-Feeds lässt sich nach der
Erstellung NICHT mehr ändern! Bei einem falsch gesetzten Interval
bleibt nur die Neuanlage des Feeds - alte Daten gehen dabei verloren
bzw. müssten aufwändig migriert werden. Vor dem Speichern also
lieber zweimal prüfen.
Diesen Vorgang für **jedes** relevante Feld wiederholen (beim Testsensor 3 Feeds, bei der Klimamessbox später bis zu 7 Feeds, bei der Raummessbox 5 Feeds).
----
===== Schritt 4: Feeds kontrollieren =====
- Zu **Feeds** wechseln (linke Navigation)
- Dort sollten nun alle drei neu angelegten Feeds des Testsensors auftauchen, mit einem sich regelmäßig aktualisierenden „Last value“
- Für die grafische Kontrolle **nicht** die Feed-ID als direkte URL aufrufen (z. B. ''/graph/11'' funktioniert bei dieser EmonCMS-Version **nicht**) – stattdessen über die linke Seitenleiste den Menüpunkt **„Data viewer“** (Graph-Symbol) öffnen. Dort links den gewünschten Feed (z. B. ''T_C'') per Häkchen aktivieren, rechts erscheint die Kurve
- Zeitraum bei Bedarf über die Felder „Start“/„End“ bzw. den Dropdown (z. B. „1 hour“, „6 hours“) anpassen
Lücken/Aussetzer in der Kurve sind normal, wenn der Sensor
zwischendurch neu geflasht, der Pi neu gestartet oder die
Systemzeit korrigiert wurde - jede Unterbrechung der
Stromversorgung bzw. des Sendevorgangs erzeugt eine Lücke.
Ein durchgehend laufender Produktivsensor zeigt eine
lückenlose Linie.
----
===== Schritt 5 (optional): Dashboard erstellen =====
Für eine übersichtliche Darstellung mehrerer Werte des Testsensors (oder später mehrerer Boxen) gemeinsam:
- Zu **Dashboards** wechseln → **„New Dashboard“**
- Über den Editor „Graph“- oder „Value“-Widgets hinzufügen, jeweils mit dem gewünschten Feed verknüpfen
- Mehrere Widgets lassen sich frei auf der Fläche anordnen (z. B. Temperatur- und Luftdruck-Verlauf des Testsensors nebeneinander)
- Dashboard speichern und ggf. über **„Make public“** auch ohne Login einsehbar machen (z. B. für einen Klassenraum-Bildschirm)
----
===== Stolpersteine =====
* **Input-Feld heißt anders als erwartet:** Die Feldnamen im JSON (beim Testsensor: ''T_C'', ''F_rel'', ''P_hPa''; bei den vollständigen Boxen zusätzlich ''CO2_ppm'', ''PM25'', ''PM10'', ''H_bit'') müssen exakt mit denen im Sketch übereinstimmen – Groß-/Kleinschreibung wird unterschieden. Bei Unsicherheit den Sketch-Quellcode (Funktion ''loop''/HTTP-POST-Body) als Referenz nutzen
* **Feed zeigt "no data" trotz laufendem Testsensor:** Meist wurde der Prozess „Log to feed“ nicht korrekt mit dem Input-Feld verknüpft – unter Inputs → Zahnrad-Symbol → Prozessliste prüfen, ob der Log-to-feed-Eintrag wirklich vorhanden ist
* **Falsches Interval gewählt:** Es gibt keine Fehlermeldung – das System läuft einfach mit schlechterer Datenqualität weiter:
* **Feed-Interval länger als der tatsächliche Sendetakt** des Sensors (z. B. Sensor sendet alle 10 s, Feed steht auf 60 s): EmonCMS speichert pro Zeitschlitz nur den zuletzt eingetroffenen Wert – alle dazwischenliegenden Messungen werden kommentarlos überschrieben, bevor sie je gespeichert wurden, und gehen verloren
* **Feed-Interval kürzer als der tatsächliche Sendetakt** (z. B. Sensor sendet alle 120 s, Feed steht auf 30 s): Für die meisten Zeitschlitze kommt kein neuer Wert an, sie bleiben leer (''null'') – das Diagramm wirkt lückenhaft/gezackt
* In beiden Fällen: keine Fehlermeldung, kein Absturz, aber **nachträglich nicht reparierbar** (Interval-Änderung nur durch Neuanlage des Feeds möglich, siehe Warnhinweis oben). Deshalb: Feed-Interval muss exakt dem ''MESSINTERVALL_MS''/''Schreibpause''-Wert im jeweiligen Sketch entsprechen
* **Ab dem 33. Sensor erscheint kein neuer Input, in der seriellen Ausgabe steht „Reached the maximal allowed number of different NodeIds, limit is 32. Node '138' was ignored.“:** EmonCMS erlaubt standardmäßig nur **32 verschiedene Nodes pro Benutzerkonto** (jede ''SENSOR_ID'' ist ein eigener Node). Der Server antwortet dabei trotzdem mit HTTP 200 – der Fehler steht nur im Antworttext. Die Daten des abgewiesenen Sensors werden verworfen. Das Limit lässt sich auf dem Pi erhöhen:
sudo nano /var/www/emoncms/settings.ini
Im Abschnitt ''[input]'' die Zeile ''max_node_id_limit'' ergänzen bzw. ändern (z. B. auf 100):
[input]
max_node_id_limit = 100
Speichern und den Webserver neu starten: ''sudo systemctl restart apache2''. Bereits eingebundene Sensoren bleiben unverändert, der abgewiesene Sensor erscheint nach der nächsten Sendung unter „Inputs“
* **Neuer oder ausgetauschter ESP mit bereits verwendeter SENSOR_ID: Die ersten Sendungen scheitern mit „code=-1 (connection failed)“, obwohl das WLAN verbunden ist, und nach 1–3 Minuten läuft es von selbst:** Wahrscheinliche Ursache ist ein veralteter Eintrag in der ARP-Tabelle des Pi. Er kennt für die IP-Adresse (192.168.1.SENSOR_ID) noch die MAC-Adresse des früheren Geräts und schickt die Antworten dorthin. Abhilfe per SSH auf dem Pi (IP durch die des betroffenen Sensors ersetzen):
ip neigh show 192.168.1.207
sudo ip neigh flush 192.168.1.207
Der erste Befehl zeigt den gespeicherten Eintrag; steht dort eine andere MAC-Adresse als die des neuen ESP, ist das die Bestätigung. Nach dem ''flush'' den ESP neu starten – Versuch 1 klappt dann sofort. Ohne Eingriff lösen die Wiederholversuche des Sketches das Problem meist von selbst, es entstehen aber Lücken in der Aufzeichnung
* **Zwei Feeds mit identischem Namen:** EmonCMS erlaubt das technisch, führt aber zu Verwirrung bei der späteren Auswertung – eindeutige Namenskonvention (SENSOR_ID + Feldname) von Anfang an einhalten
* **Werte wirken "verzögert":** Bei einer langsam messenden Box (z. B. Klimamessbox mit größerem Intervall) ist das normal – die Grafik aktualisiert sich dann entsprechend seltener. Beim Testsensor (10 Sekunden) ist die Aktualisierung deutlich schneller sichtbar
====== Copyright (C) 2025 Biebl/Sankt-Ansgar-Schule Hamburg ======
"Klimamessstation für Schulen" von Martin Biebl/Sankt-Ansgar-Schule Hamburg,
lizenziert unter CC BY-SA 4.0
(https://creativecommons.org/licenses/by-sa/4.0/)
Diese Programme sind freie Software: Sie können es unter den
Bedingungen der GNU General Public License, wie von der Free
Software Foundation veröffentlicht, weitergeben und/oder
modifizieren, entweder gemäß Version 3 der Lizenz oder (nach
Ihrer Wahl) jeder späteren Version.
Die Veröffentlichung dieser Programme erfolgt in der Hoffnung,
dass es Ihnen von Nutzen sein wird, aber OHNE JEDE GEWÄHRLEISTUNG,
sogar ohne die implizite Gewährleistung der MARKTFÄHIGKEIT oder
EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der
GNU General Public License.
Vollständiger Lizenztext: https://www.gnu.org/licenses/gpl-3.0.de.html