The Things Network Paderborn

Otaa "session" speichern

#1

Hallo,
um Strom zu sparen habe ich in meinen “Pegelmesser” mit I2C Ultraschall Entfernungsmesser jetzt den TPL5110 integriert. Allerdings nicht wie auf dem ch2i board sondern in der Stromversorgung. Der Strom vom Li-akku zum Spannungsregler wird jetzt komplett gekappt, Das hat den Nachteil dass momentan immer OTAA durchlaufen werden muss. Alternativ könnte ich auch ABP machen, finde das aber nicht so toll weil ich dann den code eines jeden node anpassen müsste, aber lieber den Chip mit Seriennummer nutzen will.
Also kurz, es gibt wohl die Möglichkeit die “Session” zu speichern, aber der counter muss jedes mal hochgezählt und nicht-flüchtig gespeichert werden, was das EEPROM belasten würde. Gibt es Alternativen?

Ultimativ wäre die Idee erst ABP zu machen, damit die eigene Seriennummer zu verschicken und auf das Downlink mit einem OK zu warten um dann OTAA zu mit “gespeicherten Sessions” zu machen.

0 Likes

#2

Hi Patrick,
das ist tatsächlich ein Thema, das mir auch schon lange im Kopf herum schwirrt (und der @sfleiss hatte das Problem auch schon). Zu einer richtigen Lösung bin ich bisher aber auch noch nicht gekommen. Im Prinzip würde ich die Session Keys der OTAA Session im EEPROM speichern und da würde es ja ausreichen, wenn man das einmal nach einer erfolgreichen OTAA macht bzw. nach gewisser Zeit dann wieder, um die Keys zu wechseln. Der Counter ist allerdings ein Problem und den würde ich nicht jedes Mal speichern.
Kann man denn erkennen, ob die Stromverbindung gekappt wurde? Wenn ja, dann wäre es doch möglich den Counter höher zu inkrementieren, oder? Im Standardfall würde immer +1 gerechnet und wir speichern z.B. alle 100 Sensorwerte den Counter erneut ab. Fällt jetzt die Stromversorgung weg, wird der aktuelle Counter verworfen und wir nehmen den gespeicherten Counter und rechnen einfach +100 dazu. Damit wäre der Counter dann auf jeden Fall größer und es sollte ohne Probleme weiterlaufen, oder?

0 Likes

#3

Moin zusammen,

also ich nutze bei solchen Anwendungen nun ABP. Das hat auch den Vorteil das mein Node sofort mit senden loslegt und nicht darauf angewiesen ist ein Join zu machen. Das ist besonders gut, wenn die Gatewaydichte am Einsatzort nicht so groß ist und man gefahr läuft das man ewig auf einen erfolgreichen Join wartet.

0 Likes

#4

Ja, einfach einen höheren Wert nehmen wäre möglich wenn man eine RTC verwendet. Denn momentan schaltet meine Schaltung nach jedem Senden die Stromversorgung aus.
Mit RTC könnte man einfach einen counter aus der Zeit errechnen, quasi den Startzeitpunkt speichern und die Sekunden (epoche) ab dann als counter nehmen.
Einige DS3232 breakouts haben neben der RTC noch ein EEProm, das könnte man nutzen wenn man nur selten sendet. Der DS3232 (nicht als breakout erhältlich?) hat ein SRAM, da könnte man den counter speichern. Allerdings müsste man dann am besten ein komplettes pcb designen.

Mir ging es um den Sensor der zu viel Strom braucht wenn er nichts tut. Mit OTAA braucht der Node jetzt 7 Sekunden bis er die Daten gesendet hat und der Strom abgestellt wird. Das wiederholt sich alle 5 Minuten. Wenn man das OTAA noch weg bekommt sollte der Akku ewig halten.

0 Likes

#5

Moin Sascha,
wie regelst Du das beim programmieren, dann musst Du ja jedes mal gucken dass du die richtigen Daten fur den Node nimmst.

0 Likes

#6

Wenn ich mich nicht komplett irre, wird der Counter bei einem neuen OTAA Join wieder zurückgesetzt. Ich habe die Prüfung bei meinen Tests mit OTAA nicht ausgeschaltet, meine ich, und nach dem neuen Join war wieder alles problemlos da an Paketen.

Das Speichern der Session Daten ist nicht ganz so einfach. Irgendwo habe ich dazu mal etwas gelesen. Es müssen z.B. auch die Sachen gespeichert werden, die vom Netz über die MAC Kommandos im Knoten eingestellt worden sind. Das sind Infos zu den Frequenzen und noch mehr. Ausserdem kann es sein, dass das Netz ein MAC Kommando geschickt hat und irgendwann eine Antwort erwartet. Wenn sich der Node da in der Zwischenzeit abschaltet, sollte der Zustand auch gespeichert werden.

In der Referenzimplementation gibt es dazu Callbacks, die implementiert werden müssen und die notwendigen Informationen dann persistent speichern und natürlich beim Start auch wieder laden. Ich habe keine Ahnung wie das bei LLMIC oder mbed geregelt ist.

0 Likes