preloader

Auf AEQ-WEB Suchen

AEQ-WEB | Blog

LHT65 Sensor TTN HTTP Integration

Vom TTN zur eigenen Webseite

In den letzten beiden Artikeln ging es um die Inbetriebnahme eines LoRa-Gateway mit TTN sowie um einen Temperatursensor mit LoRa. Da das TTN die empfangenen Daten in der Applikation nur kurzzeitig speichert und die Daten nachträglich nicht mehr abrufbar sind, wird ein eigener Server oder ein Dienst benötigt, der diese Daten dauerhaft speichert. TTN selbst verfügt über sehr viele Schnittstellen zu anderen Speicherdiensten, wo dann die empfangenen Daten vom LoRaWAN Netzwerk abgelegt werden können. In diesem Artikel geht es um die Programmierung eines eigenen kleinen HTTP-Application-Server mit PHP, der die Daten in eine MySQL-Datenbank am eigenen Webspace oder Webserver speichert. Über eine kleine Tabelle werden die Daten vom jeweiligen Sensor angezeigt.

Hinweis: Für dieses Projekt wird ein Webspace oder ein Webserver benötigt. Neben bekannten und guten Providern wie Hetzner Online oder World4You gibt es bei BPlaced sogar einen kostenlosen Speicher, der für dieses Projekt völlig ausreichend ist.

Voraussetzungen

Bevor man die Daten auf dem eigenen Webspace überhaupt empfangen kann, benötigt man einen Sensor sowie ein eigenes Gateway oder ein öffentliches Gateway in Reichweite. Außerdem muss der Sensor bereits mit TTN kommunizieren und die Payload von TTN entsprechend decodiert werden. Ein entsprechendes Beispiel-Tutorial mit dem LHT65 gibt es hier.

Wie funktioniert die Kommunikation?

Die Kommunikation zwischen TTN und der eigenen Webseite funktioniert sehr einfach über HTTP oder HTTPS Requests. Kommt ein neues Datenpaket über LoRaWAN bei TNN an, startet TTN einen HTTP-Request und überträgt die Daten im JSON-Format mit HTTP-POST an den eigenen Webserver. Dazu wird am Webserver ein einfacher PHP-Script aufgerufen, der die Daten von JSON decodiert und in eine MySQL Datenbank speichert. Greift man mit dem Browser auf die Webseite zu, dann werden die von TTN übertragenen LoRa-Datensätze aus der MySQL-Datenbank gelesen und angezeigt.

Webserver & Datenbank einrichten

Bevor die Einrichtung in TTN gestartet werden kann, muss der Webserver und die zugehörige Datenbank eingerichtet werden. Als erstes wird der ZIP-Ordner mit den PHP-Files heruntergeladen. Anschließend werden die Dateien aus dem Archiv entpackt und die Datei "config.php" mit einem Texteditor geöffnet. Die Datei sieht wie im folgenden Screenshot aus:

TTN HTTP Integration App Config PHP File

Die folgenden Parameter müssen entsprechend an den Datenbankserver angepasst werden:

DATABASE_USERNAME: Username für den Datenbank Login
DATABASE_PASSWORD: Passwort für den Datenbank Login
DATABASE_NAME: Name der Datenbank
DATABASE_HOST: Adresse des Datenbankservers (bei einigen Providern ist die localhost)
WRITE_LOG: Ist dieser Parameter auf den Wert "true" gesetzt, so wird der gesamte Traffic von TTN zusätzlich in einer Textdatei (log.txt) am Webserver gespeichert.

Hinweis: Bei den meisten Webspace Anbietern muss zuerst in deren Verwaltungsoberfläche eine MySQL-Datenbank angelegt werden. In der Regel werden dort auch die notwendigen Zugangsdaten angezeigt oder per E-Mail versendet.

Wenn die "config.php" Datei bearbeitet wurde, können alle drei Dateien (config.php, ttn.php & index.php) auf den Webserver geladen werden. Dies wird meistens über einen FTP-Client wie Filezilla, WinSCP o.ä. hochgeladen. Nähere Infos und die Zugangsdaten erhält man auch wieder vom jeweiligen Provider.


Datenbank einrichten

Nachdem die PHP-Dateien auf den Webserver hochgeladen wurden, muss die Datenbank-Struktur importiert werden. Dazu loggt man sich im PhpMyAdmin vom jeweiligen Provider ein. Die bereits vorhandene Datenbank ist grundsätzlich leer. In PhpMyAdmin gibt es den Reiter "Import". Hier wird die Datei "sql_template.sql" ausgewählt und hochgeladen.

PHPMYADMIN TTN PHP App

Nach einem Klick auf "OK", sollte der Import-Vorgang abgeschlossen sein und die Tabelle "data" vorhanden sein. Anschließend kann bereits die Domain vom Webspace mit dem Browser aufgerufen werden. Hier sollte wie im folgenden Screenshot zu sehen, die folgende Fehlermeldung kommen:


TTN PHP APP Data error

Ist dies nicht der Fall oder kommen andere Fehlermeldungen, so liegt ein Fehler am Datenbank-Server oder in der "config.php"-Datei vor.


TTN Integration Einrichten

In der bestehenden Applikation klickt man auf den Reiter "Integrations". Ein Klick auf "Add Integration" öffnet ein neues Fenster, wo verschiedene Dienste aufgelistet werden

TTN Setup HTTP Forwarder

HTTP Integration einrichten

Nach dem Klick auf "add Integration" wird in TTN das Tool "HTTP Integration" ausgewählt. Nachdem dieser Menüpunkt ausgewählt wurde, öffnet sich wieder ein neues Fenster mit einigen Eingabefeldern, wie im folgenden Screenshot zu sehen:

TTN Setup HTTP Forwarder

Parameter für HTTP Forwarder

Nachdem die HTTP-Integration ausgewählt wurde, fragt TTN nach einigen Parametern:

Process ID: Eine Prozess-ID muss vergeben werden, kann jedoch frei gewählt werden.
Access Key: Der "default key" kann ausgewählt werden
URL: Die Server Adresse (beginnend mit http oder https) inklusive Angabe zum PHP-Script (/ttn.php)
Method: POST
Authorization: Bleibt leer
Custom Header Name: Bleibt leer
Custom Header Value: Bleibt leer

Anschließend wird die Integration mit "Add Integration" erstellt. Ab sofort startet TTN bei jedem empfangen Datensatz einen Aufruf zur zuvor definierten URL. Der Datensatz wird als POST im JSON-Format übergeben und sieht entsprechend dem folgenden Beispiel aus:


{
   "app_id":"aeqwebtest",
   "dev_id":"lht65aeqweb",
   "hardware_serial":"A840415911822C11",
   "port":2,
   "counter":214,
   "payload_raw":"y6b/NAN1Af8yf/8=",
   "payload_fields":{
      "BatV":2.982,
      "Ext_sensor":"Temperature Sensor",
      "Hum_SHT":"88.5",
      "TempC_DS":"17.06",
      "TempC_SHT":"17.36"
   },
   "metadata":{
      "time":"2020-11-27T02:54:31.756177397Z",
      "frequency":868.1,
      "modulation":"LORA",
      "data_rate":"SF7BW125",
      "coding_rate":"4/5",
      "gateways":[
         {
            "gtw_id":"eui-c0dd4023ae2943a7",
            "timestamp":1162788267,
            "time":"",
            "channel":0,
            "rssi":-112,
            "snr":-4.2,
            "rf_chain":0
         }
      ]
   },
   "downlink_url":"https://integrations.thethingsnetwork.org/ttn-eu/api/v2/down/aeqwebtest/http_aeqweb_testserver?key=ttn-account-v2.O1O-RWpTYvjWm0n89k23atCjRBP9gZYQULtkEMmpe10"
}

Datenverarbeitung mit PHP

Der PHP-Script "ttn.php" übernimmt die empfangenen Daten von TTN und speichert dieses in die vorgefertigte MySQL-Datenbank. Der Script ist so entwickelt worden, dass nur die notwendigsten Parameter von TTN in die Datenbank gespeichert werden. Der Script und die Datenbank dienen als Vorlage und können an die entsprechen Parameter angepasst werden oder auch erweitert werden. Ist die "WRITE_LOG" Funktion aktiviert, so wird auch jeder Request von TTN mit den Rohdaten in eine Zeile vom Logfile geschrieben.

Die Ausgabe

Die Index-Datei generiert von der MySQL Datenbank eine kleine Tabelle. Obwohl die MySQL-Datenbank alle empfangenen Datensätze speichert, wird in der Tabelle automatisch immer der neueste Datensatz ausgegeben. Auch hierbei handelt es sich nur um ein Beispiel, dass vom Nutzer auf die jeweiligen Bedürfnisse angepasst werden kann.

TTN PHP APP Data view success

Sicherheitsinformation

LoRa Datenpakete sind bis zum Application-Server grundsätzlich mit AES-Verschlüsselt. Wird bei TTN die HTTP-Integration mit einer HTTPS-URL erstellt, gilt auch hier die Datenübertragung als verschlüsselt. Aber Achtung: Jeder, der die URL zur "ttn.php" Datei kennt, kann auch Daten in die Datenbank speichern. Im produktiven Einsatz empfiehlt es sich, zumindest die Device-ID zu prüfen, damit sichergestellt ist, dass die Daten tatsächlich von TTN kommen. Außerdem gibt es bei TTN die Option, Sicherheitsparameter in den Header einzubauen. Auch das kann mit PHP überprüft werden.


Share:
thumbnail
07.09.2019
ESP32 LoRa Arduino IDE Setup

In diesem Artikel zeigen wir, wie ein ESP32 LoRa Board im Arduino IDE konfiguriert wird und wie der angepasste Beispielcode für LoRa funktioniert

Alex @ AEQ-WEB
thumbnail
03.01.2021
Arduino & ESP32 bei TTN registrieren (ABP)

Diese Seite beschreibt die Registrierung und Konfiguration eines LoRa Development Boards wie Arduino, ESP32, TTGO und Ähnliches als Device bei TTN

Alex @ AEQ-WEB