Events

:

:

Elektronik | Funk | Software

Der Technik-Blog

  • Social Media

    YouTube

    Werbung:


    Neue Artikel


    Events

    • Keine zukünftigen Events vorhanden

    Der Technik-Blog

    LHT65 Sensor TTN HTTP Integration

    Vom TTN zur eigenen Webseite

    Alex @ AEQ-WEB

    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.

    Achtung: TTN hat beim Wechsel von V2 auf V3 (The Things Stack) die JSON-Formatierung bei der HTTP-Integration geändert. Das Projekt ist aktuell nicht mit TTN V3 kompatibel. Ein Update für den V3-Stack gibt es hier.



    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:

    Werbung:

    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.

    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:


    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

    Werbung:

    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:

    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.

    Werbung:

    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.


    122X122

    Über den Autor

    Alex, der Gründer von AEQ-WEB. Seit über 10 Jahren beschäftigt er sich mit Computern und elektronischen Bauteilen aller Art. Neben den Hardware-Projekten entwickelt er auch Webseiten, Apps und Software für Computer.

    Top Artikel in dieser Kategorie:

    ESP32 LoRa Board LoRaWAN TTN ABP Connect

    LoRaWAN & TTN mit ESP32

    • Video
    • DE/EN

    Das ESP32 LoRa Board von Heltec unterstützt LoRa. In diesem Artikel geht es um den Zugang und Datentransfer zu LoRaWAN & TTN

    Weiterlesen
    LoRa ESP32 Library Setup Arduino IDE and Test

    ESP32 LoRa Arduino IDE Setup

    • Video

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

    Weiterlesen

    Social Media

    YouTube

    Werbung:


    Neue Artikel


    Events

    • Keine zukünftigen Events vorhanden