BW3-Core/docu/docs/develop/ModulPlugin.md

87 lines
3.8 KiB
Markdown
Raw Normal View History

2019-09-18 18:38:17 +02:00
## Eigenes Modul/Plugin schreiben
2018-01-15 14:18:15 +01:00
2019-09-18 18:38:17 +02:00
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.
2018-01-15 14:18:15 +01:00
2019-09-18 18:38:17 +02:00
### Informationen anpassen
2018-01-15 14:18:15 +01:00
- Dateikopf anpassen
2019-09-18 18:38:17 +02:00
### Benötigte Methoden überschreiben
#### Modul
2019-03-01 17:54:58 +01:00
Die Modul Basisklasse bietet einige Methoden, welche vom Modul überschrieben werden können.
2019-09-18 18:38:17 +02:00
2019-03-01 17:54:58 +01:00
- `onLoad()` wird direkt beim Import des Moduls ausgeführt
- `doWork(bwPacket)` wird bei der Ausführung aufgerufen
- `onUnload()` wird beim Zerstören der Plugin Modul zum Programmende ausgeführt
2019-03-10 19:41:42 +01:00
2019-09-18 18:38:17 +02:00
#### Plugin
2018-01-15 14:18:15 +01:00
Die Plugin Basisklasse bietet einige Methoden, welche vom Plugin überschrieben werden können.
2019-09-18 18:38:17 +02:00
2018-01-15 14:18:15 +01:00
- `onLoad()` wird direkt beim Import des Plugins ausgeführt
- `setup()` wird vor jeder Ausführung gerufen
2018-01-15 21:37:24 +01:00
- `fms(bwPacket)` wird bei einem FMS Paket ausgeführt
- `pocsag(bwPacket)` wird bei einem POCSAG Paket ausgeführt
- `zvei(bwPacket)` wird bei einem ZVEI Packet ausgeführt
2018-02-22 13:36:50 +01:00
- `msg(bwPacket)` wird bei einem Nachrichten Packet ausgeführt
2018-01-15 14:18:15 +01:00
- `teardown()` wird nach jeder Ausführung gerufen
- `onUnload()` wird beim Zerstören der Plugin Instanz zum Programmende ausgeführt
2019-09-18 18:38:17 +02:00
### Konfiguration
#### Konfiguration anlegen
2019-03-01 17:54:58 +01:00
Jedes Modul oder Plugin wird in einem Router folgendermaßen deklariert:
```yaml
2019-09-18 18:38:17 +02:00
- type: module # oder 'plugin'
name: template_module # Name der Python Datei (ohne .py)
2019-03-01 17:54:58 +01:00
config: # config-Sektion
option1: value 1
option2: value 2
underOption1: value 21
underOption2: value 22
list:
- list 1
- list 2
```
2019-09-18 18:38:17 +02:00
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:
2018-01-15 21:32:52 +01:00
2019-03-01 17:54:58 +01:00
- `self.config.get("option1")` einzelnes Feld
2019-09-18 18:38:17 +02:00
> `value 1`
2019-03-01 17:54:58 +01:00
- `self.config.get("option2", "underOption1")` verschachteltes Feld (beliebig viele möglich)
2019-09-18 18:38:17 +02:00
> liefert `value 21`
- `self.config.get("notSet", default="defValue")` Es kann ein Default Wert angegeben werden
> liefert `defValue`
2019-03-01 17:54:58 +01:00
- `for item in self.config.get(FIELD):` Über Listen kann iteriert werden
2019-09-18 18:38:17 +02:00
> liefert ein Element je Iteration - hier `list 1` und `list 2`
2018-01-15 21:37:24 +01:00
2019-09-18 18:38:17 +02:00
Wird ein End-Wert ausgelesen, wird dieser direkt zurück gegeben.
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.
2018-01-15 21:37:24 +01:00
2019-09-18 18:38:17 +02:00
### Arbeiten mit dem bwPacket
An das Modul bzw. Plugin wird eine Instanz eines BOSWatch-Packet Objekts übergeben.
2019-03-01 17:54:58 +01:00
2019-09-18 18:38:17 +02:00
Aus dieser kann mittels `bwPacket.get(FIELDNAME)` das entsprechende Feld ausgelesen werden.
2019-03-01 17:54:58 +01:00
2019-09-18 18:38:17 +02:00
Mittels `bwPacket.set(FIELDNAME, VALUE)` kann es hinzugefügt/modifiziert werden.
2019-03-01 17:54:58 +01:00
2019-09-18 18:38:17 +02:00
Eine Auflistung der bereitgestellten Informationen findet sich im entsprechenden [BOSWatch Paket](packet.md) Dokumentation.
2018-02-22 13:36:50 +01:00
2019-09-18 18:38:17 +02:00
#### Zu beachten bei Module
Module können Pakete beliebig verändern.
2019-03-01 17:54:58 +01:00
Diese Änderungen werden im Router entsprechend weitergeleitet.
Mögliche Rückgabewerte eines Moduls:
2019-09-18 18:38:17 +02:00
2019-03-01 17:54:58 +01:00
- `return bwPacket` gibt das modifizierte bwPacket an den Router zurück
- `return None` Router fährt mit dem unveränderten bwPacket fort (Input = Output)
2019-03-10 19:41:42 +01:00
- `return False` Router stopt sofort die Ausführung (zB. in Filtern verwendet)
2019-09-18 18:38:17 +02:00
#### Zu beachten bei Plugins
Plugins geben keine Pakete mehr zurück. Sie fungieren ausschließlich als Endpunkt.
2019-03-10 19:41:42 +01:00
Die Plugin Basisklasse liefert intern immer ein `None` an den Router zurück,
was zur weiteren Ausführung des Routers führt.
2019-03-01 17:54:58 +01:00
2019-09-18 18:38:17 +02:00
### Wildcards parsen (Plugin only)
Das parsen der Wildcars funktioniert komfortabel über die interne Methode `self.parseWildcards(MSG)`.
Die Platzhalter der Wildcards findet man in der [BOSWatch Paket](packet.md) Dokumentation.