LinkCheckMode – Mein Node sendet nicht mehr

ttn logoMomentan bin ich dabei meinen Mapping-Node für den TTN-Mapper aufzubohren. Ich erweitere den Node um einen manuellen Modus mit Confirmed Uplink. Dabei ist mir jedoch ein Fehler unterlaufen, der mir so noch nicht bewusst war. Ich bin leider über den LinkCheckMode gestolpert.

Es ist bei mir noch viel Luft nach Oben, was die Programmierung von Arduinos angeht, insbesondere die Konfiguration der LMIC Parameter. Ich habe meine funktionierenden Nodes und kopiere mir einfach die Sketches und passe die entsprechenden Punkte wie Sensorik und Datenübermittlung an. Gerade die Auswirkung der einzelnen LMIC Parameter kann ich bisher oft nur erahnen. Und so kam es, wie es kommen musste, ich habe mir selbst einen schönen Fehler eingebaut, da ich mir über die Auswirkungen des LinkCheckMode nicht bewusst war.

 

Was ist passiert?

Auf einer meiner Mapping-Touren, hat der Node nicht mehr gesendet. Ich bin längere Zeit durch ein Gebiet ohne Empfang gelaufen und merkte es erst, nachdem ich wieder in Reichweite meines Gateways war. Für mich war mein neuer Sketch dadurch unbrauchbar, da ein zuverlässiges Mappen so nicht möglich war. Ein Node zum Mappen soll stoisch versuchen seine Daten zu schicken, egal ob sie empfangen werden oder nicht. Das war aber nur das erste Problem.

Bei dem Versuch den Fehler zu finden, bin ich auf mein zweites Problem gestoßen. In unregelmäßigen Abständen, verlangte der Node plötzlich ACK Meldungen. Ok, das muss an den Änderungen gelegen haben, da ich unter bestimmten Umständen eine Bestätigung haben möchte. Irgend eine meiner If Abfragen macht Quatsch, dachte ich mir jedenfalls. Also im kompletten Code die Confirmed Uplinks abgeschaltet, jedoch ohne Erfolg.

Ich habe mich dann daran gemacht das Problem zu finden, hatte aber anfänglich keinen Erfolg und hatte mich schon fast damit abgefunden ohne meine Erweiterung leben zu müssen. Nachdem ich jedoch nochmals neu angefangen habe, ist mir die Ursache des Problems sofort bewusst geworden. Ich hatte funktionierenden und fehlerhaften Code nebeneinander gelegt und schnell den problematischen Eintrag gefunden.

 

Die Lösung

In meinem neuen Sketch fehlte folgende Zeile im void setup()

LMIC_setLinkCheckMode(0);

Die Zeile war zwar vorhanden, aber im EV_JOINED Case. Da es sich hierbei aber um einen ABP Node handelt, kommt dieser Fall gar nicht vor.

Durch den LinkCheck, verlangt der Node regelmäßig ein ACK, sollte dieses nicht kommen, stellt er irgendwann den Betrieb ein. Dieses erklärt also meine beiden Probleme. Ein anschließender Test hat mich beruhigt, da nun kein ACK mehr kam und der Node auch ohne Link, munter sendet.

Hier nochmals etwas mehr Code, damit ihr wisst wo der Eintrag hin sollte:

    // Make the RX window bigger for confirmation
    LMIC_setClockError(MAX_CLOCK_ERROR * 1 / 100);
    
    // Disable Link Check
    LMIC_setLinkCheckMode(0);

    // TTN uses SF9 for its RX2 window.
    LMIC.dn2Dr = DR_SF9;

    // Set data rate and transmit power for uplink (note: txpow seems to be ignored by the library)
    LMIC_setDrTxpow(DR_SF7,14);

    // Start job
    do_send(&sendjob);

 

Wozu dient der LinkCheckMode überhaupt

Der LinkChech macht nur Sinn bei OTTA Nodes die auch ADR aktiv haben, so lese ich es momentan jedenfalls heraus. Damit kann der Node automatisch seinen SF anpassen, sollte er schlechten Empfang haben. Mit dem Thema werde ich mich wohl innerhalb der nächsten Wochen mal beschäftigen. Ich kann also leider erst mal keinen vollständige Antwort liefern, versuche mich aber durch das Thema zu graben.

 

Der Übeltäter

Hier nun der Verursacher meiner Probleme, mein aktueller Node als GPS-Tracker und zum Mappen:

 

Der Schalter neben der Antenne schaltet den Node ein. Der Schalter mit den drei Positionen lässt mich zwischen SF7, SF9 und SF12 wählen. Bei SF9 oder SF12 verwendet der Node andere Keys und sendet die Daten per Integration in ein Experiment. Somit landen im TTN-Mapper nur Daten mit SF7. Der Schalter darunter aktiviert den manuellen Modus. In diesem Modus sendet der Node nur Daten wenn der Taster an der rechten Seite betätigt wird. Zusätzlich verlangt der Node eine Bestätigung. Sollte die Bestätigung empfangen werden leuchtet die LED an PIN 13 des Feather 32u4 Lora.

1 Gedanke zu “LinkCheckMode – Mein Node sendet nicht mehr

Schreibe einen Kommentar