Erstes Gerät im The Things Stack V3

Seit ein paar Jahren experimentiere ich an der Hochschule mit dem The Things Network (TTN) [1]. In der ganzen Zeit hat man sich stark an die TTN “Konsole” [2] gewöhnt. Genau genommen war das die Konsole für die Version 2 des The Things Network Stack. Einige haben sicher schon bemerkt, dass es nun eine neue Version gibt, die Version 3. Dass man bald umsteigen sollte sieht man zum Beispiel an dem gelben Warnstreifen der oben an der V2 Konsole klebt und auf dem steht

Warning: The Things Network is moving to The Things Stack (V3) and will shut down V2 clusters in 2021. Start moving your applications and devices to a v3 cluster! Click here to read more

Deshalb hatte ich mir gestern vorgenommen, ein LoRa Gerät in V3 zu bringen. Zu Hause lag noch ein The Things Uno, der einem gewöhnlichen Arduino mit AVR Mega32U4 entspricht, genauer einem Arduino “Leonardo”, der bereits USB in den Controller Mega AVR eingebaut hat. Als LoRa Funkmodul ist ein Microchip RN2483A Modul darauf gebaut, das man auch einzeln bei den üblichen Distributoren für etwa 10 € kaufen kann. Natürlich hätte für diesen Versuch auch ein beliebiges anderes LoRa Board getaugt.

Nach ein wenig Recherchieren fand ich heraus, dass man am Gateway erst mal nichts zu machen braucht. Ich betreibe ein Gateway zu Hause, am Anfang wollte ich es auf V3 umstellen, aber das habe ich dann wieder zurückgestellt. Das Gateway ist bei der Migration nach V3 der letzte Schritt, der nicht eilt. Die Daten wandern erst mal automatisch von einem V2 Gateway zu dem V3 Netzwerk Stack. Wenn man in der V3 Konsole ist, dann sieht man sein V2 Gateway nicht, und das ist auch ganz okay. Wer sich für eine Anleitung interessiert, in der die Schritte bei der Migration beschrieben sind, der kann sich [8] ansehen.

Es gibt ein sehr gut gemachtes Tutorial, das beschreibt, wie man den TTN Arduino in TTN V2 bringt [5]. Wie schon gesagt, die einzelnen Schritte sind für Leute mit etwas LoRa-Erfahrung nichts neues, es liesse sich alles auch mit anderen Boards nachvollziehen. Ich bin das Tutorial schrittweise durchgegangen, die meisten Punkte haben auch für V3 funktioniert. Ein paar Stolpersteine waren:

  • Man muss irgendwann eingeben, welche LoRaWAN Version vom verwendeten Funkmodul unterstützt wird. Da ich mir nicht sicher war ob 1.0.2 oder 1.0.1 habe ich die Version 1.0.1 eingegeben.

  • Man kann auswählen, ob das Gerät Class A, Class B oder Class C sein soll. Früher bei V2 hatte man nur Class A zur Verfügung. Das steigert nun deutlich die Möglichkeiten, vor allem kann man durch Class C nun ein Gerät spontan benachrichtigen, ohne dass es vorher einen Uplink schicken muss. Dazu muss es aber immer auf Empfang stehen, und das erhöht deutlich den Stromverbrauch, so dass Class C nicht über längere Zeit für Batteriebetrieb geeignet ist.

  • Die “Payload Formatter” sind nun etwas anders:

    Uplink:

    function decodeUplink(input) {
       return {
           data: {
              led: input.bytes[0]
           },
           warnings: [],
           errors: []
       };
    }
    

    Hier wird nur ein einzelnes Byte (input.bytes[0]) in ein Feld mit Namen “led” umgewandelt. In der Konsole sieht man dann die Daten unter dem Namen “led”.

    Downlink (der gezeigte Code entspricht der Vorgabe ohne Änderungen):

    function encodeDownlink(input) {
       return {
          bytes: [],
          fPort: 1,
          warnings: [],
          errors: []
       };
    }
    
    function decodeDownlink(input) {
       return {
          data: {
          bytes: input.bytes
       },
       warnings: [],
       errors: []
       }
    }
    

    Es gibt nun Formatter auf der Ebene von Applications (die gelten dann für alle Devices der Application) und auf der Ebene von Devices. So kann man individuell für einzelne Geräte Formatierer angeben.

  • In dem Tutorial geht ein Abschnitt am Schluss auch auf den Downlink ein (“Message Your Device”). Ich habe einige Zeit herumprobiert, um den Downlink Encoder anzupassen, was ich dann auch geschafft habe, jedoch konnte ich dann aus der Konsole keine Downlink-Daten senden, weil schlicht das Eingabefeld dafür gefehlt hat. Das soll in nächster Zeit noch kommen. In der Doku [6] steht, dass der Downlink aber bereits funktionieren soll über V3 CLI [7], MQTT und HTTP Webhooks, lediglich die Konsole fehlt noch.

  • Bei den Integrations hat sich auch ein bisschen was getan. Diese sind nun anderes geordnet:

    • MQTT

    • Webhooks. Die auch aus V2 bekannten Dienste Ubidots, Datacake, TagIO, Akenza Core, ThingSpeak, Qubitro, thethings.io, Custom webhook sind hier zusammengefasst.

    • Pubs/Subs. Hier geht es um allgemeine Publish/Subscribe Mechanismen, z.B. NATS https://docs.nats.io, MQTT oder AWS IoT.

    • Storage Integration

    • AWS IoT

    • LoRa Cloud. Das ist ein Cloud Dienst von Semtech, der Firma von der die LoRa Funktechnologie und die Funkchips kommen. Siehe https://www.loracloud.com.

Das war schon die Zusammenfassung meines Experiments. Die Einrichtung des Arduino hat problemlos funktioniert, so dass ich mich nun an andere Geräte heranwagen möchte. Den Downlink werde ich als nächstes über die V3 CLI testen. Wer den Code sehen will, den ich dann auf meinem Arduino verwendet habe, kann sich im Repository der “Arduino Device Lib” umsehen:

https://github.com/TheThingsNetwork/arduino-device-lib

Im Verzeichnis examples/Quickstart findet man ihn:

https://github.com/TheThingsNetwork/arduino-device-lib/tree/master/examples/QuickStart

Wer Fragen dazu hat oder über seine eigenen Erfahrungen mit dem V3 Stack berichten möchte, kann mir gerne eine E-mail an Hubert.Hoegl@hs-augsburg.de schicken.

Bilder

A

Der “The Things Arduino Uno” (der eigentlich ein Arduino Leonardo ist) [4]

B

In der Arduino Umgebung wählt man nur die “The Things Network Arduino Library” aus. Das war mir am Anfang unklar, dass diese schon im Library Manager vorhanden ist.

C

V3 Konsole mit den üblichen IDs.

D

Daten kommen herein.

Comments

comments powered by Disqus