E+H Bodenfeuchte
Der Node fragt für jeden konfigurierten Sensor die aktuellen Messwerte einer Instrumentation aus der Netilion-Cloud von Endress+Hauser ab, ordnet die gewählten Werteschlüssel den Attributen Bodenfeuchte, volumetrischer Wassergehalt und Bodentemperatur zu und gibt je Sensor eine Nachricht mit einer GreenspaceRecord-Entität aus. Er eignet sich für die Bewässerungssteuerung und das Monitoring kommunaler Grünflächen.
- Node-Typ
- eh-bodenfeuchte
- Paket
- @htag/node-red-contrib-hypertegrity-parksandgardens
- Eingänge / Ausgänge
- 1 / 1
- Datenquelle
- Endress+Hauser Netilion API (API-Key und Benutzerkonto erforderlich)
Wofür Sie den Node verwenden
Netilion ist die IIoT-Cloud von Endress+Hauser, in der Messgeräte als sogenannte Instrumentationen geführt werden. Bodenfeuchtesensoren liefern dort mehrere Messwerte unter technischen Schlüsseln, zum Beispiel Feuchte, volumetrischen Wassergehalt (VWC) und Temperatur. Der Node holt diese Werte über die Netilion REST API ab und bringt sie in das Smart Data Model GreenspaceRecord aus dem Bereich Parks and Gardens, sodass sie in einer urbanen Datenplattform mit anderen Umweltdaten zusammengeführt werden können.
Typische Einsatzfälle sind:
- Bewässerungsmanagement für Parks, Beete und Straßenbäume anhand der aktuellen Bodenfeuchte.
- Monitoring von Grünflächen mit Dashboards, die Feuchte und Temperatur je Standort zeigen.
- Übernahme in einen Context Broker als
GreenspaceRecord-Entitäten über den NGSI-LD Builder.
So funktioniert der Node
Auslösen
Eine eingehende Nachricht startet den Abruf. Optional nennt sie abweichende Sensoren.
Anmelden
Bei Basic Auth gehen API-Key und Benutzerdaten mit jeder Anfrage mit; bei OAuth holt der Node ein Token, hält es im Speicher und erneuert es rechtzeitig vor Ablauf.
Werte abrufen
Je Sensor eine GET-Anfrage an /v1/instrumentations/<ID>/values der Netilion API.
Zuordnen und ausgeben
Die konfigurierten Werteschlüssel werden auf soilMoisture, soilMoistureVwc und soilTemperature abgebildet; je Sensor verlässt eine Nachricht den Node.
Ergebnis: Je Sensor eine GreenspaceRecord-Entität mit Messzeitpunkt, Standort und den zugeordneten Messwerten.
Der Node ist triggerbasiert und fragt die Sensoren nacheinander ab. Kombinieren Sie ihn mit einem Inject-Node, dessen Intervall zum Messintervall der Sensoren passt, zum Beispiel alle 15 bis 60 Minuten. Bodenfeuchte ändert sich langsam; häufigere Abrufe liefern keine neuen Werte.
Konfiguration
Der Bearbeitungsdialog hat drei Registerkarten.
Registerkarte „Allgemein“
| Feld | Typ | Standard | Bedeutung |
|---|---|---|---|
| Name | Text | leer | Anzeigename des Nodes im Flow. |
Registerkarte „Sensoren“
Die Liste (sensors) enthält je Sensor einen Eintrag mit folgenden Feldern. Einträge lassen sich hinzufügen, sortieren und entfernen.
| Feld | Typ | Standard | Bedeutung |
|---|---|---|---|
Sensor ID (instrumentationId) | Auswahlliste | leer | ID der Instrumentation in Netilion. Der Aktualisierungsknopf lädt alle Instrumentationen Ihres Kontos (mit Tag und Seriennummer) über die Zugangsdaten der Registerkarte „Authentifizierung“. |
Sensor Name (sensorName) | Text | leer | Anzeigename, der als name in die Entität übernommen wird; ersatzweise die ID. |
Breitengrad (Lat), Längengrad (Lon) (lat, lon) | Zahlen in Dezimalgrad | leer | Standort des Sensors. Nur wenn beide Werte gültig sind, erhält die Entität ein location-Attribut. |
Feuchte-Wert (moistureKey) | Auswahlliste | leer | Schlüssel des Netilion-Werts, der als soilMoisture ausgegeben wird. Sein Zeitstempel bestimmt dateObserved. |
Feuchte VWC (moistureVwcKey) | Auswahlliste | leer | Schlüssel des volumetrischen Wassergehalts, ausgegeben als soilMoistureVwc. |
Temperatur-Wert (temperatureKey) | Auswahlliste | leer | Schlüssel der Bodentemperatur, ausgegeben als soilTemperature. |
| Werte (Knopf) | Button | – | Lädt die verfügbaren Werteschlüssel der gewählten Instrumentation mit ihrem aktuellen Wert, damit Sie die drei Zuordnungen per Auswahlliste treffen können. Beim Wechsel der Sensor ID werden die Werte automatisch geladen. |
Registerkarte „Authentifizierung“
| Feld | Typ | Standard | Bedeutung |
|---|---|---|---|
Authentifizierungsmethode (authMethod) | Auswahl | „Basic Auth (API Key + Benutzer)“ | basic: API-Key, Benutzername und Passwort werden mit jeder Anfrage gesendet. oauth: API-Key und API Secret dienen dazu, mit Benutzername und Passwort ein kurzlebiges OAuth-Token zu holen, das automatisch erneuert wird. |
| API Key | Passwort (Credential) | leer | API-Key Ihrer Netilion-Anwendung; wird als Header Api-Key gesendet. |
| API Secret | Passwort (Credential, nur bei OAuth sichtbar) | leer | Secret der Netilion-Anwendung für die Token-Anfrage. |
| Benutzername | Text (Credential) | leer | Benutzername des Netilion-Kontos. |
| Passwort | Passwort (Credential) | leer | Passwort des Netilion-Kontos. |
Alle vier Zugangsdaten werden verschlüsselt im Credentials-Store gespeichert. Sie dürfen Umgebungsvariablen in der Form ${NAME} enthalten; der Node löst diese zur Laufzeit auf.
Sie benötigen ein Netilion-Benutzerkonto mit Zugriff auf die Instrumentationen sowie eine im Netilion Developer Portal angelegte Anwendung, die Ihnen API-Key und API Secret liefert. Bei Basic Auth genügen API-Key, Benutzername und Passwort; bei OAuth kommt das API Secret hinzu. Das OAuth-Token ist laut Dialoghinweis etwa 11 Minuten gültig und wird 60 Sekunden vor Ablauf erneuert.
Eingang
Jede Nachricht löst den Abruf aus. Ohne besondere Eigenschaften werden die konfigurierten Sensoren abgefragt; drei Varianten erlauben es, die Sensorliste für diese Nachricht zu ersetzen.
| Eigenschaft | Typ | Bedeutung |
|---|---|---|
msg.payload | beliebig | Löst den Abruf der konfigurierten Sensoren aus. |
msg.payload | Array von Objekten mit instrumentationId | Ersetzt die Sensorliste. Jedes Objekt kann zusätzlich sensorName, lat, lon, moistureKey, moistureVwcKey und temperatureKey enthalten. |
msg.sensors | Array von Objekten | Wie oben, falls msg.payload kein solches Array ist. |
msg.instrumentationId | Text oder Zahl | Fragt genau diesen einen Sensor ab; alternativ als instrumentationId in msg.payload. Der Name kommt aus msg.sensorName oder aus sensorName in msg.payload. Ohne Werteschlüssel enthält die Entität in diesem Fall keine Messwerte. |
Die Zugangsdaten stammen immer aus der Konfiguration. Eigenschaften der eingehenden Nachricht werden in die Ausgangsnachrichten übernommen.
Ausgang
Je Sensor sendet der Node eine eigene Nachricht. msg.payload ist ein Array mit genau einer GreenspaceRecord-Entität.
[
{
"id": "urn:ngsi-ld:GreenspaceRecord:123456",
"type": "GreenspaceRecord",
"name": "Stadtpark Beet Nord",
"dateObserved": "2026-10-01T06:30:00.000Z",
"location": {"value": {"type": "Point", "coordinates": [7.7689, 49.4447]}},
"soilMoisture": 31.4,
"soilMoistureVwc": 27.8,
"soilTemperature": 14.2
}
]
| Feld | Bedeutung |
|---|---|
id | urn:ngsi-ld:GreenspaceRecord: gefolgt von der Instrumentations-ID. |
type | Immer GreenspaceRecord. |
name | Konfigurierter Sensorname, ersatzweise die ID. |
dateObserved | Zeitstempel des Feuchte-Werts aus Netilion; ohne Feuchte-Schlüssel der des VWC-Werts; sonst der Abrufzeitpunkt. |
location | GeoJSON-Punkt [Länge, Breite], nur bei konfigurierten Koordinaten. |
soilMoisture, soilMoistureVwc, soilTemperature | Zahlenwerte der zugeordneten Netilion-Schlüssel. Nicht zugeordnete oder im Abruf fehlende Werte entfallen. Einheiten werden nicht übernommen (siehe Hinweise). |
Beispiel-Flow
Das Paket bringt einen Beispiel-Flow mit. Sie importieren ihn in Node-RED über Menü → Importieren → Beispiele → @htag/node-red-contrib-hypertegrity-parksandgardens → eh-bodenfeuchte. Alternativ laden Sie die Datei eh-bodenfeuchte.json herunter und importieren sie über Menü → Importieren. Sensoren und Zugangsdaten tragen Sie nach dem Import ein.
Inject
Ein Inject-Node („Go!“) löst den Abruf manuell oder in einem festen Intervall aus.
E+H Bodenfeuchte
Der Node fragt die konfigurierten Sensoren über die Netilion API ab und gibt je Sensor eine GreenspaceRecord-Entität aus.
Debug
Ein Debug-Node zeigt die Entitäten in der Seitenleiste an.
Beispiel-Flow als JSON anzeigen
[
{"id": "tab1", "type": "tab", "label": "E+H Bodenfeuchte", "disabled": false, "info": ""},
{"id": "inject1", "type": "inject", "z": "tab1", "name": "Go!", "props": [{"p": "payload"}], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 140, "y": 120, "wires": [["eh1"]]},
{"id": "eh1", "type": "eh-bodenfeuchte", "z": "tab1", "name": "", "sensors": [], "authMethod": "basic", "x": 370, "y": 120, "wires": [["debug1"]]},
{"id": "debug1", "type": "debug", "z": "tab1", "name": "soil moisture data", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "x": 660, "y": 120, "wires": []}
]
Status und Fehler
| Anzeige | Bedeutung |
|---|---|
| Blauer Punkt „fetching 3 sensors...“ | Der Abruf der genannten Anzahl Sensoren läuft. |
| Grüner Punkt „3 sensor(s) ok“ | Alle Sensoren wurden erfolgreich abgerufen. |
| Gelber Punkt „2 ok, 1 err“ | Einzelne Sensoren sind fehlgeschlagen; für die erfolgreichen wurden Nachrichten gesendet. |
| Roter Punkt „1 error(s)“ | Alle Sensoren sind fehlgeschlagen. |
| Roter Ring „no sensors“ | Weder in der Konfiguration noch in der Nachricht sind Sensoren angegeben. Fehlermeldung: „No sensors configured or provided in message“. |
| Fehler „Failed to fetch sensor Stadtpark Beet Nord (123456): …“ | Die Anfrage für diesen Sensor ist fehlgeschlagen (HTTP-Status, Timeout nach 15 Sekunden) oder die OAuth-Anmeldung war nicht möglich („OAuth token request failed (HTTP 401): …“). |
| Warnung beim Start „No API key configured. …“, „OAuth mode selected but no API Secret configured.“, „No sensors configured.“ | Unvollständige Konfiguration beim Deploy. |
| Warnung „OAuth token refresh failed, performing full re-authentication: …“ | Das Token konnte nicht erneuert werden; der Node meldet sich mit Benutzername und Passwort neu an. |
Fehler werden über node.error gemeldet und können mit einem Catch-Node abgefangen werden.
Hinweise
- Einheiten: Der Node übernimmt nur die Zahlenwerte; die Einheit des jeweiligen Netilion-Schlüssels wird nicht ausgegeben. Prüfen Sie in Netilion, in welcher Einheit die Werte vorliegen (zum Beispiel Vol.-% für den volumetrischen Wassergehalt und °C für die Temperatur), und dokumentieren Sie sie bei der Weiterverarbeitung.
- Datenmodell: Das Smart Data Model
GreenspaceRecorddefiniert unter anderemsoilMoistureVwc,soilMoistureEc,soilTemperature,dateObservedundlocation. Der Node gibt den Feuchte-Wert unter dem NamensoilMoistureaus; eine Umbenennung insoilMoistureEcoder ein anderes Attribut nehmen Sie bei Bedarf im NGSI-LD Builder vor. - Rate Limits: Jeder Sensor erzeugt eine Anfrage je Abruf. Netilion begrenzt die Anzahl der API-Aufrufe je Anwendung nach dem gebuchten Tarif; wählen Sie das Abrufintervall entsprechend. Anfragen haben ein Timeout von 15 Sekunden.
- Editor-Zugriffe: Die Knöpfe zum Laden der Instrumentationen und Werte rufen die Netilion API vom Node-RED-Server aus auf. Neu eingetippte Zugangsdaten werden dabei übertragen; andernfalls nutzt der Editor die gespeicherten Credentials des Nodes. Der Server protokolliert dabei eine Diagnosezeile ohne Geheimnisse.
- Personenbezogene Daten: Benutzername und Passwort gehören zu einem persönlichen Netilion-Konto; nutzen Sie nach Möglichkeit ein technisches Konto. Die Messdaten selbst haben keinen Personenbezug; Sensorstandorte sind Standorte kommunaler Grünflächen.