LORAWAN / The Things Network TTN

Hallo,
ich habe mir mal (aus Raspberry und IMST IC880a) einen LoRa WAN Gateway gebaut und an The Things Network TTN angemeldet (siehe http://www.thethingsnetwork.org/, zur Netzabdeckung http://ttnmapper.org/). Ein paar ESP32 basierende Nodes funktionieren auch schon, jetzt wäre eine Anbindung an Symcon natürlich schön.

TTN erlaubt für die Backend-Kommunikation verschiedene Protokolle, natürlich MQTT und auch HTTP Requests. Leider ist es mir aber nicht gelungen, weder das eine noch das andere in Symcon zu implementieren. Mit @Thomas68 MQTT Client Modul bekomme ich nur Nachrichtenfragmente, bei Nutzung von WebHooks fehlt das JSON Objekt im GET oder POST. Mit Werkzeugen wie mosquitto_sub oder beim Debug des TTN HTTP Requests mit z. B. RequestBin kommen alle Daten. Hat hier jemand schon Erfahrungen, die er teilen kann?

Ich habe Lorawan auch schon seit langem im Auge :slight_smile:
Ich weiß nicht ob ich hier Link zu einem gateway bekomme und hab ein eigenes Gateway bis jetzt noch gescheut.

Ich denke ich werde mich in Zukunft etwas damit beschäftigen und würde dir wenn du magst gerne helfen :wink:
Da HTTP und Webhooks von Symcon nativ Unterstützt werden würde ich die Umsetzung damit machen.

Danke für das Angebot. Ich bin zum Glück auch schon einen Schritt weiter - die Daten beim HTTP Interface von TTN landen nicht in der Symcon Variable $_POST, sondern haben ich bei IPS_LogMessage(„WebHook RAW“, file_get_contents(„php://input“)); gefunden. Ergebnis:

27.01.2019 21:19:42 | WebHook RAW | 
{"app_id":"dheiss-esp32","dev_id":"esp32-02","hardware_serial":"0000000000000001","port":1,"counter":10,"payload_raw":"SGVsbG8sIHdvcmxkIQ==","metadata":{"time":"2019-01-27T20:19:41.628626339Z","frequency":868.1,"modulation":"LORA","data_rate":"SF7BW125","coding_rate":"4/5","gateways":[{"gtw_id":"eui-b827ebfffefxxxxx","timestamp":2786096187,"time":"2019-01-27T20:19:41.601041Z","channel":0,"rssi":-89,"snr":10,"rf_chain":1,"latitude":48.12321,"longitude":11.57606,"altitude":517}]},"downlink_url":"https://integrations.thethingsnetwork.org/ttn-eu/api/v2/down/dheiss-esp32/symcon_webhook?key=ttn-account-v2.***********"}

Payload_Raw ist die Base64 codierte „Hello, world!“ Botschaft meines Nodes. MQTT wäre mir zwar insgesamt lieber gewesen (…wird ja zundehmend zum IoT Standardprotokoll), aber Symcon ist hier hinten dran.

Übrigens: mit einem ESP8266 und einem HopeRF Modul kann man einen sehr preisgünstigen (1-Kanal) LoRa WAN Gateway bauen, Details GitHub - hallard/WeMos-Lora (inkl. Link zum Platinen bestellen) und #134 15$ LoRa Gateway - YouTube. Mit diesen Aufsteckplatinen für den Wemos D1 mini pro habe ich mir meine Nodes gebaut.

Ich habe jetzt erst mal in ein richtiges Gateway investiert, welches Alle Kanäle und SF unterstützt :smiley:
Ein Single-Channel Gateway (oder mehrere) werde ich dennoch bauen müssen, da ich es mit meinem Gateway nicht schaffe den kompletten Ortsbereich abzudecken :rolleyes:

MQTT hällt mittlerweiele ja Einzug in IPS. Allerdings beinhaltet IPS ja den Broker. Den müsste man da nach außen frei geben. Auch nicht besser als der Webhook.

Darauf muss man erst mal kommen. Danke fürs rausfinden :wink:

Ich bin momentan am überlegen die Funktionalität in ein Modul zu packen.
Eine IO-Instanz die die Autorisierung prüft und die Daten an die Clients weiter gibt.

Der (einfachste) Client reagiert auf seine Device-ID und schreibt zunächst nur den Inhalt in eine String-Variable.
gibt es weitere Funktionen die so ein Client erfüllen sollte?

Ich habe nun ein Modul gebaut. Welches die Nachrichten der HTTP-Integration entgegen nimmt.

Zu finden ist das Modul im neuen Module Strore z.Z. Beta (ab 5.1) sowie unter Github:
GitHub - timo-u/Symcon_TheThingsNetwork

Es gibt zwei Gerätetypen.

TTN Device
Der Payload der eingehenden Nachricht wird in die Variable „Payload“ geschrieben.
Zur Auswahl hierfür steht:

String
HEX (Daten werden Hexadezimal in eine String-Variable geschrieben)
Boolean
Integer
Float

TTN JSON Device
Eingehende Nachrichten im JSON-Format werden decodiert und in Variablen umgewandelt. Hierbei wird nur die erste Ebene des JSON unterstützt. Unterstützte Formate sind hierbei String, Boolean, Integer und Double (bzw. Float).
Durch aktivieren von Auto Create Variables werden außerdem alle enthaltenen Variablen automatisch erstellt :cool:

Hallo,
habe das Modul installiert und folgende Instanzen erzeugt:

Das Gateway wird mit Werte angezeigt. Die Sensoren nicht.
HookName habe ich /hook/ttn und für die Autorisierung den Acces Key /base 64 eingegeben.
Leider bekomme ich keine Daten wie im Bild zu sehen ist.

Über Unterstützung würde ich mich freuen. Vielen Dank.

Das „Gateway“ liest nur die Information zu dem Gateway selbst aus. Die eigentlichen Daten kommen über die IO-Instanz „TttnHttpIntegrationGateway“

Beim verwendeten Key muss nu der gleiche String in der TTN-Console eingetragen sein wie in Symcon.

Hallo, vielen Dank für das schöne Modul, aber irgendwie bekomm ich das nicht funktionsfähig.

Kannst du mal kurz beschreiben was ich in der http integration eigentlich konfigurieren muss?

In IPS habe ich das Modul Installiert. Dann habe ich eine Instanz vom TYP TTN Object Device erstellt.

Die Application ID ist der „Name“ der Anwendung (Erster Eintrag in der Übersicht der Anwendung) nicht die EUIS richtig?
Die Geräte ID ist der String DeciveID im Device Overview, richtig?

Im Gateway habe ich bei Hook einfach ttn stehen lassen.

Im Autorisation Feld habe ich den Accesskey der unter der Aplication zu finden ist eingefügt. (Copy 2 Clipboard & Einfügen)

Ich bekomme jedenfalls in IPS keine Daten rein, obwohl ich im TTN regelmäßig neue Daten kommen sehe.

Die HTTP Integration ist aktiv, aber ich bin mir unsicher was ich beim erstellen der Integration in den Pflichtfeldern ausfüllen muss (Vor allem URL)

Wäre für etwas hilfe dankbar.

Gruß Martin

Ich schau mal, dass ich die Doku die Tage mal ergänze und ein paar Screenshots mache.

Danke, aber grundsätzlich. holt IPS sich die Daten dort oder muss ich eine Möglichkeit schaffen das TTN die Daten bei IPS abliefert?

Nein! Die Daten werden via Webhook empfangen. D.H. Der Webserver muss verfügbar sein.
Das Funktioniert am einfachsten über den Connect-Dienst.
MQTT habe ich mir angeschaut, habe es aber verworfen weil der Datenaustausch übers Internet dann unverschlüsselt übertragen wird.

Durch den Connect-Dienst ist die Übertragung verschlüsselt.
Alternativ kann hierfür auch ein eigener Web-Proxy verwendet werden.

Hier mal ein Link zur aktualisierten Doku:

https://github.com/timo-u/Symcon_TheThingsNetwork/blob/master/README.md

Die aktuellste Version 1.2 ist noch nicht (als Stable) im Store verfügbar.

Vielen lieben Dank für das prompte erweitern der Dokumentation.

Habs am Laufen :smiley: nun kommen doch tatsächlich die Daten meines Lorawan Trackers im IPS an :eek:

MEGA!

Noch eine kurze Frage, kommt man auch an die Gatewayliste in den Metadaten.

Würde gerne sehen können über welches Gateway die Daten reingekommen sind.

Gruß Martin

Aktuell nicht direkt (nur im Debug) ich schaue mal wie ich das am besten ausgeben kann.

Auf Github ist eine neue Version verfügbar

Bei dem TTN-Device und dem TTN-Object-Device kann man nun die Daten auslesen:


$data = TTN_GetData(12345);
print_r($data);
echo "Serial: ". $data->hardware_serial; 

Die Daten werden im Buffer gespeichert und können nach dem Empfang einer Nachricht ausgelesen werden.

Erstmal ein frohes Neues;

vielen Dank für das geniale Modul. Eine RAk7200 Tracker habe ich schon einmal „online“ bekommen.
Als Gateway habe ich ein RAK7258 laufen.

Jetzt habe ich allerdings noch zwei Herausforderungen:

  1. mit
$data = TTN_GetData(32744); 

versuche ich die Metadaten der Message auszulesen.
Leider erfolglos, der Befehl wird auch nicht angeboten (s.u.). Modul habe ich bereits neu installiert (auch mal auf Beta umgeschaltet).

  1. Hat mehr etwas mit PHP zu tuen als mit dem Modul. Der Tracker liefert einen HEX-Wert mit allen Informationen, in der TTN-Oberfläche habe ich auch den mal einen Decoder reingelegt https://doc.rakwireless.com/quick-start/rak7200-lora-tracker/analyzing-the-data-from-rak7200#1-gps-data, dort werden mir alle Informationen aufgeschlüsselt. Nutze ich jedoch die Dekodierung im TTN kommt bei IPS nichts brauchbares mehr an. Jetzt habe ich mal versucht das PHP-Script von hier https://github.com/RAKWireless/RUI_LoRa_node_payload_decoder/blob/master/RUISensorDataDecoder_for_TTN.js in IPS zu nutzen. Aber da hakt es dann leider aus. Die Funktion bekomme ich nicht in Betrieb. Wie wertest Du die Sensoren aus?

Vielen Dank und schöne Grüße

kea

ttn.PNG

Auch ein Frohes Neues!
musste es jetzt erst mal nachstellen, deswegen gibt es die Antwort erst jetzt.

[quote=„kea,post:17,topic:49076“]

  1. mit
$data = TTN_GetData(32744); 

versuche ich die Metadaten der Message auszulesen.
Leider erfolglos, der Befehl wird auch nicht angeboten (s.u.). Modul habe ich bereits neu installiert (auch mal auf Beta umgeschaltet).
/QUOTE]
Diese Funktion war bislang nur verfügbar wenn man die Version via Github installiert hat. Ich habe die aktuelle Version als BETA in den Store gestellt und als Stable eingereicht.

Wenn du den Decoder in TTN verwendest kannst du in Symcon direkt mit den Daten arbeiten. Hierfür nutzt du das TTNObjectDevice.
In den Einstellungen hierzu den Schalter „Inhalt aus dem RAW-Payload“ deaktivieren und „Variablen automatisch erstellen“ aktivieren. Beim Empfang werden aus den Daten Direkt die passenden Variablen erstellt.

Für meine Geräte nutzte ich aktuell das Cayenne LPP Protokoll. Damit werden die Daten so übertragen, dass auf der Empfängerseite die Datentypen direkt passend empfangen werden. TTN wandelt die Daten dann automatisch um und übergibt diese an Symcon.
In Symcon können die Daten dann wiederum mit dem TTNObjectDevice direkt erstellt und empfangen werden.

Update:
Die Version mit „TTN_GetData()“ wurde soeben auch im Store (Stable) freigeschaltet.

Außerdem ist als BETA im Store schon die nächste Version verfügbar.

[ul]
[li]Sendeintervall [/li][li]Onlinestatus (Watchdog) [/li][li]Variablenprofile für dB, dBm, sekunden [/li][/ul]
Diese Ergänzungen gibt es aktuell „nur“ im TtnObjectDevice. Ich gehe mal davon aus, dass die meisten Benutzer den Decoder im TTN nutzen und das TtnDevice (Rohdaten) nicht verwenden !?
Feedback hierzu wäre interessant :slight_smile:

Hallo firebuster,

erstmal vielen dank für Dein Modul „The Things Network“, ich habe dazu ein paar Fragen und Hinweise.

Beim „TTN Device“ fehlt bei RSSI im Profil die Einheit „dBm“.
In jeder Instanz steht „Intevall“ statt „Intervall“.

Ich möchte die Werte vom Klax Zählersensor da gestellt haben (In TTN habe ich einen Decoder), ich habe die folgenden drei Instanzen zum testen installiert.
„TTN Device“ bekomme ich die Metadaten angezeigt und in der Variable Daten Hex Werte, aber kein SNR, Frame ID, Status und Intervall.
„TTN Object Device“ da sehe ich nur die Metadaten.
„TTN Object Device“ hier habe ich die RAW-Payload deaktiviert, da wird mir nur der Status angezeigt.
„TTN Environment Sensor“ da sehe ich auch nur die Metadaten.

Was ist der „TTN Environment Sensor“, im Modul/Doku ist der nicht vorhanden?

so, das viel mir auf die schnelle auf/ein:)

Hein09