IoT mit LoRaWAN
und NodeRed

Developer Group Leipzig

26.05.2020

Frank Pommerening

  • Senior - Softwareentwickler
  • Consultant
  • Trainer


frank@pommerening-online.de

Disclaimer

Das heutige Meetup soll einen Überblick in das Thema
LoRaWAN sowie Node-RED vermitteln.


Einzelne Aspekte können bei Interesse
in späteren Events gerne vertieft werden.

😉

IoT

Überblick

IoT

IoT = Internet of Things
  • Vernetzung von Maschinen, Anlagen und Geräten mit und über das Internet
  • Betriff IoT geht auf Kevin Ashton (1999) zurück
  • Anfangs primär Sensoren - heute auch Aktoren und Voice-Assistenten
  • meist drahtlos verbunden - direkt oder per Gateway
  • Anforderungen: klein, sparsam (Energie), günstig und einfach einzurichten
  • Sensoren batteriegetrieben z. T. abgelegen stationiert
  • Dienstleistungen auch als SaaS

Bandbreite und Reichweite

Short Range

Bandbreite und Reichweite

Cellular

Bandbreite und Reichweite

Long Range

LoRa

Überblick

Überblick

LoRa - Long Range
  • Standard entwickelt und patentiert durch Cycleo of Grenobl
    2012 gekauft von Semtech (Monopol für Chips)
  • Modulationstechnik Chirp Spread Spectrum (CSS)
    • hohe Reichweite: Stadt 2-5km / Land >10km
    • Stabilität gegenüber Störungen
  • Geringer Stromverbrauch
  • Datenrate 0,3 - 50 kbps

Frequenzen und Regulierung

LoRa verwendet des ISM (Industrial, Scientific and Medical) - Band
  • 868 MHz (EU)
  • 915 MHz (Nordamerika, Australien ...)
  • 433 MHz (EU, Afrika, Asien, Australien ...)


Regulierung durch lokale Behörden (Leistung, Bandbreite, Zeit)
in Deutschland durch BNetzA (Allgemeinverfügung Vfg 133/2019 / Vfg 12/2020)

Wechselwirkungen mit anderen Anwendungen (keine def. Dienstqualität):
  • Babyphones, Garagentüröffnern ...
  • 70-Zentimeter-Band Amateurfunk
  • LTE 800 MHz Band (Uplink 832-862 Mhz)

Endnodes

  • Physische Sensoren für Temperatur, Luftfeuchte
  • LoRa-Chip für die Übertragung
  • Mikroprozessor für die Steuerung (z.B. ESP 32)


Fertige Sensoren (für LoRAWAN) von Laird Technologies,
Bosch, RAK Wireless ...

Broads zum selber löten z. B. MakerHawk ESP32

Gateways

  • Basisstation für Umsetzung von LoRa nach IP
  • Mono- oder Multiradio (8 Empfangs- und Sendeeinheiten)
  • Intranet / Internetverbindung mit Kabel, DSL und Mobilfunk
  • meist stationäre Stromversorgung


Fertige Gateways von Kerlink, LorixOne, RAK Wireless, Cisco ...

Erweiterungsboards für Raspberry PI oder Arduino von Pi Supply.

LoRaWAN

Überblick

Anwendungsstack

  • Open Source - basiert auf Funkstandard LoRa
  • Gateway: Chirpstack , The Things Stack
  • Endnodes - meiste nur Teile des Standards
    • Board-Hersteller: Heltec
    • Projekte: Paxcounter

LoRa Alliance

  • Gegründet März 2015
  • offener, gemeinnütziger Verein
  • über 500 Mitglieder (Auswahl): Bosch, IBM, Semtech, HP, CISCO, Amazon
  • nur begrenzten Einfluss der einzelnen Mitglieder
  • Mission: Entwicklung und Förderung der LoRaWAN Technologie
    und dessen Ökosystem für ein massives IoT
  • Spezifikationen: Network Protocol, Backend Interfaces, Regional Parameters
  • Zertifizierung von Produkten um Interoperabiltät zu gewährleisten

LoRaWAN-Klassen

Klasse A (Baseline)

  • End-Node sendet getriggert z. B. durch Timer seine Daten
    an das Gateway / dem Network Server (Uplink)
  • Nach dem Senden kurze Phase für Datenempfang (Downlink)
  • Sonstige Zeit ist End-Node im Schlafmodus
  • Prozess immer durch End-Node ausgelöst
  • Hohe Energieeffizient - hohe Latenz

Klasse B (Beacon)

  • Ähnlich Klasse A - zusätzlich Downlink ausgelöst durch Beacon
  • Gateway versendet zyklisch kleine Datenpakete (Beacon)
    zur Synchronisation und Zuteilung eines Empfangsslots
  • Energieeffizient - berechenbare Latenz für Downlink


Klasse C (Continuous)

  • End-Node besitzt meist stationäre Energieversorgung
  • Kontinuierlicher Datenempfang vom Gateway / Network Server
  • Unterberechung Empfang nur für Datenversand
  • kurze Latenz für Downlink - ungeeignet für Batteriebetrieb

Netzarchitektur

Datenformate

LoRaWAN

Sicherheit

Überblick

In LoRaWAN sind zwei Sicherheitsebene definiert:
  • Netzwerk: sichert die Authentizität der End-Node im Netzwerk
    (Beziehung zwischen End-Node und Network Server)
  • Application: Verschlüsselung die Nutzdaten (Beziehung zwischen End-Node (Customer Application) und Application Server (Customer Server Logic)

Aktivierung

Over-The-Air Activation (OTAA)

  • End-Node und Join-Server besitzen AppKey und NwkKey
  • Session-Schlüssel (AppSKey, SNwkSIntKey, FNwkSIntKey, NwkSEncKey) werden dynamisch durch einen Prozess und AES-Ableitungen erzeugt
  • Erneuerung der Session-Schlüssel erforderlich - ReJoin

Activation By Personalization (ABP)

  • Session-Schlüssel sind statisch definiert und ausgetausch
  • Verwendung bei begrenzten Ressourcen
  • Weniger Sicherheit als bei OTAA

The Things Network (TTN)

Überblick

Übersicht

  • Gegründet 2015 von Wienke Giezeman und Johan Stokking
  • Initiative zum Aufbau und Betrieb eines LoRaWAN-Netzwerks
    von und für die Community
  • verwendete Software ist Open Source
  • Verstaltet größte LoRaWAN-Konferenz (The Things Conference)
  • Organisation in lokalen Communities z.B. TTN Mitteldeutschland
  • Firmen wie Deutsche Bahn oder Rabobank unterstützen
  • > 10000 Gateways sind in 150 Ländern aktiv

Node-RED

Überblick

    Überblick

  • seit Ende 2013 von IBM als Open Source entwickelt
  • 2016 Übergabe an JS-Foundation
  • Laufzeitumgebung, grafischer Editor und Dashboard für IoT Applikationen
  • Verwendung JavaScipt-Plattform Node.js (Google Chrome V8 Engine)
  • Funktionsblöcke (Nodes) erlauben Entwicklung mit wenig Programmierung
  • Erweiterung werden per NPM (Node Package Manager) bereitgestellt

Installation

NPM - Windows

Installation Node.js
MSI von nodejs.org
Installation prüfen
 node --version

Global installieren
npm install -g --unsafe-perm node-red

Docker

Interaktives Terminal
docker run -it -p 1880:1880 --name nodered-terminal nodered/node-red
Dienst
docker run -d -p 1880:1880 --name nodered-srv nodered/node-red
Anwendungsdaten z. B. Flows sollten außerhalb
des Containers abgelegt werden.
docker volume create --name nodered-data
docker run -d -p 1880:1880 --name nodered-srv -v nodered-data:/data nodered/node-red

Sicherheit

Nach der Installation sind die Editor, API und
Dashboard ohne Authentifizierung.

Reverse Proxy

Ein Proxy z. B. Nginx oder Traefik übernimmt
Authentifizierung und ggf. TLS-Termination.

Intern

Node-RED bietet Absicherung kann per
  • Benutzername / Kennwort
  • OAuth / OpenID

Node-RED

Flow-Entwicklung

Überblick

  • Entwicklung erfolgt primär im grafischen webbasierten Editor

Konzepte

Knoten (Node)

Knoten sind die grundlegenen abgeschlossene Funktionsblöcke
mit Ein- und/oder Ausgängen.

Konfigurationsknoten (Configuration node)

Haben keine grafische Repräsentation auf dem Flow. Sie tragen Konfigurationen z.B. MQTT-Verbindungen die durch die Knoten
des Flows gemeinsam verwendet werden.

Flow

Ein Flow entspricht einen Tab im grafischen Editoren und organisiert die enthaltenen Knoten. Meist entspricht ein Flow einen abgeschlossenen Prozess.

Kontext

Der Kontext definiert die Gültigkeit von Informationen. Damit der die gemeinsame Nutzung zwischen z. B. Flows ermöglich.
  • Node: Daten nur für diesen Knoten zugreifbar
  • Flow: Daten sind für alle Knoten des Flows zugreifbar
  • Global: Daten sind für alle Knoten zugreifbar


Nachrichten

Dienen zum Datenaustausch zwischen den Knoten. Das einfache JavaScript-Objekt wird im Editor meist mit msg referenziert. Wichtig Informationen sollten in der Eigenschaft payload abgelegt werden (Konvention).

Subflow

Vergleichbar mit einer Funktion in der Programmierung. Subflows gestattet eine Wiederverwendung in anderen Flows und strukturieren die Applikation.

Verknüpfungen (Wire)

Verbinden die Knoten und leiten die Nachrichten zwischen ihren weiter. Die Verknüpfungen sind gerichtet von Ausgang zum Eingang.

Beispiel

  • Erzeugung eines aktuellen Zeitstempels als Eingabe
  • Umwandlung in ein Datum und Verknüpfung mit Begrüßung
  • Ausgabe des payload in die Debug-Konsole
var scr = msg.payload;
var dest = {
    "Message" : "Hallo Meetup " + new Date(scr).toLocaleString()
};
msg.payload = dest
return  msg;

Node-RED

Beispiel Paxcounter

Übersicht

Quelldaten

{
        "app_id": "fp_ttn_demo_paxcounter",
        "dev_id": "02195c87b3d2",
        "hardware_serial": "004FFED2BB154B9D",
        "port": 1,
        "counter": 7,
        "payload_raw": "AAA=",
        "metadata": {
          "time": "2020-05-24T08:48:39.350792811Z",
          "frequency": 868.3,
          "modulation": "LORA",
          "data_rate": "SF7BW125",
          "airtime": 46336000,
          "coding_rate": "4/5",
          "gateways": [
            {
              "gtw_id": "eui-fcc23dfffe0a7e7c",
              "timestamp": 1985768635,
              "time": "2020-05-24T08:48:39.331027Z",
              "channel": 1,
              "rssi": -81,
              "snr": 8.8,
              "rf_chain": 0
            }
          ]
        }
      }
      

Base64 Konvertierung

Verwendung vorhandene Node aus der Bibliothek.

Umwandlung Datarate

var data_rate = msg.payload.metadata.data_rate;
if(data_rate.length > 4)
{
   msg.payload.metadata.bandwidth = parseInt(data_rate.substr(data_rate.length-3,3))
   msg.payload.metadata.sf = parseInt(data_rate.substr(2, data_rate.length-7))
}
return msg; 

InfluxDB Konvertierung (Nutzdaten)

var data = msg.payload.payload_raw;
      var influxbatch = [
          {
               wlan : data.readInt16LE(0),
                time: new Date(msg.payload.metadata.time)
          },
          {
              Device : msg.payload.dev_id
          }
      ];
msg.payload = influxbatch;
return msg;

InfluxDB Konvertierung (LoRa)

var influxbatches = [];
var gateways = msg.payload.metadata.gateways;
for (var i = 0; i < gateways.length; i++)
{
  var gateway = gateways[i];
  influxbatches.push([
      {
        Channel : gateway.channel,
        RSSI : gateway.rssi,
        SNR : gateway.snr,
        Frequency : msg.payload.metadata.frequency,
        Airtime : msg.payload.metadata.airtime,
        SF : msg.payload.metadata.sf,
        Bandwidth : msg.payload.metadata.bandwidth,
        time: new Date(gateway.time)
      },
      {
        Gateway : gateway.gtw_id,
        Device : msg.payload.dev_id
      }]);
}
msg.payload = influxbatches;
return msg;

Flow

Vielen Dank für die Aufmerksamkeit




Mail: frank@pommerening-online.de
Xing: https://www.xing.com/profile/Frank_Pommerening3/
LinkedIn: https://www.linkedin.com/in/frank-pommerening-9050411b0/