add basic docu

This commit is contained in:
Bastian Schroll 2019-09-18 18:38:17 +02:00
parent 438dda48c2
commit e2c8394907
10 changed files with 131 additions and 348 deletions

View file

View file

@ -1,289 +0,0 @@
## Format of the BOSWatch packets
<table>
<tr>
<td>field</td>
<td>fms</td>
<td>pocsag</td>
<td>zvei</td>
<td>msg</td>
<td>wildcard</td>
<td>description</td>
</tr>
<tr>
<td>serverName</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>{SNAME}</td>
<td>name of the boswatch server instance</td>
</tr>
<tr>
<td>serverVersion</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>{SVERS}</td>
<td>in case of new version, server can notify</td>
</tr>
<tr>
<td>serverBuildDate</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>{SDATE}</td>
<td></td>
</tr>
<tr>
<td>serverBranch</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>{SBRCH}</td>
<td></td>
</tr>
<tr>
<td>clientName</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>{CNAME}</td>
<td>name of the boswatch client instance</td>
</tr>
<tr>
<td>clientIP</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>{CIP}</td>
<td></td>
</tr>
<tr>
<td>clientVersion</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>{CVERS}</td>
<td>in case of new version, server can notify</td>
</tr>
<tr>
<td>clientBuildDate</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>{CDATE}</td>
<td></td>
</tr>
<tr>
<td>clientBranch</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>{CBRCH}</td>
<td></td>
</tr>
<tr>
<td>inputSource</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>{INSRC}</td>
<td>(stick, audio)</td>
</tr>
<tr>
<td>timestamp</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>{TIMES}</td>
<td></td>
</tr>
<tr>
<td>frequency</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>{FREQ}</td>
<td></td>
</tr>
<tr>
<td>mode</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>{MODE}</td>
<td>(fms, pocsag, zvei, msg)</td>
</tr>
<tr>
<td>descriptionShort</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td></td>
<td>{DESCS}</td>
<td>loaded from optional CSV file</td>
</tr>
<tr>
<td>descriptionLong</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td></td>
<td>{DESCL}</td>
<td>loaded from optional CSV file</td>
</tr>
<tr>
<td>bitrate</td>
<td></td>
<td>X</td>
<td></td>
<td></td>
<td>{BIT}</td>
<td></td>
</tr>
<tr>
<td>ric</td>
<td></td>
<td>X</td>
<td></td>
<td></td>
<td>{RIC}</td>
<td></td>
</tr>
<tr>
<td>subric</td>
<td></td>
<td>X</td>
<td></td>
<td></td>
<td>{SRIC}</td>
<td>(1, 2, 3, 4)</td>
</tr>
<tr>
<td>subricText</td>
<td></td>
<td>X</td>
<td></td>
<td></td>
<td>{SRICT}</td>
<td>(a, b, c, d)</td>
</tr>
<tr>
<td>message</td>
<td></td>
<td>X</td>
<td></td>
<td>X</td>
<td>{MSG}</td>
<td></td>
</tr>
<tr>
<td>tone</td>
<td></td>
<td></td>
<td>X</td>
<td></td>
<td>{TONE}</td>
<td>5-tone sequence</td>
</tr>
<tr>
<td>fms</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td>{FMS}</td>
<td></td>
</tr>
<tr>
<td>service</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td>{SERV}</td>
<td></td>
</tr>
<tr>
<td>country</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td>{COUNT}</td>
<td></td>
</tr>
<tr>
<td>location</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td>{LOC}</td>
<td></td>
</tr>
<tr>
<td>vehicle</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td>{VEHC}</td>
<td></td>
</tr>
<tr>
<td>status</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td>{STAT}</td>
<td></td>
</tr>
<tr>
<td>direction</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td>{DIR}</td>
<td></td>
</tr>
<tr>
<td>dirextionText</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td>{DIRT}</td>
<td>(Fhz-&gt;Lst, Lst-&gt;Fhz)</td>
</tr>
<tr>
<td>tacticalInfo</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td>{TACI}</td>
<td>(I, II, III, IV)</td>
</tr>
</table>
<br><br>
### Other possible wildcards:
- {BR} - Line break (\\r\\n)
- {LPAR} - Left parenthesis (
- {RPAR} - Right parenthesis )
- {TIME} - Actual timestamp

View file

@ -73,7 +73,7 @@ class Packet:
self.set("clientVersion", version.client) self.set("clientVersion", version.client)
self.set("clientBuildDate", version.date) self.set("clientBuildDate", version.date)
self.set("clientBranch", version.branch) self.set("clientBranch", version.branch)
self.set("inputSource", config.get("client", "inoutSource")) self.set("inputSource", config.get("client", "inputSource"))
self.set("frequency", config.get("inputSource", "sdr", "frequency")) self.set("frequency", config.get("inputSource", "sdr", "frequency"))
def addServerData(self, config): def addServerData(self, config):

1
docu/docs/changelog.md Normal file
View file

@ -0,0 +1 @@
## Changelog

View file

@ -1,6 +1,6 @@
## Konfiguration ## Konfiguration
Die Konfiguration von BOSWatch 3 ist im YAML Format abgelegt und wird nachfolgend beschrieben. Die Konfiguration von BOSWatch 3 ist im YAML Format abgelegt und wird nachfolgend beschrieben.
Immer wenn für eine Einstellung ein **Default** Wert angegeben ist, muss diese Einstellung nicht Immer wenn für eine Einstellung ein **Default** Wert angegeben ist, muss diese Einstellung nicht
zwingend in die Konfiguration eingetragen werden. zwingend in die Konfiguration eingetragen werden.
@ -12,11 +12,12 @@ Nachfolgend alle Paramater der Client Konfiguration
|Feld|Beschreibung|Default| |Feld|Beschreibung|Default|
|----|------------|-------| |----|------------|-------|
|name|Name zur Identifizierung der Client Instanz|| |name|Name zur Identifizierung der Client Instanz||
|inoutSource|Art der zu nutzenden Input Quelle (aktuell nur `sdr`)|| |inputSource|Art der zu nutzenden Input Quelle (aktuell nur `sdr`)||
|useBroadcast|Verbindungsdaten per Broadcast beziehen|no| |useBroadcast|Verbindungsdaten per Broadcast beziehen|no|
#### `server:` #### `server:`
Der Abschnitt `server:` wird nur genutzt, wenn `useBroadcast: no` gesetzt ist. Der Abschnitt `server:` wird nur genutzt, wenn `useBroadcast: no` gesetzt ist.
Ansonsten wird versucht die Verbindungsdaten per Broadcast Paket direkt vom Server zu beziehen.
|Feld|Beschreibung|Default| |Feld|Beschreibung|Default|
|----|------------|-------| |----|------------|-------|
@ -72,8 +73,8 @@ Enthält eine Liste der Router Namen, welche bei einem Alarm direkt gestartet we
Bsp: Bsp:
```yaml ```yaml
alarmRouter: alarmRouter:
- Name des Routers - Name des Routers
- ein weiter Router - ein weiter Router
``` ```
#### `router:` #### `router:`
@ -118,8 +119,8 @@ Bsp:
```yaml ```yaml
config: config:
allowed: allowed:
- fms - fms
- zvei - zvei
``` ```
--- ---

View file

@ -1,21 +1,21 @@
## Eigene Module und Plugins schreiben ## Eigenes Modul/Plugin schreiben
Um ein eigenes Modul oder Plugin zu schreiben, sollte man sich Um ein eigenes Modul oder Plugin zu schreiben, sollte man sich am besten zuerst einmal das das `template` im entsprechenden Ordner ansehen. Dies kann als Vorlage für das eigene Modul oder Plugin genutzt werden.
am besten zuerst einmal das das `template` im entsprechenden Ordner ansehen.
Dies kann als Vorlage für das eigene Plugin genutzt werden.
### 1 Informationen anpassen ### Informationen anpassen
- Dateikopf anpassen - Dateikopf anpassen
### 2 Benötigte Methoden überschreiben ### Benötigte Methoden überschreiben
#### 2.1 Modul #### Modul
Die Modul Basisklasse bietet einige Methoden, welche vom Modul überschrieben werden können. Die Modul Basisklasse bietet einige Methoden, welche vom Modul überschrieben werden können.
- `onLoad()` wird direkt beim Import des Moduls ausgeführt - `onLoad()` wird direkt beim Import des Moduls ausgeführt
- `doWork(bwPacket)` wird bei der Ausführung aufgerufen - `doWork(bwPacket)` wird bei der Ausführung aufgerufen
- `onUnload()` wird beim Zerstören der Plugin Modul zum Programmende ausgeführt - `onUnload()` wird beim Zerstören der Plugin Modul zum Programmende ausgeführt
#### 2.2 Plugin #### Plugin
Die Plugin Basisklasse bietet einige Methoden, welche vom Plugin überschrieben werden können. Die Plugin Basisklasse bietet einige Methoden, welche vom Plugin überschrieben werden können.
- `onLoad()` wird direkt beim Import des Plugins ausgeführt - `onLoad()` wird direkt beim Import des Plugins ausgeführt
- `setup()` wird vor jeder Ausführung gerufen - `setup()` wird vor jeder Ausführung gerufen
- `fms(bwPacket)` wird bei einem FMS Paket ausgeführt - `fms(bwPacket)` wird bei einem FMS Paket ausgeführt
@ -25,12 +25,12 @@ Die Plugin Basisklasse bietet einige Methoden, welche vom Plugin überschrieben
- `teardown()` wird nach jeder Ausführung gerufen - `teardown()` wird nach jeder Ausführung gerufen
- `onUnload()` wird beim Zerstören der Plugin Instanz zum Programmende ausgeführt - `onUnload()` wird beim Zerstören der Plugin Instanz zum Programmende ausgeführt
### 3 Konfiguration ### Konfiguration
#### 3.1 Konfiguration anlegen #### Konfiguration anlegen
Jedes Modul oder Plugin wird in einem Router folgendermaßen deklariert: Jedes Modul oder Plugin wird in einem Router folgendermaßen deklariert:
```yaml ```yaml
- type: module # oder plugin - type: module # oder 'plugin'
name: template_module # Name der Python Datei name: template_module # Name der Python Datei (ohne .py)
config: # config-Sektion config: # config-Sektion
option1: value 1 option1: value 1
option2: value 2 option2: value 2
@ -40,49 +40,47 @@ Jedes Modul oder Plugin wird in einem Router folgendermaßen deklariert:
- list 1 - list 1
- list 2 - list 2
``` ```
Eine entsprechende Dokumentation der Parameter ist in der Config-Readme zu hinterlegen. Eine entsprechende Dokumentation der Parameter ist in der Dokumentation der [Konfiguration](../config.md) zu hinterlegen.
#### Konfiguration verwenden
Wird der Instanz eine Konfiguration übergeben wird diese in `self.config` abgelegt und kann folgendermaßen abgerufen werden:
#### 3.2 Konfiguration nutzen
Wird der Instanz eine Konfiguration übergeben wird diese in `self.config`
abgelegt und kann folgendermaßen abgerufen werden:
- `self.config.get("option1")` einzelnes Feld - `self.config.get("option1")` einzelnes Feld
- liefert `value 1` > `value 1`
- `self.config.get("option2", "underOption1")` verschachteltes Feld (beliebig viele möglich) - `self.config.get("option2", "underOption1")` verschachteltes Feld (beliebig viele möglich)
- liefert `value 21` > liefert `value 21`
- `self.config.get("notSet", default="defValue")` Es kann ein Default Wert angegeben werden (wenn Eintrag in Config fehlt) - `self.config.get("notSet", default="defValue")` Es kann ein Default Wert angegeben werden
- liefert `defValue` > liefert `defValue`
- `for item in self.config.get(FIELD):` Über Listen kann iteriert werden - `for item in self.config.get(FIELD):` Über Listen kann iteriert werden
- liefert ein Element je Durchgang - hier `list1` und `list2` > liefert ein Element je Iteration - hier `list 1` und `list 2`
Wird ein End-Wert ausgelesen, wird dieser direkt zurück gegeben. Wird ein End-Wert ausgelesen, wird dieser direkt zurück gegeben.
Sollten weitere Unterelemente oder eine Liste exisitieren Sollten weitere Unterelemente oder eine Liste exisitieren wird erneut ein Objekt der Klasse `Config()` zurück gegeben, auf welches wiederum nach obigem Schema zugegriffen werden kann.
wird erneut ein Element der Klasse `Config()` zurück gegeben
### 4 Arbeiten mit dem bwPacket ### Arbeiten mit dem bwPacket
An das Modul bzw. Plugin wird eine Instanz eines BOSWatch-Packet Objekts übergeben. An das Modul bzw. Plugin wird eine Instanz eines BOSWatch-Packet Objekts übergeben.
Aus dieser kann mittels `bwPacket.get(FIELDNAME)` das entsprechende Feld Aus dieser kann mittels `bwPacket.get(FIELDNAME)` das entsprechende Feld ausgelesen werden.
ausgelesen werden.
Mittels `bwPacket.set(FIELDNAME, VALUE)` kann es hinzugefügt/modifiziert werden. Mittels `bwPacket.set(FIELDNAME, VALUE)` kann es hinzugefügt/modifiziert werden.
Eine Auflistung der bereitgestellten Informationen Eine Auflistung der bereitgestellten Informationen findet sich im entsprechenden [BOSWatch Paket](packet.md) Dokumentation.
findet sich im entsprechenden BOSWatch-Packet Dokument.
#### 4.1 Zu beachten bei Module #### Zu beachten bei Module
Module können Pakete beliebig verändern. Module können Pakete beliebig verändern.
Diese Änderungen werden im Router entsprechend weitergeleitet. Diese Änderungen werden im Router entsprechend weitergeleitet.
Mögliche Rückgabewerte eines Moduls: Mögliche Rückgabewerte eines Moduls:
- `return bwPacket` gibt das modifizierte bwPacket an den Router zurück - `return bwPacket` gibt das modifizierte bwPacket an den Router zurück
- `return None` Router fährt mit dem unveränderten bwPacket fort (Input = Output) - `return None` Router fährt mit dem unveränderten bwPacket fort (Input = Output)
- `return False` Router stopt sofort die Ausführung (zB. in Filtern verwendet) - `return False` Router stopt sofort die Ausführung (zB. in Filtern verwendet)
#### 4.2 Zu beachten bei Plugins #### Zu beachten bei Plugins
Plugins geben keine Pakete mehr zurück. Sie fungieren ausschließlich als Endpunkt. Plugins geben keine Pakete mehr zurück. Sie fungieren ausschließlich als Endpunkt.
Die Plugin Basisklasse liefert intern immer ein `None` an den Router zurück, Die Plugin Basisklasse liefert intern immer ein `None` an den Router zurück,
was zur weiteren Ausführung des Routers führt. was zur weiteren Ausführung des Routers führt.
### 5 Wildcards parsen (NUR IN PLUGIN) ### Wildcards parsen (Plugin only)
Das parsen der Wildcars funktioniert komfortabel über die interne Methode `self.parseWildcards(MSG)`. Das parsen der Wildcars funktioniert komfortabel über die interne Methode `self.parseWildcards(MSG)`.
Die Platzhalter für die Wildcards findet man in `boswatch/utils/wildcard.py` oder in der `packet.md`. Die Platzhalter der Wildcards findet man in der [BOSWatch Paket](packet.md) Dokumentation.

View file

@ -0,0 +1,61 @@
## BOSWatch Packet Format
Ein BOSWatch Datenpaket wird in einem Python Dict abgebildet. In der nachfolgenden Tabelle sind die genutzten Felder abgebildet.
### Allgemeine Informationen
|Feldname|FMS|POCSAG|ZVEI|MSG|Wildcard|Beschreibung|
|--------|:-:|:----:|:--:|:-:|--------|------------|
|serverName|X|X|X|X|`{SNAME}`|Name der BOSWatch Server Instanz|
|serverVersion|X|X|X|X|`{SVERS}`||
|serverBuildDate|X|X|X|X|`{SDATE}`||
|serverBranch|X|X|X|X|`{SBRCH}`||
|clientName|X|X|X|X|`{CNAME}`|Name der BOSWatch Client Instanz|
|clientIP|X|X|X|X|`{CIP}`||
|clientVersion|X|X|X|X|`{CVERS}`||
|clientBuildDate|X|X|X|X|`{CDATE}`||
|clientBranch|X|X|X|X|`{CBRCH}`||
|inputSource|X|X|X|X|`{INSRC}`|(sdr, audio)|
|timestamp|X|X|X|X|`{TIMES}`||
|frequency|X|X|X|X|`{FREQ}`||
|mode|X|X|X|X|`{MODE}`|(fms, pocsag, zvei, msg)|
|descriptionShort|X|X|X||`{DESCS}`|Kann aus optinalem CSV File geladen werden|
|descriptionLong|X|X|X||`{DESCL}`|Kann aus optinalem CSV File geladen werden|
### Speziell für POCSAG
|Feldname|FMS|POCSAG|ZVEI|MSG|Wildcard|Beschreibung|
|--------|:-:|:----:|:--:|:-:|--------|------------|
|bitrate||X|||`{BIT}`||
|ric||X|||`{RIC}`||
|subric||X|||`{SRIC}`|(1, 2, 3, 4)|
|subricText||X|||`{SRICT}`|(a, b, c, d)|
|message||X||X|`{MSG}`|Kann außerdem für ein Message Paket genutzt werden|
### Speziell für ZVEI
|Feldname|FMS|POCSAG|ZVEI|MSG|Wildcard|Beschreibung|
|--------|:-:|:----:|:--:|:-:|--------|------------|
|tone|||X||`{TONE}`|5-Ton Sequenz nach ZVEI|
### Speziell für FMS
|Feldname|FMS|POCSAG|ZVEI|MSG|Wildcard|Beschreibung|
|--------|:-:|:----:|:--:|:-:|--------|------------|
|fms|X||||`{FMS}`||
|service|X||||`{SERV}`||
|country|X||||`{COUNT}`||
|location|X||||`{LOC}`||
|vehicle|X||||`{VEC}`||
|status|X||||`{STAT}`||
|direction|X||||`{DIR}`||
|dirextionText|X||||`{DIRT}`|(Fhz->Lst, Lst->Fhz)|
|vehicle|X||||`{VEC}`||
|vehicle|X||||`{VEC}`||
|tacticalInfo|X||||`{TACI}`|(I, II, III, IV)|
### Weitere Wildcards
- `{BR}` - Zeilenumbruch `\r\n`
- `{LPAR}` - öffnende Klammer `(`
- `{RPAR}` - schließende Klammer `)`
- `{TIME}` - Aktueller zeitstempel

BIN
docu/docs/img/bw3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View file

@ -1,17 +1,11 @@
# Welcome to MkDocs # BOSWatch 3
For full documentation visit [mkdocs.org](https://mkdocs.org). ![BOSWatch](img/bw3.png "BOSWatch 3 Logo")
## Commands
* `mkdocs new [dir-name]` - Create a new project. **Es wird darauf hingewiesen, dass für die Teilnahme am BOS-Funk nur nach den Technischen Richtlinien der BOS zugelassene Funkanlagen verwendet werden dürfen.**
* `mkdocs serve` - Start the live-reloading docs server. **Der BOS-Funk ist ein nichtöffentlicher mobiler Landfunk. Privatpersonen gehören nicht zum Kreis der berechtigten Funkteilnehmer.** _(Quelle: TR-BOS)_
* `mkdocs build` - Build the documentation site.
* `mkdocs help` - Print this help message.
## Project layout ***
mkdocs.yml # The configuration file. **The intercept of the German BOS radio is strictly prohibited and will be prosecuted. The use is only permitted for authorized personnel.**
docs/
index.md # The documentation homepage.
... # Other markdown pages, images and other files.

View file

@ -1 +1,18 @@
site_name: My Docs site_name: BOSWatch3 Core
site_author: Bastian Schroll & BW3 Dev team
nav:
# - BW3: index.md
- Quick Start Guide: config.md
# - Module: index.md
# - Plugins: index.md
- Entwickler:
- Eigenes Modul/Plugin: develop/ModulPlugin.md
- BOSWatch Packet Format: develop/packet.md
# - BW3 Source Docu: /api/index.html
- Changelog: changelog.md
theme:
name: mkdocs
highlightjs: true
hljs_style: github