Ich hatte bereits vor längerer Zeit meinen TTN Network Tester, auf Basis des M5Stack vorgestellt. Das damals verwendete LoRaWAN-Modul ist EOL und somit nur noch sehr vereinzelt verfügbar. Als Nachfolger ist das LoRa 868 erhältlich, welches ich auch bereits mit dem M5Stack verwendet habe.
Da beide Module sich in der Ansteuerung gänzlich unterscheiden, musste ich auch das Projekt, jedenfalls was die LoRaWAN Thematik angeht, komplett umbauen. Der treibende Anstoß kam durch Michael, der mir sogar ein Modul spenden wollte.
Das größte Problem war es die Funktionen wieder komplett einzubauen, da die aktuelle MCCI LMIC den LinkCheckReq nicht auswertet. Dank der Vorarbeit von Oliv, ging es jedoch zügiger als gedacht und ich konnte alles auf die neue Hardware übertragen. Somit kann ich euch nun die überarbeitet Variante präsentieren.
Allgemeine Übersicht des TTN Network Tester
Die Basis bildet eine M5Stack Core oder Fire zusammen mit dem LoRa 868 Modul. Zusätzlich kann das GPS-Modul und die M5GO Base verwendet werden. Mit dem Faces unterbau funktioniert es nicht, da dieser den Pin 5 für den Interrupt nutzt, jedenfalls alle Tastaturen. Für das GPS-Modul könnt ihr die interne oder externe Antenne verwenden, beides funktioniert. Die Externe ist besser, aber die interne liefert auch gute Werte. Es ist ebenfalls möglich das GPS Mini Unit zu verwenden und über den Port C der M5GO Base anzuschließen. Ebenfalls solltet ihr noch eine SD Karte frei haben, den der Node benötigt diese um den ABP Frame Counter zu speichern und legt dort auch einen GPX-Track, bzw. die Daten der SiteSurvey ab.
Vorbereitungen
Bevor ihr starten könnt, müsst ihr euch noch mit den nötigen Libraries versorgen. Diese wären:
- M5Stack
- TinyGPSPlus
- NeoPixelBus
- M5_UI – Dieser Fork erlaubt es die Farben der Progressbar wie beim TTN Mapper darzustellen
- MCCI Arduino LMIC – Dieser Fork ermöglicht den LinkCheckRequest um die Anzahl der empfangenen Gateways wiederzugeben
Neben der Software müsst ihr auch die Hardware anpassen werden. DIO1 des Ra-01H ist nicht verbunden und muss somit noch auf den M-Bus gelegt werden. Diesen verbinden ihr einfach mit Pin35 des Busses.
In einer vorherigen Version des Beitrags, habe ich die Brücke auf die Lötpads an M-Bus Pin 35 gelegt, dieses ist falsch. Die rechte Seite des Lötpads ist mit DIO0 verbunden. Somit kann über den 0 Ohm Widerstand gewählt werden ob DIO0 mit Pin 36 (default) oder 35 verbunden ist. Das gleiche gilt für Pin 26/25 und Reset. Dadurch habe ich also eine Verbindung zwischen DIO0 und DIO1 erzeugt. Ich habe die Brücke nun direkt an den M-Bus Connector gelötet. (Danke an Andreas D. für den wichtigen Hinweis).
Somit entfällt der #define LMIC_USE_INTERRUPTS in der lmic_project_config und das Pin-Mapping muss angepasst werden.
Für Module vor Dezember 2020:
// Pin mapping
const lmic_pinmap lmic_pins = {
.nss = 5,
.rxtx = LMIC_UNUSED_PIN,
.rst = 36,
.dio = {26, 35, LMIC_UNUSED_PIN},
};
Für Module ab Dezember 2020:
// Pin mapping
const lmic_pinmap lmic_pins = {
.nss = 5,
.rxtx = LMIC_UNUSED_PIN,
.rst = 26,
.dio = {36, 35, LMIC_UNUSED_PIN},
};
Die Software
Die Software findet ihr auf GitHub.
Konfiguration des TTN Network Tester
Wir starten mit der Anpassung der LMIC Library. Dazu editiert ihr bitte die lmic_project_config.h (zu finden unter Arduino/libraries/MCCI_LoRaWAN../project_config). Für unsere Region sollte es so aussehen:
#define CFG_eu868 1
#define CFG_sx1276_radio 1
#define LMIC_USE_INTERRUPTS
Dur Auskommentieren folgender Zeilen, könnt ihr die Benutzung des GPS-Moduls, bzw. der M5Go Base, deaktivieren.
#define M5go
#define M5gps
Unter //LoRaWAN ABP, bzw. //LoRaWAN OTTA, tragt ihr eure Keys ein. Solltet ihr also ABP und OTAA nutzen wollen, müsst ihr auch zwei Devices anlegen, jeweils eine ABP und OTAA Device. Der Tester nutzt generell nur ABP, bietet aber einen kleinen OTAA Mode.
Besitzer eines M5Stack Fire müssen unbedingt den PSRAM deaktivieren, da dieser mit dem GPS-Modul kollidiert. Das GPS Modul verwendet im Default UART2 mit GPIO 16 und 17, genau wie der PSRAM.
Wenn ihr das GPS Modul verwendet und ebenfalls die TTN Mapper Integration nutzen wollt, müsst ihr noch folgenden Payload Decoder einrichten:
function Decoder(b, port) {
var lat = (b[0] | b[1]<<8 | b[2]<<16 | (b[2] & 0x80 ? 0xFF<<24 : 0)) / 10000;
var lon = (b[3] | b[4]<<8 | b[5]<<16 | (b[5] & 0x80 ? 0xFF<<24 : 0)) / 10000;
var alt = (b[6] | b[7]<<8 | (b[7] & 0x80 ? 0xFF<<16 : 0)) / 100;
var hdop = b[8] / 10;
return {
latitude: lat,
longitude: lon,
altitude: alt,
hdop: hdop
};
}
Die Anzeige für die Anzahl der gesendeten Pakete ist per Default auf den Framecounter gesetzt. Somit startet ihr also nicht bei 0 nach jedem Reset. Ihr könnt das Verhalten anpassen, in dem ihr folgende Zeilen anpasst:
//txcnt = String("Sent " + String(cnt));
txcnt = String("Sent " + String(LMIC.seqnoUp - 1));
Bedienung des TTN Network Tester
Der Tester bietet folgende Modi:
- NACK – Der Tester sendet periodisch ohne Bestätigung
- ACK – Der Tester sendet periodisch mit Bestätigung
- MAN – Der Tester sendet bei Bedarf mit Bestätigung
- LCM – Der Tester sendet einen Link Check Request
- SSV – Im SiteSurvey Modus werden alle SF mit einem Link Check Request durchgegangen
- OTAA – Modus zum testen von OTAA Joins
- SET – Modus für Einstellungen
Nach dem Einschalten seht ihr erst den NACK Bildschirm. Sollte ihr das M5 Logo sehen, habt ihr ein Problem. Normalerweise findet er dann nicht das LoRa Modul. Ihr solltet nochmals den festen Sitz der Module überprüfen.
Übersicht über Display und LEDs
Anmerkung: Alle hier dargestellten Bilder, zeigen noch falsche Farben für die Symbole an, dieses ist mittlerweile angepasst.
NACK
Im Modus „NACK“ werden periodisch Uplinks verschickt, mit dem unter Set eingestellten Intervall. Dieser Modus eignet sich hervorragen für die Nutzung mit dem TTN Mapper. Mittels der Taste B könnt ihr den SF wechseln und mit der Taste C wird das Display und die LEDs gedimmt. Ein erneutes Betätigen schaltet sie wieder hell. Solltet ihr die Software mit GPS nutzen, werden erst bei einem Fix Uplinks verschickt.
ACK
Dieser Modus ist wie der zuvor genannte NACK Modus, jedoch werden hier Confirmed Uplinks verschickt, auf welche das TTN Backend antwortet. Der RSSI und SNR Wert, des Empfangenen Pakets, seht ohr dann auf dem Display. Mittels der Taste B könnt ihr den SF wechseln und mit der Taste C wird das Display und die LEDs gedimmt. Ein erneutes Betätigen schaltet sie wieder hell. Solltet ihr die Software mit GPS nutzen, verschickt der Tester erst einen Uplink bei einem gültigen GPS Fix.
MAN
Im manuellen Modus werden Confirmed Uplinks beim betätigen des Taste C verschickt. Auch hier könnt ihr den SF über die Taste B verändern.
LCM
Im LinkCheckMode wird ein Uplink mit LinkCheckRequest verschickt. Als Antwort erhaltet ihr die Anzahl der Gateways, welche euren Uplink empfangen haben. Der Request startet durch Drücken der Taste C. Mit B wechselt ihr den SF.
SSV
Der SiteSurvey Modus ist gedacht um den Standort für einen Node zu bestimmen, bzw. zu analysieren. Der Tester sendet dabei einen Uplink mit LinkCheckRequest für jeden SF von 7 bis 12 und speicher die Daten dann im GeoJSON Format auf der SD Karte ab. Zusätzlich wird im Display angazeigt, bei welcher Datenrate ein Paket empfangen wurde, DR5 steht dabei für SF7 und DR0 für SF12. Ihr startet den Vorgang durch drücken der Taste C.
Mit hilfe der Webseite geojson.io, koönnt ihr die Daten bequem auswerten. Lokationen ohne Empfang werden durch einen roten Leuchtturm markiert. Wo nur mit SF11 oder SF12 ein Empfang gegeben war ist dieser gelb, ansonsten grün.
OTAA
Im OTAA Modus könnt ihr einen Join durchführen. Anschließend wird der Tester im konfigurierten Intervall einen Uplink übertragen. Hier ist es möglich, über die Taste C, zwischen Unconfirmed oder Confirmed Upklink auszuwählen. Sollte kein GPS Fix vorhanden sein, kann über die Taste B ein Paket manuell verschickt werden.
SET
In den Settings kann das Sendeintervall verändert werden. Hier habt ihr die Möglichkeit zwischen 15, 30, 45, 60 und 120 Sekunden zu wählen.Mit der Taste C aktiviert in den PowerSave Modus. Damit geht der Tester in einen DeepSleep und wacht in Abhängigkeit von dem Sendeintervall auf. Aktuell könnt ihr den DeepSleep nur mit einem Reset beenden.
Anmerkungen
- Der DutyCyle check ist, außer im SSV Modus, aktiv
- Sobald ihr einen validen GPS Fix habt, wird der Track als GPX File auf die SD Karte gespeichert
- Periodische Übermittlungen (mit aktiviertem GPS Modul), funktinieren nur mit GPS Fix und einem GPS Alter unter 2 Sekunden
Ich hoffe euch gefällt mein Projekt und ihr könnte den Tester erfolgreich nutzen. Anmerkungen, Bugs und Verbesserungen könnt ihr gerne auf GitHub als Issue einstellen.
Vielen Dank Björn für die sehr gute Ausarbeitung dieser Anleitung!
Ich habe aber noch eine Rückfrage. Der M5 Stack überträgt ganz normal die Daten zum TTN-Mapper ich kann diese Daten auch auf der Advanced Map über die Device ID vom M5 oder über meine Gateway ID auf TTN Mapper anzeigen lassen. Meine Daten werden aber nicht in die Hauptkarte übernommen, obwohl die Messungen schon 48 Stunden her sind. Vielleicht hast du eine Idee, wo mein Fehler ist.
Vielen Dank im Voraus!
Hi,
ich denke mal du hast keinen Fehler gemacht, ich würde noch etwas warten. Wenn die Daten angezeigt werden funktioniert es ja. Mag sein das JP ein Problem hat.
Grüße,
Björn
Hallo Björn,
es hat sich bis jetzt nichts geändert. Ich habe den Tracker sogar einmal komplett neu angelegt in der Console auch dies hat keine Verbesserung gebracht.
Vielleicht hast du eine Idee woran das liegen kann.
Liebe Grüße,
fideL
Hi,
du hast die Integration aber nicht als Experiment angelegt, oder? Als Experiment würden die Daten nicht auf die Karte übertragen werden.
Grüße,
Björn
Moin,
ich habe kein Experiment angelegt oder ähnliches. Somit müsste TTNMapper die Daten ja direkt auf die Hauptkarte übernehmen.
Ich kann die Daten auch über die Advanced Map über die Device data abrufen.
Hier ein Beispiel:
*deleted*
Für mich ist das irgendwie nicht nachvollziehbar, wo der Fehler sein soll.
Liebe Grüße,
fideL
PS: Das Beispiel kannst du löschen, sobald du es gesehen hast 🙂
Du könntest ja mal JP auf Slack fragen. Der hilft immer gerne.
Hallo,
wie sieht es mit V3 aus. DA ist ABP ja Problematisch wegen dem Counter.
Ist da ein Update geplant oder so?
Danke
Hi,
das Update gibt es bereits. Die Versionen ab dem 03.02 speichern den Frame Counter auf der SD Karte und lesen ihn beim Start wieder ein. Somit muss eine SD Karte auch vorhanden sein, damit es funktioniert.
Grüße,
Björn
Hallo Björn,
ich bin jetzt endlich mal dazu gekommen meine M5Stack zu reaktivieren.
Dazu hab ich die Aktuelle Version aufgespielt und den M5 im TTN V3 angelegt.
Da kommen auch die Daten an. Also soweit alles richtig.
Allerdings bleibt die RSSI GW Anzeige leer.
GW gibt es hier nur ein einziges und das ist mein V3.
Da ich ja einer der ersten war denke ich das ich die Alte Brücke habe.
Daher hab ich das alte Pinmap genommen.
Hab aber auch beide Probiert.
Wo muß ich nach dem Fehler Suchen?
Ich habe das gleiche Problem 🙁 Meine Daten kommen bei TTN und TTNMapper an. Leider habe ich auch keine RSSI und GW Anzeige seit v3 mehr.
Björn kannst du uns da vielleicht weiterhelfen?
Bei mir lag es am GW. Nach einem Restart des GW zeigte er mir alles an.
Wenn bei TTN ankommt stimmt das schonmal.
Wichtig auch schmeiß alle anderen LMICS aus dem Lib Ordner. Wenn Rückmeldung fehlt nimmt er da meist die Falsche.