TTN V3 Stack Applikation und Device Migration

Auf der diesjährigen The Things Conference, wurde der V3 Stack Cluster für Europa offiziell freigegeben. Somit wurde auch das Ende von V2 eingeläutet. Eine Meldung in der alten Konsole berichtet von der Abschaltung zum Ende 2021.

ttn v2 console message

Somit liegt es also nun an uns alles für V3 vorzubereiten, bzw. umzustellen.

Eure Nodes, bzw. Devices, stellen dabei kein Problem dar, da es egal ist ob ihr sie nun schon auf V3 umstellt. Die Empfangenen Daten der V2 Gateways werden auch an V3 weitergeleitet, sollte das Device dort aktiv sein.

Bei den Gateways ist es anders. Die Daten einen V2 Gateways werden , wie eben bereits erwähnt, auch im Bedarfsfall an den V3 Stack weitergeleitet, aber nicht die Daten eines V3 Gateways an V2. Somit solltet ihre in eurer Community die Migration planen und absprechen.

Migration von ABP Devices zum V3 Stack

Die Migration von ABP Devices kann man kurz fassen: Macht alles neu. In V2 erzeugte DevAdr werden nicht nach V3 übertragen, somit müsst ihr die Devices neu anlegen. Ihr erzeugt also eine neue Applikation und ein neues Device. Das bedeutet natürlich das ihr auch euren Node umprogrammieren müsst. Bei mir hat es jedenfalls nicht anders funktioniert, und es wird auch als bevorzugte Methode angegeben. Es soll wohl nur funktionieren, wenn eure Gateways ebenfalls auf V3 umgezogen werden, das macht aber aktuell noch keinen Sinn.

Im Forum gibt es dazu noch einen Interessanten Faden.

Eine kleine Warnung noch: Bisher konnte im V2 Stack der Frame Counter Checks abgeschaltet werden, dieses ist nun so aktuell nicht mehr möglich. Euer Node muss also seinen Frame Counter speichern, auch über einen Stromausfall hinaus.

Den vorherigen Payload Decoder könnt ihr weiter verwenden. Wie es mit Node-RED aussieht, seht ihr weiter unten.

Migration von OTAA Devices zum V3 Stack

Die Migration von OTAA Nodes ist relativ einfach. Ihr könnte eure Devices einfach exportieren und in V3 neu importieren. Dazu benötigt ihr lediglich ttnctl. Wie ttnctl installiert wird, habe ich bereits in diesem Beitrag erklärt. Wir beginnen nun mit dem Export.

Export des Device

Ihr wählt eure Applikation die ihr migrieren wollt:

ttnctl applications select
  INFO Found 21 applications:

        ID      Description
1       ba-0003 Temperatur und Luftfeuchtigkeit
2       ba-0004 GPS-Tracker
3       ba-0006 Keller Temp/Hum/Pres
4       ba-0007 Garage Temp/Hum/Pres
5       ba-0008 NodeMCU
6       ba-0009 MultiChannelGasSensor
7       ba-0010 TOF
8       ba-0011 SoilMoisture
9       ba-0012 TTNmon Node
10      ba-0013 T-Beam
11      ba-0014 OTAA testing Node
12      ba-0015 Multi purpose testing Node
13      ba-0016 PaxCounter
14      ba-0017 Motion Sensor
15      ba-0018 M5Stack LoRaWAN
16      ba-0019 Power Meter
17      ba-0020 M5Stack Faces
18      ba-0021 CubeCell
19      ba-0022 Irrigation Controller
20      ba-0023 Network Tester - 2
21      ba-0024 M5Stack Com.LoRaWAN

Which one do you want to use?
Enter the number (1 - 21) > 8
  INFO Found one EUI "70**************", selecting that one.
  INFO Updated configuration                    AppEUI=70************** AppID=ba-0011

Nun könnt ihr euch eine Liste der dort angelegten Devices anzeigen lassen.

ttnctl devices list
  INFO Using Application                        AppEUI=70********** AppID=ba-0011
  INFO Discovering Handler...                   Handler=ttn-handler-eu
  INFO Connecting with Handler...               Handler=eu.thethings.network:1904

DevID   AppEUI                  DevEUI                  DevAddr         Description
ba-0011 70**************        00**************        26******                

  INFO Listed 1 devices                         AppID=ba-0011

Anschließend ist es möglich für jedes Device die Konfiguration zu exportieren.

ttnctl devices export "ba-0011" --frequency-plan-id EU_863_870 > device.json

Genau so ist es aber auch möglich dieses für alle Devices zu machen

ttnctl devices export-all --frequency-plan-id EU_863_870 > all-devices.json

Anschließend werden die Devices in ABP umgewandelt. Euer Device funktioniert erst mal weiter, ihr braucht euch keine Sorgen machen.

ttnctl devices convert-to-abp "ba-0011" --save-to-attribute "original-app-key"

Und auch hier könnt ihr wieder alle vorhandenen Devices umwandeln.

ttnctl devices convert-all-to-abp --save-to-attribute "original-app-key"

An die alten Daten kommt ihr wieder mit folgendem Befehl. Dort ist der alte AppKey unter dem Eintrag „original-app-key“ wieder zu finden.

ttnctl devices info "ba-0011"

Hier nochmals dazu die entsprechende Doku des V3 Stacks.

Import des Device

Jetzt geht es auf der neuen Console weiter. Dort erzeugen wir eine Applikation und importieren das zuvor exportiere Device.

tt_stack_create_application
ttn_stack_add_application
ttn_stack_add_application
ttn_stack_import_device

Damit seid ihr auch schon fast fertig. Nun brauch es nur noch einen ReJoin, bzw. Reset, am Device und es läuft auf dem V3 Stack.

Wie oben bereits erwähnt, könnt ihr euren Payload Decoder 1zu1 übernehmen.

Eine offizielle Doku dazu gibt es auch und zusätzlich noch diesen Forumseintrag von Hylke Visser.

Laurens hat dazu auch ein Video veröffentlicht:

ttn v3 stack migration

Was mir bisher fehlt und ich leider noch nicht gesehen habe, ist eine Integration für den TTN-Mapper, aber das wird sich bestimmt noch innerhalb der nächsten Wochen ändern.

Node-RED

Die Verbindugn zwischen Node-RED und dem TTN wird nun über einen MQTT Node erledigt.

Zuerst müsst ihr einen API Key generieren. Dazu geht ihr wieder auf die The Things Stack Console und wählt dort Integrations und anschhließend MQTT unter eurer Applikation. Dort generiert ihr danach den API Key und kopiert ihn.

ttn v3 stack mqtt

In Node-RED fügt ihr nun einen MQTT Node hinzu und konfiguriert ihn mit den vorherigen Daten. Als Topic wählt ihr erst mal #, damit bekommt ihr alle Infos übermittelt.

Daraus habe ich dann folgenden Flow zusammengestellt. Erst der MQTT Node, danach ein JSON Parser, der eigentliche Functions-Node und die Ausgabe an die Datenbank.

node red ttn v3 stack flow

Der Inhalt der Payload hat sich geändert, daher müsst ihr eure Flows anpassen. Ihr könnt den folgenden als Beispiel nehmen. Ihr seht das die Payload nun unter msg.payload.uplink_message.decoded_payload zu finden ist. Die Metadaten befinden sich nun unter msg.payload.uplink_message.rx_metadata. Daher müsst ihr eure Flows anpassen.

var maxValue = -200;
var indexOfMaxValue = -1;
    for(var i = 0; i < msg.payload.uplink_message.rx_metadata.length; i++){
        if(msg.payload.uplink_message.rx_metadata[i].rssi > maxValue){
            indexOfMaxValue = i;
            maxValue = msg.payload.uplink_message.rx_metadata[i].rssi;
        }
    }

//lat
var msg1 = { payload: msg.payload.length };
//msg3.payload = JSON.parse(msg.payload);
msg1.payload = msg.payload.uplink_message.decoded_payload.latitude;

//lon
var msg2 = { payload: msg.payload.length };
//msg4.payload = JSON.parse(msg.payload);
msg2.payload = msg.payload.uplink_message.decoded_payload.longitude;

//alt
var msg7 = { payload: msg.payload.length };
msg7.payload = msg.payload.uplink_message.decoded_payload.altitude;

//hdop
var msg8 = { payload: msg.payload.length };
msg8.payload = msg.payload.uplink_message.decoded_payload.hdop;


//rssi
var msg3 = { payload: msg.payload.length };
//msg3.payload = JSON.parse(msg.payload);
msg3.payload = msg.payload.uplink_message.rx_metadata[indexOfMaxValue].rssi;

//snr
var msg4 = { payload: msg.payload.length };
//msg4.payload = JSON.parse(msg.payload);
msg4.payload = msg.payload.uplink_message.rx_metadata[indexOfMaxValue].snr;

//Output
var msg9 = {};
if (msg1.payload=="0"){
msg9.payload = {"rssi": msg3.payload, "snr": msg4.payload};   
}else{
msg9.payload = {"lat": msg1.payload, "lon": msg2.payload, "rssi": msg3.payload, "snr": msg4.payload, "alt": msg7.payload, "hdop": msg8.payload};
}

return [msg9];

Auch hierzu wieder der Link zur V3 Doku.

Neira hat dazu auch ein Video veröffentlicht:

node-red ttn v3 stack

So, damit solltet ihr nun wieder an eure Daten kommen und euren Node, bzw. euer Device, erfolgreich auf den TTN Stack V3 migriert haben.

Als nächstes werde ich mal eine Gateway testweise umziehen, dafür lasse ich mir aber erst mal etwas zeit.

8 Gefällt mir

4 Gedanken zu „TTN V3 Stack Applikation und Device Migration“

  1. Hallo Bjoern,
    ich habe heute mal ein MikroTik Gateway auf der V3 Console eingerichtet.
    Hat alles recht gut geklappt – musste nur in der config die korrekte ttn adresse eingeben.
    Habe 2 M5Stack bereits auch dort laufen – funkt alles – auch die MQTT Node-Red Anbindung habe ich angepasst – somit erster Probelauf 100% stabil – kann alles dann umziehen wenn es soweit ist.
    https://twitter.com/KeHo_Software/status/1375047903048257538
    Was ich noch nicht gefunden habe – es gibt aktuell keine Map bei TTN wo das neue Gateway angezeigt wird ? Sehe nur mein altes ?
    Kommt das noch oder wo kann man das einsehen ?

    Gruss Achim

    Antworten
    • Hallo Achim,

      bisher ist mir da nichts bekannt. Ich denke mal spätestens wenn V2 abgeschaltet wird, werden wir eine Map zu sehen bekommen.
      Es muss jedenfalls noch was kommen, ohne Map wäre es echt blöd.

      Grüße,
      Björn

      Antworten
  2. Hallo Björn,

    leider funktionierte bei mir der oben beschriebene Ablauf nicht.
    Die Webseite, über die der json Device File eingelesen werden sollte, hing endlos.
    Ich hab es dann über die Anleitung
    https://www.thethingsindustries.com/docs/getting-started/migrating/migrating-from-v2/migrate-using-migration-tool/establish-new-session/
    durchgeführt, was allerdings für dieses Device nicht funktionierte – ich vermute, da das Device schon zu ABP umgewandelt worden war.
    Ein zweites, anderes OTAA Device nach letzterem Prozess funktionierte dann ohne Probleme.

    Gruß
    Reinhard

    Antworten
  3. Nachtrag:
    Ich konnte das vorhandene Device komplett neu als OTAA Device anlegen. Zum Glück war der AppKey in der Arduinio IDE noch vorhanden.

    Antworten

Schreibe einen Kommentar