TTN Logo

Thethingsnetwork und MQTT – Abfrage der Sensordaten mit Node-Red

Im Netz gibt es immer wieder zu lesen, dass das TheThingsNetwork nicht offen sei und schlecht dokumentiert. An einem Beispiel möchte ich zeigen, dass die Dokumentation sehr wohl vorhanden ist und es möglich ist mit entsprechenden Parametern via “mosquitto_sub”, einem Linux Command, die Daten direkt auszulesen. Weiterhin zeige ich wie man diese Daten in Node-Red überführen kann um dann eine weitere Verarbeitung, wie z.B. Werte in einem Dashboard visuell anzuzeigen.

$ mosquitto_sub -h eu.thethings.network -t '+/devices/+/up' -u 'joachimlora' -P 'ttn-account-v2.XXXXXXXXXXXXXXXXX' -v
TTN Console
TTN Console
 Hier sind die Zugangsdaten für die Anmeldung von Benutzername und Passwort zu finden. Diese einfach in den mosquitto_sub Befehl übernehmen.
TTN - MQTT Abfrage
TTN – MQTT Abfrage
Bei erfolgreicher Anmeldung, sind wie oben in der SSH-Konsole angezeigt, folgende Daten eines Lora-Node Sensor zu sehen. Diese können nun an -> Node-Red übertragen werden.
[{"id":"cb7bd77f.ea40c","type":"json","z":"700a4b4c.aa1074","name":"","property":"payload","action":"","pretty":false,"x":470,"y":600,"wires":[["2495d469.badc3c"]]},{"id":"53343cad.c5eb5c","type":"mqtt in","z":"700a4b4c.aa1074","name":"","topic":"+/devices/+/up","qos":"2","broker":"b0bf9659.e02f3","x":290,"y":600,"wires":[["6dd58fc6.57cd48","cb7bd77f.ea40c"]]},{"id":"2495d469.badc3c","type":"debug","z":"700a4b4c.aa1074","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":710,"y":600,"wires":[]},{"id":"6dd58fc6.57cd48","type":"json","z":"700a4b4c.aa1074","name":"","property":"payload","action":"","pretty":false,"x":470,"y":680,"wires":[["3c5fb1a3.96a64e","3931265c.c18c2a","d437e2ab.43d798","ea757df4.7c7fb","3933930a.839d14"]]},{"id":"3c5fb1a3.96a64e","type":"function","z":"700a4b4c.aa1074","name":"Temperature","func":"// outputs: 2\nmsg.payload = msg.payload.payload_fields.temperature_1\nreturn msg;","outputs":1,"noerr":0,"x":650,"y":680,"wires":[["d7dec79b.306ee"]]},{"id":"3931265c.c18c2a","type":"function","z":"700a4b4c.aa1074","name":"Pressure","func":"// outputs: 2\nmsg.payload = msg.payload.payload_fields.barometric_pressure_3\nreturn msg;","outputs":1,"noerr":0,"x":640,"y":720,"wires":[["d7dec79b.306ee"]]},{"id":"d437e2ab.43d798","type":"function","z":"700a4b4c.aa1074","name":"Device ID","func":"// outputs: 2\nmsg.payload = msg.payload.dev_id\nreturn msg;","outputs":1,"noerr":0,"x":640,"y":640,"wires":[["d7dec79b.306ee"]]},{"id":"ea757df4.7c7fb","type":"function","z":"700a4b4c.aa1074","name":"RSSI","func":"// outputs: 2\nmsg.payload = msg.payload.metadata.gateways[0].rssi\nreturn msg;","outputs":1,"noerr":0,"x":630,"y":760,"wires":[["d7dec79b.306ee"]]},{"id":"3933930a.839d14","type":"function","z":"700a4b4c.aa1074","name":"SNR","func":"// outputs: 2\nmsg.payload = msg.payload.metadata.gateways[0].snr\nreturn msg;","outputs":1,"noerr":0,"x":630,"y":800,"wires":[["d7dec79b.306ee"]]},{"id":"d7dec79b.306ee","type":"debug","z":"700a4b4c.aa1074","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":830,"y":680,"wires":[]},{"id":"b0bf9659.e02f3","type":"mqtt-broker","z":"","name":"TTN","broker":"eu.thethings.network","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""}]

Mit diesem Flow , legen wir die Anbindung an das TheThingsNetwork per MQTT zu Node-Red fest und bei erfolgreichem Copy-Paste, sollte der Flow so aussehen wie unten angezeigt.

TTN – MQTT Nodered
 Mit diesem Flow, bauen uns wir ein Dashboard auf, welches die Werte visuell anzeigen lässt.
[{"id":"ecbaa805.de6f88","type":"mqtt in","z":"eb731a6c.fd4f2","name":"Temperature","topic":"ttn/temperature","qos":"2","broker":"c979da80.ef2bb","x":208,"y":185,"wires":[["45e7d0dc.ede19"]]},{"id":"45e7d0dc.ede19","type":"ui_gauge","z":"eb731a6c.fd4f2","name":"","group":"c6fe4cc5.6c0b68","order":2,"width":0,"height":0,"gtype":"gage","title":"Temperature","label":"C","format":"{{value}}","min":"-25","max":"45","colors":["#00b500","#e6e600","#ca3838"],"seg1":"28","seg2":"30","x":428,"y":185,"wires":[]},{"id":"c0980dc4.191188","type":"mqtt in","z":"eb731a6c.fd4f2","name":"Pressure","topic":"ttn/pressure","qos":"2","broker":"c979da80.ef2bb","x":200,"y":240,"wires":[["2cd82899.a8ec2"]]},{"id":"2cd82899.a8ec2","type":"ui_gauge","z":"eb731a6c.fd4f2","name":"","group":"c6fe4cc5.6c0b68","order":3,"width":0,"height":0,"gtype":"gage","title":"Pressure","label":"hPa","format":"{{value}}","min":"900","max":"1000","colors":["#00b500","#e6e600","#ca3838"],"seg1":"970","seg2":"971","x":430,"y":240,"wires":[]},{"id":"31a98b5d.275664","type":"ui_text","z":"eb731a6c.fd4f2","group":"c6fe4cc5.6c0b68","order":1,"width":0,"height":0,"name":"","label":"TTN Lora Sensor Munich 1","format":"{{msg.payload}}","layout":"row-center","x":200,"y":120,"wires":[]},{"id":"b0660f9a.a12258","type":"ui_text","z":"eb731a6c.fd4f2","group":"7b216e54.fde1e","order":1,"width":0,"height":0,"name":"","label":"TTN Lora Sensor Munich 1","format":"{{msg.payload}}","layout":"col-center","x":200,"y":80,"wires":[]},{"id":"5001ac6c.22841c","type":"mqtt in","z":"eb731a6c.fd4f2","name":"RSSI","topic":"ttn/rssi","qos":"2","broker":"c979da80.ef2bb","x":184,"y":305,"wires":[["584c873d.5919b8","9aee160a.685c9"]]},{"id":"584c873d.5919b8","type":"ui_gauge","z":"eb731a6c.fd4f2","name":"","group":"7b216e54.fde1e","order":2,"width":0,"height":0,"gtype":"gage","title":"RSSI","label":"db","format":"{{value}}","min":"-120","max":10,"colors":["#ff0000","#e6e600","#408000"],"seg1":"-61","seg2":"-60","x":414,"y":305,"wires":[]},{"id":"9aee160a.685c9","type":"ui_chart","z":"eb731a6c.fd4f2","name":"","group":"ad1be2d3.97b188","order":3,"width":0,"height":0,"label":"RSSI / db","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"x":420,"y":340,"wires":[[],[]]},{"id":"2560068f.090982","type":"mqtt in","z":"eb731a6c.fd4f2","name":"SNR","topic":"ttn/snr","qos":"2","broker":"c979da80.ef2bb","x":190,"y":400,"wires":[["a7d9b69c.06b66","11b564a1.e634c3"]]},{"id":"a7d9b69c.06b66","type":"ui_gauge","z":"eb731a6c.fd4f2","name":"","group":"7b216e54.fde1e","order":3,"width":0,"height":0,"gtype":"gage","title":"SNR","label":"db","format":"{{value}}","min":"0","max":"20","colors":["#00b500","#e6e600","#ca3838"],"seg1":"15","seg2":"16","x":410,"y":400,"wires":[]},{"id":"11b564a1.e634c3","type":"ui_chart","z":"eb731a6c.fd4f2","name":"","group":"ad1be2d3.97b188","order":2,"width":0,"height":0,"label":"SNR / db","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"x":420,"y":440,"wires":[[],[]]},{"id":"c979da80.ef2bb","type":"mqtt-broker","z":"","name":"unixweb","broker":"mqtt.unixweb.de","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""},{"id":"c6fe4cc5.6c0b68","type":"ui_group","z":"","name":"Values","tab":"7ca694fc.adacf4","disp":true,"width":"6","collapse":false},{"id":"7b216e54.fde1e","type":"ui_group","z":"","name":"Signal","tab":"7ca694fc.adacf4","order":2,"disp":true,"width":"6","collapse":false},{"id":"ad1be2d3.97b188","type":"ui_group","z":"","name":"Charts","tab":"7ca694fc.adacf4","order":3,"disp":true,"width":"6","collapse":false},{"id":"7ca694fc.adacf4","type":"ui_tab","z":"","name":"Home","icon":"dashboard"}]

So sieht dann bei erfolgreichem Copy-Paste in Node-Red der Flow aus:

TTN MQTT Nodered Dashboard
TTN MQTT Nodered Dashboard

Wenn alles richtig eingestellt und konfiguriert ist, sollte das Dashboard so aussehen. Übrigens das Dashboard erreicht man am Raspberry Pi (sofern node-red-dashboard installiert) über http:://<Raspberry-IP-Adresse>:/ui

Falls es Fragen gibt, einfach hier einen Kommentar hinterlassen.

Viel Spaß beim basteln und programmieren, wünscht Joachim

19 Kommentare

    1. Hallo Thomas

      Danke für Deinen Kommentar und den Link. Ist ja krass , wusste nicht dass das mit den Reifensensoren so geht.

      Grüße , Joachim

  1. Hallo Joachim, bin von Guido Burger sowie über Twitter über Deine tollen Arbeiten informiert worden. Respekt was du da so alles aus der Tüte zauberst. Aktuell beschäftige ich mich nun auch mit TTN und habe auch bereits ein Single Channel Gateway plus 3 Nodes zum Laufen gebracht. Habe auch die MQTT Anbindung realisiert die du beschrieben hast. Im Moment betreibe ich noch ein nodejs script welches mir die Daten in meine SmartHome Applikation schaufelt. Was ich nun auch gesehen habe – und Link bereits im Handy abgespeichert – ist Deine Node-Red Web App online. Hast du Node-Red auf Deinem Webserver laufen oder wird das nur gespiegelt ? Kannst du mir da einen Tip geben – habe im Web etwas recherchiert – aber nichts gefunden was für mich passt bzw. mich rockt.

    1. Hallo Achim

      Danke für Deine nette Nachricht. Der Node-Red Server ist kein Spiegel sondern Echtzeit. Wenn die Daten mal in MQTT drin sind, kannst Du Dashboard soviel Du willst anbinden via Node-Red. Die Daten laufen in meine Smarthome Lösung hinein und ebenfalls in diverse Demo Dashboard und andere Raspberry / Beaglebone Nodes.

      Zum installieren von Node-Red kannst diese Anleitung nehmen : https://www.digitalocean.com/community/tutorials/how-to-connect-your-internet-of-things-with-node-red-on-ubuntu-16-04
      Die klappt dann auch sehr gut und was Du noch brauchst, ist einen Webserver vorne dran. Eine Anleitung gibt es hier: https://openenergymonitor.org/forum-archive/node/12489.html
      So ist mein Node-Red Server nicht direkt über Port 1880 erreichbar. Du musst dann auch die settings.js anpassen und Deinen ganzen Node mit einem Benutzername und Passwort absichern, wie auch in meinem Fall.

      Falls es noch weitere Fragen gibt, einfach hier kommentieren, ich helfe gerne.

      Beste Grüße , Joachim

  2. Hallo Joachim,

    ich bin auf der Suche nach Doku und Tutorials zu TTN und Lora auf deinen Blog gestoßen.
    Wir (Kommunaler Versorger) sind gerade in einer Testphase, da wir Lora groß einsetzen wollen.
    Aktuell bin ich da aber noch ziemlich am Anfang: Wir haben ein Loramod-R4 Modul, welches ich nach einigen Schwierigkeiten auch am TTN Stack, mit dem ich nicht mehr so klar komme[1], einrichten konnte.
    Node-RED habe ich mir jetzt erfolgreich eingerichtet und ich habe auch die Werte im MQTt Broker.
    Jetzt möchte ich die aber gerne in eine Postgres schreiben. Hast du eine Idee, wie das ideal geht?
    Den payload wieder dekodieren ist dann ja noch mal eine ganze andere Geschichte 🙂

    Gruß

    René

    1 Der verhält sich immer langsamer…und wirft Fehler 🙁

    1. Hallo René

      nun hast Du Dir schon mal dieses Beispiel angesehen :
      https://github.com/BruceFletcher/node-red-contrib-postgres-multi

      Wenn Du die Werte schon hast kannst die einfach übergeben an Postgres.

      Was meinst mit langsam und TTN ?
      Wenn ihr Versorger seid dann brauchst Du eher eine eigene TTN Infrastruktur. Das derzeitige Backend ist nicht immer stabil und hat oftmals Ausfälle. Was aber derzeit kein Problem mehr darstellt, da alles OpenSource und Public in Github verfügbar.

      Grüße , Joachim

  3. Hallo Joachim, ich habe bei mir auf den Raspi Openhab installiert doch darum geht es mir derzeit nicht in meinem Problem. Es geht mir darum, ob man mehrere ESP8266 die ich in verschidenen Räumen einsetzen will, in das gleiche Topic ( z.B. /log/daten) schreiben lassen kann. Um dann mit mosquitto auf dem Raspi auf diesem Topic lauscht. Damit man die Daten die aus den verschiedenen ESP’s kommen in eine Json- Datei schreiben kann. Die ich dann mit einem Python Programm parsen kann. Um diese dann in Openhab auswerten bzw. anzeigen möchte. Hat das schon jemand gemacht ?? Die ESP’s kann ich mit mosuitto bereits abfragen, ich habe nur noch keinen richtigen Plan wie ich alle zusammen unter einen Hut bringe. Alle ESP’s habe ich so programmiert, das per Http Anfrage die Daten von Raumtemperatur und Luftfeuchtigkeit ( mit DHT22 ) im Json-Format ausgegeben werden. Da aber das Dashboard von Openhab kein Json Code automatisch umsetzten kann wie manche Browser es jetzt können muss ich diesen umweg gehen.
    Aber vor allem deshalb weil ich die Daten auch weiterverarbeiten will.

    Viele Grüße aus dem Erzgebirge !
    Rene’ Weißflog

    1. Hallo Rene

      danke für Deine Nachricht. Klar kannst Du mehr als einen Sensor in ein Topic schreiben. Bedenke nur dass im JSON String dann aber eine ESP-ID drin stehen muss, da man sonst nicht weiß welcher Sensor die Daten gesendet hat. Also z.B. Küche udn Wohnzimmer hat jetzt hintereinander Temperaturwerte an /esp8266/temp geschickt, kannst Du hinterher nicht mehr erkennen welcher Sensor aus welchen Raum die dazugehörigen Temperaturwerte gesendet hat. Es sei, Du hast eine ID im JSON String dann kannst denn ja mit msg.payload.room wieder selektiv rauslesen und dem Raum zuordnen.
      Was auch geht mit MQTT ist /esp8266/room/kueche und /esp8266/room/wohnzimmer . Dh. Du abonnierst das Topic /esp8266/room/* und holst Dir den Wert aus den vollen Topic Namen raus und ordnest es dem dazugehörigen Raum wieder zu.

      Wünsche Dir viel Erfolg bei deinem spannenden Projekt.

      Grüße , Joachim

  4. Hallo Joachim,

    danke für Deine tolle Arbeit.
    Ich habe das ganze soweit nachvollzogen, allerdings kann ich ich die Daten, die ich empfange nicht so recht deuten:
    :~$ mosquitto_sub -h eu.thethings.network -t ‘+/devices/+/up’ -u ‘xxxxxxxx’ -P ‘ttn-account-v2.sxxxxxxxxxxx’ -v

    testlorahxx/devices/testxxx/up {“app_id”:”tesxxx”,”dev_id”:”xxx”,”hardware_serial”:”00xxxF”,”port”:1,”counter”:4,”payload_raw”:”AWcAuw==”,”metadata”:{“time”:”2020-03-30T20:30:44.946487794Z”,”frequency”:868.5,”modulation”:”LORA”,”data_rate”:”SF7BW125″,”airtime”:51456000,”coding_rate”:”4/5″,”gateways”:[{“gtw_id”:”eui-a840411dbd784150″,”timestamp”:1548933131,”time”:”2020-03-30T20:30:44.918383Z”,”channel”:2,”rssi”:-72,”snr”:6.8,”rf_chain”:0}]}}

    Am interesantesten sollte ja die Payload sein, nur die scheint verschlüsselt (oder raw) zu sein?
    Kannst Du mir einen Tip geben, wie man die lesbar macht?

    Danke und Gruß

    Kristian

  5. Hallo Joachim ,

    mit großer Interesse habe ich deinen Artikel über TTN /MQTT/NODE-RED gelesen. Ich habe nicht ganz nachvollziehen können, wir der mosquitto_sub Befehl funktioniert. Wo ist da Mosquitto als Broker installiert. Ein MQTT Broker ist doch Voraussetzung , dass dann die Daten weiter zu Node Red gelangen.

    1. Hallo Thomas

      der Mosquitto Broker ist nichts anderes als ein Server der MQTT-Nachrichten annimmt und diese auch wieder weiterleitet. In diesem Fall ist dieser bei TheThingsNetwork am laufen. Mit NodeRED holst Du nur mit dem Subscripe Befehl Deine Daten für deine Sensoren aus dem MQTT-Broker bei TTN.
      Dh. du benötigst nur den Client , der bei NodeRED schon vorinstalliert ist, und holst Deine Daten bei TTN ab. Mehr ist dazu nicht nötig.
      Hoffe Dir damit geholfen zu haben.

      Grüße Joachim

      1. Hallo Joachim ,
        danke für Deine schnelle Antwort. Ich habe dein Beispiel nachgebaut und habe die Datenj von meinem Dragino im Gewächshaus auch per ssh Konsole mit dem Subscribe erhalten.
        Damit ich diese Daten per ssh erhalte habe ich auf dem Raspberry , wo auch IOBroker mit Node Red läuft den MQTT Broker mosquitto installiert.
        Da kommen die Daten auch per JSON an.
        Danach habe ich exakt die Beispiele in Node Red importiert. Node Red zeigt an Verbindung wird hergestellt, da kommt dann aber nichts mehr.
        Irgendwo habe ich noch einen Fehler.

        Danke

        1. Hallo Thomas

          dann machst Du nochwas falsch in NodeRED.
          Die Verbindung sollte dann bei richtiger Konfiguration grün werden.
          Hast Du den MQTT-Node konfiguriert?
          Der steht in meinem Beispiel auf mqtt.unixweb.de der geht natürlich nicht.
          Es muss dort der TTN MQTT Broker eingetragen werden. Bei Sicherheit musst den Key eintragen sonst
          funktioniert es nicht.

          Grüße Joachim

          1. Hallo Joachim,

            wenn ich direkt von meinem Rechner auf die Adresse eu.thethings.network gehe bekomme ich diese Fehlermeldung

            Diese Seite funktioniert im Moment nicht.eu.thethings.network hat keine Daten gesendet.
            ERR_EMPTY_RESPONSE.
            Daher auch keine Verbindung

            Muss mal sehen, an was das liegen könnte.

            Danke

            Thomas

          2. Hallo Thomas

            Du kannst den Dienst nicht mit dem Browser aufrufen. Dass geht ausschließlich mit
            mosquitto_sub -h eu.thethings.network -t ‘+/devices/+/up’ -u ‘Dein-App’ -P ‘ttn-account-v2.XXXXXXXXXXXXXXXXX’ -v.
            Du hast schon unter https://console.thethingsnetwork.org/ einen Account und eine App angelegt oder?
            Was hast Du da für Sensoren, wie sind die verbunden, mit WLAN, Lora, ?

            Grüße Joachim

  6. Hallo Joachim,
    das ergibt ein Ping.

    C:\Users\admin>ping eu.thethings.network

    Ping wird ausgeführt für eu.thethings.network [52.169.76.255] mit 32 Bytes Daten:
    Zeitüberschreitung der Anforderung.
    Zeitüberschreitung der Anforderung.
    Zeitüberschreitung der Anforderung.
    Zeitüberschreitung der Anforderung.

    Ping-Statistik für 52.169.76.255:
    Pakete: Gesendet = 4, Empfangen = 0, Verloren = 4
    (100% Verlust),

    Danke Thomas

    1. Hallo Joachim,

      habe verstanden, das dies mit einem Browser nicht möglich ist. Prüfe jetzt noch einmal meine Angaben bei Node Red.
      Ich verwende LORAWAN Dragino Gateway und den Dragino LORA Sensor LHT65 für Temperatur und Luftfeuchte. Ich habe die Daten bei TTN und mydevices schon aktuell, wollte jetzt aber das Dashboard mit Node -Red gestalten.
      Danke

      Thomas

      1. Hallo Joachim,

        vielen Dank , jetzt funktioniert mein Sensor. Ich habe zuerst dein Beispiel probiert, das ging.
        Danach habe ich noch einmal in Node Red den Flow neu gemacht, dann hat er funktioniert.
        Danke vielmals

        Thomas

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.