docs: update foxmash protocol
Dieser Commit ist enthalten in:
1 Ursprung
ae747dc0cc
Commit
398cf135a4
2 Dateien geändert
+126
-14
Keine Dateien entsprechen Ihrer Suche
@@ -10,17 +10,16 @@ Dies geschieht, wann immer möglich, zu Zeiten, in denen kein Sendebetrieb des F
|
||||
Dies dient einerseits der Zeitsynchronisation der Nachbarknoten und andererseits der regelmäßigen, behördlich vorgeschriebenen Aussendung des Rufzeichens.
|
||||
Üblicherweise wird das Rufzeichen des Ausrichters bzw. Veranstalters des Peilwettbewerbs verwendet.
|
||||
|
||||
## Bake
|
||||
## Bake (Broadcast)
|
||||
|
||||
Setzt sich wie folgt aus den modifizierten AX.25-, APRS- und MeshCom-Protokollen zusammen:
|
||||
|
||||
Pseudo-Byte-Stream:
|
||||
`{OE3TKT-03nnnnxxRSqyyRSqzzRSq`
|
||||
|
||||
`{OE3TKT-03nnnnxxRSqxxRSqxxRSq`
|
||||
|
||||
### Struktur:
|
||||
|
||||
* **Byte 0: `"{ "` (0x7B)**
|
||||
* **Byte 0: `{` (0x7B)**
|
||||
* **Data Type Identifier (DTI):** Abgeleitet aus der APRS- & MeshCom-Protokollspezifikation (siehe [APRS Protocol Reference](https://ui-view.net)).
|
||||
* **Begründung:** Dieser Datentyp-Bezeichner ist in der Spezifikation derzeit noch als `[Unused]` (unbenutzt) markiert, und das Zeichen sieht visuell wie ein Stationssymbol aus.
|
||||
|
||||
@@ -33,16 +32,75 @@ Pseudo-Byte-Stream:
|
||||
* **Erweiterte Notation (IDs ≥ 100):** Wenn die Stationsnummer 100 überschreitet, können beliebige Buchstaben verwendet werden, wie unter https://aprs11/SSIDs.txt beschrieben (z. B. `OE3TKT-S6` für eine beliebige spezielle 6. Station).
|
||||
* **Ersatz- / Hot-Standby-Knoten:** Um eine Station als Ersatzstation oder sofort einsatzbereiten Knoten zu kennzeichnen, wird der Bindestrich durch ein Tilde-Zeichen ersetzt (z. B. `OE3TKT~03`).
|
||||
|
||||
* **Bytes 10–13: Telemetriedaten (`nnnnnn`)**
|
||||
* **Bytes 10–13: Telemetriedaten (`nnnnnn` / Zeitstempel)**
|
||||
* **Zeitstempel:** Vorzeichenbehaftete 32-Bit-Ganzzahl (Signed 32-Bit Integer), die die Millisekunden seit Beginn des Wettbewerbstages darstellt.
|
||||
Dieser Zeitstempel dient gleichzeitig auch als Nachrichten-ID, und die gesamte Nachricht wird gehasht und damit kann festgestellt werden, ob sie doppelt ist.
|
||||
|
||||
* **Byte 14: Eigener Batteriestand**
|
||||
* **Wert:** Vorzeichenlose 8-Bit-Ganzzahl (`unsigned char`), die die eigene Batteriekapazität in Prozent (0 bis 100 %) darstellt. Ein Wert von `100` (0x64) bedeutet voll geladen, `0` bedeutet leer. Werte über 100 können optional für Netzbetrieb oder Ladevorgang reserviert werden (z. B. `255`).
|
||||
|
||||
`xxRSqyyRSqzzRSq` soll so etwas sein: Gehörte Nachbarknoten im Mesh mit einem Byte das die Qualität der Linkverbinung beinhaltet. xx ist z.B. ein Knoten mit SSID xx, und q ist die Qualtität der Verbinung:
|
||||
q setzt sich zusammen aus: bit 7: 1 ... diese SSID (Nachbar) wurde in der letzten halben Stunde mindestens 3 mal empfangen.
|
||||
0 wenn das nicht der Fall ist (weniger als 3 mal gehört in den letzten 30 Minuten), aber zumindest einmal gehört, ansonsten verschwindet er aus der Liste.
|
||||
bit 6-0 Zahler wie oft die Station gehört wurde (gleitender Wert pro 30 Minuten).
|
||||
R ist der negative RSSI-Wert in unsigned char. und S entspricht dem vierfachen SNR-Wert (signed char).
|
||||
* **Bytes 15+: Gehörte Nachbarknoten (Format: `xxRSqxxRSqxxRSq...`)**
|
||||
* Jeder im Mesh gefundene Nachbarknoten wird durch einen Multi-Byte-Block dargestellt, der seine SSID, die Link-Qualität und den Batteriestatus enthält.
|
||||
* **Bytes 15–16 (x):** Nachbar-SSID (16-Bit Unsigned Integer, z. B. `0x0003` für Stationsnummer 3).
|
||||
* **Byte 17 (R):** RSSI-Wert + 164 als `unsigned char` (z. B. `0x3A` = 58 ➡️ 58 - 164 = -106 dBm).
|
||||
* **Byte 18 (S):** Vierfacher SNR-Wert als `signed char` (z. B. `0x42` = 66 ➡️ 66 / 4 = +16.5 dB).
|
||||
* **Byte 19 (q):** Kombiniertes Qualitäts- und Batteriestatus-Byte:
|
||||
* **Bits 7–6 (Batteriezustand des Nachbarn):**
|
||||
* `00` = Normal (Batterie OK / Netzbetrieb)
|
||||
* `01` = Niedrig (Batterie schwach, Wartung empfohlen)
|
||||
* `10` = Kritisch (Batterie kritisch, Knoten fällt bald aus)
|
||||
* `11` = Reserviert
|
||||
* **Bits 5–0 (Zähler):** Gleitender Zähler, wie oft diese Station in den letzten 30 Minuten gehört wurde (Maximalwert: 63). Wenn dieser Zähler ≥ 3 ist, gilt der Nachbar als stabiler Link. Stationen, die innerhalb von 30 Minuten kein einziges Mal gehört wurden, werden aus der Liste gelöscht.
|
||||
|
||||
Beispiel: `0x00 03 9a 42 87...`
|
||||
Falls der eigne Knoten die Ziel/Start-Knoten nicht selbst sehen, so müssen
|
||||
|
||||
Das bedeutet "0x00 03" ist die SSID mit der Zahl 3 (der Nachbar der gehört wird), 0x9a ist dezimal 154
|
||||
## Nachrichten von Posten
|
||||
|
||||
Sobald eine Person am Postenschirm seine Kennung bekannt gibt wird er an diesem Knoten registriert.
|
||||
Ein Zeitstempel und seine ID wird zugewiesen (Läufernummer).
|
||||
Die Läufernummer und die entsprechende RFID-Nummer ist im System hinterlegt und es wird beim nächsten Zeitschlitz eine Posten-Nachricht an das Ziel verschickt.
|
||||
|
||||
Das Ziel und der Start-Knoten ist dem System bekannt (muss nicht zwingend SSID 0 haben).
|
||||
Jedoch: Muss eine SSID < 15 haben, da wir die anderen bits für Flags verwenden.
|
||||
Eventuell wird an beide Knoten, Ziel und Start gleichzeitig verschickt.
|
||||
Die QoS ist dabei nicht mehr 0 sondern 2. (Sicherstellung der Paketzustellung und doppelte Pakete werden erkannt und weggeworfen).
|
||||
|
||||
Dieses Nachrichtenpaket ist sehr kurz und effizient aufgebaut:
|
||||
|
||||
Wir brauchen folgende Informationen: Knotennummer, Läufernummer, Zeitstempel, und der wievielte Hopp es ist.
|
||||
|
||||
## Nachrichten von Posten
|
||||
|
||||
Sobald sich ein Teilnehmer am Postenschirm per RFID/Kennung anmeldet, wird er an diesem Knoten registriert. Dem Läufer wird ein Zeitstempel und seine ID (Läufernummer) zugewiesen. Die Verknüpfung zwischen Läufernummer und RFID-Code ist im System hinterlegt. Beim nächsten verfügbaren Zeitschlitz wird eine Posten-Nachricht mit der Dienstgüte QoS 2 (Sicherstellung der Paketzustellung, Erkennung und Verwerfen von Duplikaten) an das Ziel übermittelt.
|
||||
|
||||
Die Nachrichten werden an das Ziel und optional gleichzeitig an den Start-Knoten gesendet. Beide Knoten müssen eine SSID < 15 besitzen, da die verbleibenden Bits im Adress-Byte für Protokoll-Flags reserviert sind.
|
||||
|
||||
Dieses Nachrichtenpaket ist extrem kurz und effizient aufgebaut. Es enthält die Knotennummer, die Läufernummer, den Zeitstempel der Erfassung sowie den aktuellen Hop-Zähler.
|
||||
|
||||
Pseudo-Byte-Stream:
|
||||
`vppMLzzzzRR`
|
||||
|
||||
### Struktur (Posten-Nachricht):
|
||||
|
||||
* **Byte 0: `(` (0x40)**
|
||||
* **Data Type Identifier (DTI):** Spezieller Bezeichner für FoxMash-Postenmeldungen.
|
||||
|
||||
* **Bytes 1–2: Eigene SSID (`pp`)**
|
||||
* **Wert:** 16-Bit vorzeichenlose Ganzzahl (`uint16_t`) des sendenden Posten-Knotens.
|
||||
|
||||
* **Byte 3: `M` (Ziel-SSID, Hop-Limit / TTL & Flags)**
|
||||
* **Bits 7–5 (Hop-Limit / TTL):** Startwert für die maximale Anzahl an erlaubten Hops (Time-to-Live). Der Startknoten setzt diesen Wert (z. B. auf 3). Jeder weiterleitende Zwischenknoten verringert (dekrementiert) diesen Wert um 1. Erreicht der Wert `0`, wird das Paket nicht mehr weitergeleitet und verworfen.
|
||||
* **Bit 4 (ACK-Flag):** `0` für eine normale Nachricht, `1` für ein Bestätigungspaket (ACK).
|
||||
* **Bits 3–0 (Ziel-SSID):** Die SSID des Zielknotens (Unterstützt IDs von 0 bis 15).
|
||||
|
||||
* **Bytes 4–5: `L` (Läufernummer)**
|
||||
* **Wert:** 16-Bit vorzeichenlose Ganzzahl (`uint16_t`) zur eindeutigen Identifikation des Teilnehmers (Unterstützt IDs von 0 bis 65.535).
|
||||
|
||||
* **Bytes 6–9: `zzzz` (Zeitstempel)**
|
||||
* **Wert:** Vorzeichenbehaftete 32-Bit-Ganzzahl (Millisekunden seit Tagesbeginn), die den exakten Zeitpunkt der Registrierung des Läufers am Posten festhält. Dient auch zur Gültigkeitsprüfung im Zeitrahmen.
|
||||
|
||||
* **Bytes 10+: `RR` (Routingliste / Optional)**
|
||||
* **Wert:** Optionale Liste der Zwischenknoten. Bei der Verwendung von beispielsweise drei Relaisknoten setzt sich das Feld aus `RR RR RR` zusammen. Bleibt leer, wenn eine Direktverbindung besteht.
|
||||
|
||||
### Bestätigung und Wiederholungen (Retries)
|
||||
Die maximale Anzahl an Sendeversuchen (Retries) ist konfigurierbar (Standard: 4). Jedes Posten-Paket muss zwingend bestätigt werden. Die Bestätigung verwendet das exakt gleiche Format (`vppMLzzzzRR`), wobei jedoch **Bit 4 im Byte 3 (`M`) auf `1` gesetzt** ist. Das Antwort-Routing nutzt anhand des im Paket aufgezeichneten Pfades dieselbe Strecke in umgekehrter Richtung (Source Routing). Duplikate werden empfängerseitig anhand des eindeutigen Läufer-Zeitstempels erkannt und verworfen.
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren