LoraWAN CO2-Sensor Node auf Basis des Raspberry Pi

  • Ich möchte euch hier die jüngste Erweiterung von PiTS vorstellen und über den erfolgreichen Abschluss eines weiteren Teilprojektes zum Thema "Umweltmonitoring in Smart Cities auf Basis des Raspberry Pi" berichten sowie anhand dieser thematischen Schwerpunkte veranschaulichen:

    • Messung der CO2-Konzentration
    • Datenübertragung per LoRa-Funk an das Netzwerk der Dinge (TTN)
    • Veröffentlichung der Messdaten als Open Data auf opensensemap.org

    Zum Hintergrund vorweg noch ein paar Infos:


    Angefangen hatte ich mit der Entwicklung von PiTS bereits vor einigen Jahren und hatte das hier im Forum im Beitrag "Wetterdaten mit dem Pi Temperatur Sentinel (PiTS) aufzeichnen und darstellen" vorgestellt.


    Seitdem unsere Gemeinde, im Rahmen einer vom Bund geförderten Initiative, als Smart City digitaler Vorreiter im ländlichen Raum werden möchte, wurde ich aufgrund eines dort im Handlungsfeld „Digitale Infrastruktur“ durchzuführenden Projektes auf das Thema LoRaWAN aufmerksam.


    Um am "The Things Network" teilzunehmen, muss man sich dort als Community-Member anmelden und die eigenen Nodes/Endgeräte/Devices über die TTN V3-Console einrichten.


    Zunächst hatte ich in diesem Sommer ein TTN V3-Gateway auf Basis eines Raspberry Pi Model 3A+ und dem "WM1302 Raspberry Pi HAT" von Seeed Studio aufgebaut und in Betrieb genommen.

    So in die Thematik LoRaWAN eingearbeitet, habe ich anschließend mit der Entwicklung eines LoRaWAN Nodes begonnen. Das bisherige Ergebnis der Entwicklung ist dieser Prototyp (Einer von Zweien) eines TTN V3 Nodes:

    <- animGIF (Klicken zur Ansicht)


    Je nach Bezugsquelle der Bauteile lässt sich so ein LoRaWAN Node auf Basis des Raspberry Pi bereits ab 80,- EUR Materialkosten selbst zusammenbauen. Die teuersten Komponenten sind das LoRaFunk-HAT von Adafruit und der Sensirion SCD40 CO2-Sensor, welcher auf Basis des PASens-Prinzips (PhotoAcoustic Sensor technology) die CO2-Konzentration in der Umgebung ermittelt. Darüber hinaus misst der Sensor auch die Temperatur und die relative Luftfeuchte.


    Hier die Stückliste an erforderlicher Hardware:

    • 1 x Raspberry Pi Zero W oder Raspberry Pi Zero 2 W
    • 1 x Sensirion SCD40 Sensor
    • 1 x Adafruit LoRa Radio Bonnet mit OLED - RFM95W@915MHz
    • 1 x u.FL-LoRa-Antenne @ 868MHz
    • 1 x Raspberry Pi 12.5W Micro USB Netzteil oder adäquate Stromversorgung

    Das Adafruit LoRa Radio Bonnet HAT wird auf die Stiftleiste des Raspberry Pi gesteckt. Häufig benötigte Anschlüsse (z.B. 3,3V GND oder SDA und SCL der IC2-Schnittstelle) sind auf der HAT-Platine auch als Lötpunkte verfügbar. Der Sensirion SCD40 kommuniziert mit dem Raspberry Pi per I2C-Schnittselle, entsprechend wird der Sensor mit diesen Lötpunkten verbunden. Ich habe dazu 2x gewinkelte Stiftleisten auf der Unterseite des HATs angelötet und den Sensor mit DuPont-Verbinder versehen, siehe hier:



    So kann bei Bedarf ein defekter Sensor leichter ausgetauscht werden.


    Als Software kommt das aktuelle Release der PiTS-It! Management Software zum Einsatz.

    Der CO2-Sensor wird bei der PiTS-It! Management Software gemäß FAQ konfiguriert.

    Das Adafruit LoRa Radio Bonnet HAT erfordert zusätzlich die Installation der folgenden Pakete:

    Code
    sudo apt install python3-smbus
    sudo apt install python3-pip
    sudo pip3 install --upgrade setuptools
    sudo pip3 install adafruit-circuitpython-ssd1306
    sudo pip3 install adafruit-circuitpython-framebuf
    sudo pip3 install adafruit-circuitpython-rfm9x


    Damit die Messdaten des Sensors nun noch per LoRa übertragen werden, muss im Programmverzeichnis von PiTS die Datei .PiTSIt.LoRaWAN erstellt werden.


    Diese Optionsdatei enthält die Device spezifischen Verschlüsselungs-Keys,

    Code
    <Device Address (DevAddr)>
    <Network Key (NwkKey)>
    <Application Session Key (AppSKey)>

    welche zur Aktivierung des PiTS-Nodes im TTN als ABP Device erforderlich sind.


    Leider bildet die TinyLora-Library von Adafruit nur einige rudimentäre Funktionen für den Betrieb im LoraWAN TTN ab. So nette Features wie Over-the-Air-Activation (OTAA) sind damit leider nicht möglich und daher muss die Activation by Personalization (ABP) Methode zur Registrierung des PiTS-Sensor-Node im TTN verwendet werden.


    Zunächst muss man in der TTN Console eine Application (App) erstellen, um den PiTS-Node als "End device" dafür erstellen zu können. Hier steht exemplarisch, welche Parameter bei der Registrierung des "End device" zu wählen sind.


    Im Einzelnen wählt man oben Manually aus. Als Frequency Plan muss Europe 863-870 MHz (SF9 for RX2 - recommended), als LoRaWAN version die Option MAC V1.0.2 und als Regional Parameters Version die Option PHY V1.0.2 REV B ausgewählt werden.

    Wie oben bereits erwähnt muss man als Activation Mode ADP verwenden,

    Anschließend werden über den jeweiligen Button automatisch die Device address, AppSKey, & NwkSKey generiert. Diese Werte können per "Copy & Paste" in die Optionsdatei .PiTSIt.LoRaWAN eingetragen werden. Es ist als Format dabei die Binärdarstellung 0x.. zu wählen.


    Auch unterliegt die Nutzung des öffentlichen TTN Community Netzwerkes einer "Fair Use Policy", welche die Uplink Airtime eines Nodes auf 30 Sekunden pro Tag (24h) begrenzt. Entsprechend ist das maximale Datenvolumen über 24h nicht besonders groß und man sollte deshalb darauf achten, dass man bei den PiTS-Einstellungen die Mess- und Lograte für den Sensor auf 15 bzw. 30 Minuten einstellt.


    PiTS verwendet zur Übertragung der Messdaten das CayenneLPP Format und codiert entsprechend den Payload der per LoRaWAN übertragen wird.

    Deshalb ist es wichtig in der TTN Console den Payload Formatter für den UplLink beim End Device - wie hier abgebildet - auch auf CayenneLPP zu setzen:



    Damit die Messwerte letztendlich als Open Data bei OpensenseMap publiziert werden, muss zum Schluß in der TTN Console noch bei der TTN Application eine entsprechende Webhook Integration hinzugefügt werden. Dies ist im Detail auf sensebox.de beschrieben. Die Vorgehensweise ist die Gleiche für PiTS.


    Nun registriert man abschließend auf OpenSenseMap eine neue SenseBox, um die Messdaten des PiTS-LoRaWAN Nodes der Allgemeinheit als Open Data zur Verfügung zu stellen, Im Dialog wählt man bei Hardware die Manuelle Konfiguration aus und fügt die bei PiTS angeschlossenen Sensoren hinzu. Für den SCD40 sind das Temperatur, Luftfeuchte und Kohlendioxyd.

    In den erweiterten Einstellungen wird The Things Network aktiviert und das Decoding Profile auf Cayenne LPP (beta) gesetzt. Die Konzentration des Kohlendioxyd wird im Cayenne LPP Phänomen Beleuchtungsstärke übertragen:


    Falls alle Schritte richtig durchgeführt wurden, werden nun die Messdaten des SCD40 von PiTS per LoRaWAN nach TTN und von dort zu OpenSenseMap übertragen.

    Hier sieht man beispielhaft die Darstellung der Daten bei OpenSenseMap



    im Vergleich zu der Darstellung im WebUI von PiTS.



    Die drei Taster des Adafruit LoRa Radio Bonnet sind übrigens mit unterschiedlichen Funktionen belegt. Neben der Darstellung der letzten Messwerte auf dem OLED Display kann man hier auch die aktuelle Uhrzeit betrachten


    <- animGIF (Klicken zur Ansicht)


    oder der PiTS LoRaWAN Node kann bei Bedarf darüber heruntergefahren werden. Das ist ganz praktisch, wenn der Node nicht remote über WiFi/LAN erreichbar ist, um diese Aktion über das WebUI oder per SSH ausführen zu können.



    Es fehlt nur noch ein schickes Gehäuse aus dem 3D-Drucker, um die Komponenten des PiTS LoRaWAN Nodes zu schützen. Dann ist der Prototyp fertig.


    Jetzt ist dieser Beitrag doch recht ausführlich und umfangreich geworden. Ich hoffe, er ist trotzdem informativ und interessant genug, um auch euch für dieses Thema zu begeistern.


    LG

    TGD

    Edited once, last by TGD: Hinweis zu animGIF hinzugefügt. ().