PyLoRaWebChat Projekt Dokumentation¶
Ziel¶
Ziel war es mithilfe des LoRa Moduls HIMO-01P
innherlab unserers Kurses ein eigenständiges Netzwerk aufzubauen,
wobei jeder Teilnehmer an dem Protokoll mitgewirkt hatte aber die Implementation selbst schreiben musste, siehe
Abb. 1.
Als Hardware Voraussetzung wurde nur das HIMO-01P
vorgegeben, ob dieses Modul mit ein Arduino, Raspberry Pi, Android
oder PC betrieben wird, war den Teilnehmer überlassen.
Aufbau¶
Ziel Aufbau¶
Um den Aufbau mit möglichst wenig Bauteilen zu erstellen, sollte das HIMO-01P
Funkmodul über ein Arduino direkt an
ein MacBook angeschlossen werden. Der Arduino soll als Serielle Brücke zwischen den Host System und dem Funkmodul dienen,
siehe Abb. 2.
Als Endprodukt soll via eine Website ein Echtzeit-Chat aufgebaut werden, worüber alle Teilnehmer des Netzwerkes automatisch aufgelistet werden und jeder Teilnehmer ein eigenen Chat Verlauf erhält.
Als Grundlage für die Website dient Django, welches in einem Docker Container gestartet werden soll, um die Anwendung Plattformunabhänig zu gestalten. Außerdem dient Docker in diesem Fall, das System auch in Zukunft auf neuen System auszuführen, ohne Anpassungen am Quellcode zu tätigen.
Probleme mit dem Ziel Aufbau¶
Nicht vollfunktionsfähige Arduino Nanos Kopien¶
Nicht alle Arduino Kopien funktionieren wie vorgeschrieben, in diesen Aufbau gab es bei 2 verschiedenen Modellen unterschiedliche Probleme:
- Das erste Modell funktinierte die Kommunikation über den
RX
undTX
Port nicht. - Bei dem zweiten Modell lieferte über den
3.3V
Stromausgang eine zu niedrige Spannung, wodurch dasHIMO-01P
Modul nicht betrieben werden konnte.
Defekte Kabel¶
Ohne das dies am Anfang bemerkt wurde, gabe es in den ersten Versuchen defekte Kabel:
- Ein einardriges Kabel zur Verbindung von dem Arduino mit dem
HIMO-01P
war gebrochen. - Das Micro USB Kabel, zum betreiben des Arduinos, besaß keine Leitung zur Kommunikation zwischen dem Host und dem Arduino. Es lieferte auschließlich Strom.
Docker USB Geräte Freigabe unter Mac¶
Da für MacOS und Windows andere USB-Treiber für die Endgeräte notwendig sind als Linux, ist es nicht möglich USB-Hardware für Docker freizugeben. Das Problem ist bei den Docker Entwickler seid Jahren bekannt, da dies aber eine niedrige Prioität besitzt, gibt es bislang keine Offizielle Lösung.
Umgesetzter Aufbau¶
Um die Probleme zu lösen, wurde das Host System mit ein Ubuntu 18.04 ausgetauscht und als Arduino wird ein Arduino Uno verwendet, siehe Abb. 3.
Docker¶
Die Docker Container werden via einer Docker-Compose Datei verwaltet. Darin werden die Abhänigkeiten innerhalb der Container festgelegt, auch welche Resoucen die Container von dem Host System erhalten.
Als Grundlage des Projektes wurde cookiecutter-django genommen, welches eine funktionierende Django Anwendung für Docker erstellt.
Für diesen Aufbau werden 3 Container erstellt:
django
: Enthält die Website basierend auf Django und ein Daemon zur Interaktion mitHIMO-01P
postgres
: Postgres Datenbankredis
: Redis Server als Cache für Websockets und als Message Queue für denHIMO-01P
Daemon
In Abb. 4 wird der Aufbau grafisch Dargestellt.
Website¶
Die Website enhält die Komponenten Frondend, Backend, Redis Cache und den LoRa Daemon für das HIMO-01P
Modul.
Das Frondend Kommuniziert über Websockets direkt mit dem Django Backend, es sendet zum Server ausgehende Nachrichten und erhält vom Backend neue bzw. update von Nachrichten und Nodes.
Für das caching von den Nachrichten nutz das Backend ein Redis Server für die Websockets & Ausgehende LoRa Nachrichten.
Sobald ein Node
oder Message
Objekt innerhalb der Datenbank geändert oder neu erstellt wird, sendet anschließend
das Backend diese Information zum Client via Websocket.
In Abb. 5 ist die Kommunikation als Diagramm Dargestellt.
Quickstart¶
Warnung
Diese Anleitung ist für Debian / Ubuntu mit installiereten Docker und Docker-Compose geschrieben.
HIMO-01P mit den Linux Host verbinden¶
HIMO-01P
Modul mit den Arduino wie folgt verbinden.
Arduino | HIMO-01P |
TX | TX |
RX | RX |
GND | GND |
3.3V | VIN |
RESET -> GND |
Der Arduino muss nun via USB an den Linux Host angeschlossen werden. Jetzt sollte das HIMO-01P
Modul unter
den Port /dev/ttyACM0
direkt ansprechbar sein.
Einstellungen¶
Um Änderungen wie die Adresse oder der HIMO-01P
Einstellungen zu ändern, muss die Datei .envs/.local/.serial
angepasst werden.
Software herunterladen und starten¶
Die aktuelle Projekt Version herunterladen via Git.:
$ git clone git@github.com:linuxluigi/PyLoRaWebChat.git
$ cd PyLoRaWebChat
Docker Images erstellen:
$ docker-compose -f local.yml build
Website starten:
$ docker-compose -f local.yml up -d django # in Background starten
$ docker-compose -f local.yml up django # starten mit Log output
Admin Benutzer erstellen:
$ docker-compose -f local.yml run --rm django python manage.py createsuperuser
LoRa Daemon starten:
$ docker-compose -f local.yml run --rm django python manage.py lora_daemon
Nun ist es möglich auf der Website mit dem erstellten Admin Benutzer im Backend ein zu loggen um zugriff auf die
Hauptwebsite zu erhalten. Dafür auf den Hostname des Host Systems im Browser eingeben wie http://localhost:8000/admin
.
Anschließend auf http://localhost:8000/
gehen um den LoRa Echtzeitchat einzusetzen.
Protokoll¶
Funk Richtlinien¶
Feld | Wert |
Trägerfrequenz | 433000000 |
Leistung | 20 |
Bandbreite | 6 |
Spreizfaktor | 10 |
Fehlerkorrekturcode | 1 |
CRC- Prüfung | 1 |
impliziter Header | 0 |
einmaliger Empfang | 0 |
Frequenzmodulation | 0 |
Frequenzmodulationsperiode | 0 |
Empfangszeitlimitzeit | 3000 |
Benutzerdatenlänge | 8 |
Präambellänge | 4 |
HIMO-01P
Befehl zur Gerät Konfiguration:
AT+CFG=433000000,20,6,10,1,1,0,0,0,0,3000,8,4
Gerät Adresse¶
Jeder Node erhält eine eigene Adresse, die Adresse ist auf jedes HIMO-01P
Modul aufgeklept.
HIMO-01P
Befehl zur Adressen eingabe für Gerät 10
:
AT+ADDR=0010
Anwesenheit im Netzwerk senden¶
Jeder Netzwerk Teilnehmer (Node) soll alle 30 bis 60 Sekunden ein RTI
zum Broadcast senden. Um dauerhafte Kollisionen
zu vermeiden, soll das RTI
jede Übertragung in unregelmäßigen Abständen gesendet werden.
RTI
steht hierbei für Routing Table Information. Der Befehl für das HIMO-01P
Modul ist:
AT+DEST=FFFF
AT+SEND=3
RTI
Jeder Teilnehmer erhält nun LR,0010,03,RTI
:
LR
Nachrichten eingang0010
Adresse des Absenders, absender Adresse ist immer 4 Stellen groß03
Länge der NachrichtRTI
RTI Nachricht
Jeder Teilnehmer kann nun neue Nodes im Netzwerk finden und diese zu ihrer eigenen Routing Information Table hinzufügen.
Nachricht an anderen Node senden & empfangen¶
Die maximale Nachrichten Länge beträgt 250 Zeichen, diese muss den HIMO-01P
Modul vor dem Senden mitgeteil werden,
sowie die Ziel Adresse. Der Befehl zum senden der Nachricht Hallo
, welche 5
Zeichen lang ist, an der Adresse
0001
von dem Absender 0010
ist:
AT+DEST=0001
AT+SEND=5
Hallo
Der Empfänger erhält dadurch LR,0010,05,Hallo
:
LR
Nachrichten eingang0010
Adresse des Absenders, absender Adresse ist immer 4 Stellen groß05
Länge der NachrichtHallo
Nachricht