Ich hatte ja vor kurzem mit Lorawan begonnen, Wetterstationen gebaut die per Solar betrieben werden. Jetzt wollte ich die Daten noch an openSenseMap übertragen. Dies geht leider gar nicht direkt, bzw. ich habe keine Lösung dazu gefunden.
Da ich seit kurzem auch Node Red im Einsatz habe und ich damit schon die Daten von meinem GPS-Tracker an meine lokale Traccar-Installation (dazu kommt auch noch nen Beitrag) weiterleite habe, dachte ich mir das ich für openSenseMap auch eine Lösung finde.
Hier mal meine umgesetzte Lösung:
Zuallererst muss man sich bei openSenseMap registrieren und anmelden.
Als nächstes registriert dort eine neue senseBox, setzt div. Parameter wie Aufstellungsort, Standort etc.

Als Hardware bitte „Manuelle Konfiguration“ auswählen.

Als nächstes fügen wir die Sensoren hinzu:

Danach kann die Konfiguration abgeschlossen werden. Wir erhalten eine Übersicht der senseBox mit den ID´s. Diese benötigen wir später noch. Eine Zusammenfassung kommt aber auch noch per Mail.

Weiter gehts zu Node Red
Im Node Red habe ich einen neuen Flow angelegt. Dieser ist am Ende auch zum Download. Dann kann man sich den selbst importieren und anpassen.

Die Funktionsweise ist wie folgt:
- Per MQTT die Daten von TTS abholen
- Als nächstes konvertiere ich den payload JSON-String in ein JS-Objekt
- Daraus zieh ich mir dann den Wert (Value)
- Als nächstes kommt ein change, ich füge einen header (appliction/json) hinzu, füge die URL von opensensemap hinzu und zum Schluss die methode POST
- Zum Schluss kommt dann der http-request
Daten per MQTT von TTS abholen
In der TTS-Console unter den Applications kann man ein MQTT-Passwort (Api-Key) generieren:

Es ist einmal der MQTT-Server angegeben ( eu1.cloud.thethings.network:1883 ). Die benötigen wir im Node-Red
Genauso auch den Username der z.B. [email protected] lautet.
Als nächstes noch das Passwort über Generate new API key generieren. Nach dem generies des Passworts diesen bitte gleich abspeichern.
Jetzt kann man im Node-Red ein mqtt in anlegen.

Dort dann den Server hinterlegen:

Unter Sicherheit muss noch der zuvor notierte Username/Passwort hinterlegt werden

In den Eigenschaften von mqtt-in muss dann der Topic abonniert werden, dies schaut ungefähr so aus.
v3/[email protected]/devices/eui-70b3xxxxd0043e18/up

Ich springe jetzt weiter zum Payload. Die anderen Punkte bitte im angehängte Flow anschauen.
Der Payload Temperatur schaut wie folgt aus. Wir holen aus dem Payload die Temperatur
{ "value": {{payload.uplink_message.decoded_payload.temperature}} }

Jetzt wirds wieder interessant. Als nächstes müssen wir die URL anpassen um es an opensensemap hochzuladen.
Dort geben wir die sensebox-id und danach die sensor-id ein. Die Daten haben wir ganz am Anfang generiert.
http://www.opensensemap.org:8000/boxes/<sensebox-id>/<sensor-id>
http://www.opensensemap.org:8000/boxes/616bexxxxxxx01c0a8586/616bexxxxxx01c0a8589

Der Rest wie Header und method muss auch angelegt werden wie im Screenshot zu sehen.
Zum Schluss kommt der http-request an opensensemap.
Wenn alle passt sind die Daten in opensensemap zu sehen!

Der Flow ist hier zu finden: https://flows.nodered.org/flow/80e32a38756b2b319c76ab93788b83e6 oder auf github: https://gist.github.com/zfrank2601/80e32a38756b2b319c76ab93788b83e6
Falls noch Fragen sind oder etwas nicht funktioniert bemühe ich mich diese zeitnah zu beantworten.
Zum MQTT kommt demnächst noch was. Wenn man einen einen Broker laufen hat, kann man auch ein MQTT-Bridge einrichten und vor dort zentral die Daten abholen. Hat den Vorteil das ich nur einen MQTT-Server im Node-Red anlegen muss. Dazu aber demnächst mehr wie auch viele andere Themen die ich noch in der Pipeline hab.
Frank, it works!
Thanks mate.
Frank, It works! This solution was exactly what I was looking for.
I see that nodered has an error:
[http request:zu opensensemap] Warning: msg properties can no longer override set node properties.
See bit.ly/nr-override-msg-props
Do you also know how to solve this?
Thanks mate.
It seems that setting the Return to “ a UTF-8 string “ in the HTTP Request Node cleared the error.
Cheers!