From 9dae4c07b6fd2a31f4f4671ac30b38cdf0cc32d1 Mon Sep 17 00:00:00 2001 From: Benjamin Braatz Date: Mon, 4 Sep 2023 19:33:12 +0200 Subject: [PATCH] Completed tutorial --- doc/DebugView.png | Bin 0 -> 93922 bytes doc/index.md | 295 +++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 293 insertions(+), 2 deletions(-) create mode 100644 doc/DebugView.png diff --git a/doc/DebugView.png b/doc/DebugView.png new file mode 100644 index 0000000000000000000000000000000000000000..093385591df4a892f554f28ae61fdb708ce61544 GIT binary patch literal 93922 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%0D@klYwCx{qSLBePwvp``9E%NpIZRjxPJw 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 literal 0 HcmV?d00001 diff --git a/doc/index.md b/doc/index.md index a40b26c..d5891b4 100644 --- a/doc/index.md +++ b/doc/index.md @@ -23,12 +23,12 @@ controlpi-template controlpi-` (falls das Template wiederverwendet werden soll) in das Verzeichnis für das neue Plugin verschoben oder kopiert werden. In diesem Verzeichnis löschen wir zunächst das `.git`-Verzeichnis (`rm -rf -.git/`), da wir Änderungen nicht das Template-Repository, sondern (falls +.git/`), da wir Änderungen nicht in das Template-Repository, sondern (falls überhaupt) in ein neues Repository für das neue Plugin einchecken wollen. Für unser Beispiel führen wir also ```shell -$ cp -R controlpi-template controlpi-overshoot +$ cp -r controlpi-template controlpi-overshoot $ cd controlpi-overshoot $ rm -rf .git/ ``` @@ -78,6 +78,49 @@ Beide sollten für unser Projekt angepasst werden. In `setup.py` können auch Abhängigkeiten zu anderen Python-Bibliotheken deklariert werden. +`README.md`: +```markdown +# ControlPi Plugin for Giving a State Overshoot Time +This distribution package contains a plugin for the +[ControlPi system](https://docs.graph-it.com/graphit/controlpi), that +lets a state active for a configured time after setting its controlling +overshoot state to `False`. + +Documentation (in German) can be found at [doc/index.md](doc/index.md) in +the source repository and at +[https://docs.graph-it.com/graphit/controlpi-overshoot/](https://docs.graph-it.com/graphit/controlpi-overshoot/). +Code documentation (in English) including doctests is contained in the +source files. +``` + +`setup.py`: +```python +import setuptools + +with open("README.md", "r") as readme_file: + long_description = readme_file.read() + +setuptools.setup( + name="controlpi-overshoot", + version="0.1.0", + author="Graph-IT GmbH", + author_email="info@graph-it.com", + description="ControlPi Plugin for Giving a State Overshoot Time", + long_description=long_description, + long_description_content_type="text/markdown", + url="http://docs.graph-it.com/graphit/controlpi-overshoot", + packages=["controlpi_plugins"], + install_requires=[ + "controlpi @ git+git://git.graph-it.com/graphit/controlpi.git", + ], + classifiers=[ + "Programming Language :: Python", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + ], +) +``` + In `doc/index.md` befindet sich die längere Dokumentation unseres neuen Plugins (auf Deutsch). In `conf.json` befindet sich eine minimale Beispiel-Konfiguration für @@ -139,11 +182,259 @@ Da wir aber noch nichts entwickelt, die `conf.json` noch nicht angepasst haben und diese noch einen Platzhalter enthält, passiert hier noch nichts. ## Implementierung des Plugins selbst +Das Plugin wird wie gesagt in `controlpi_plugins/overshoot.py` +implementiert: +```python +"""ControlPi Plugin for Giving a State Overshoot Time.""" +import asyncio + +from controlpi import BasePlugin, Message, MessageTemplate +from controlpi.baseplugin import JSONSchema +``` +Zunächst werden die notwendigen Module und einzelne Klassen aus diesen +importiert. +Für unser einfaches Beispiel brauchen wir nur das Modul `asyncio` für +asynchrone Programmierung und die Klassen `BasePlugin`, `Message` und +`MessageTemplate` aus dem ControlPi-Basis-System. +`JSONSchema` ist eine Typ-Definition für JSON-Schemata. +```python +class Overshoot(BasePlugin): + """ControlPi plugin for Giving a State Overshoot Time.""" +``` + +Jedes ControlPi-Plugin erbt von der Klasse `BasePlugin`, die unter anderem +festlegt, dass die weiter unten besprochenen Methoden `process_conf` und +`run` implementiert werden müssen. ### Konfigurations-Schema +Die Konfiguration eines Plugins wird durch die Konstante `CONF_SCHEMA` als +JSON-Schema beschrieben: +```python + CONF_SCHEMA: JSONSchema = {'properties': + {'state': {'type': 'string'}, + 'overshoot': {'type': 'integer', + 'default': 10}}, + 'required': ['state']} +``` + +Für unser Beispiel gibt es zwei Attribute in der Konfiguration. `state` ist +ein String, der festlegt, welcher andere Zustand durch den Nachlauf +geschaltet werden soll, und `overshoot` ist ein Integer, der festlegt, wie +lang der Nachlauf in Sekunden sein soll. +Für `overshoot` ist ein Default-Wert von 10 Sekunden vorgegeben, während +für `state` festgelegt ist, dass dieses Attribut in der Konfiguration +vorhanden sein muss. + +Die Methode `process_conf` wird für alle Plugins während der +Initialisierung des ControlPi-Systems synchron aufgerufen. +Sie hat die Aufgabe, die Konfiguration abzuarbeiten und eventuelle +Instanz-Attribute zu setzen: +```python + def process_conf(self) -> None: + """Register bus client.""" + self._state = False + self._delayed_off = 0 + self._cancelled_off = 0 +``` + +In unserem Beispiel muss von der Konfiguration nichts bearbeitet werden. +Wir brauchen aber einige Instanz-Attribute: +`self._state` hält den momentanen Zustand, `self._delayed_off` die Anzahl +der Ausschalt-Vorgänge, die noch auf ihre Abarbeitung warten und +`self._cancelled_off` die Anzahl der durch Wieder-Einschalten abgebrochenen +Ausschalt-Vorgänge. ### Registrierung am Message-Bus +Außerdem wird in `process_conf` auch häufig das Plugin am Message-Bus +registriert (wenn es nicht – wie beispielsweise ein Web-Server – mehrere +Klienten nach Bedarf registriert): +```python + self.bus.register(self.name, 'Overshoot', + [MessageTemplate({'event': + {'const': 'changed'}, + 'state': + {'type': 'boolean'}}), + MessageTemplate({'state': + {'type': 'boolean'}}), + MessageTemplate({'target': + {'const': self.conf['state']}, + 'command': + {'const': 'set state'}, + 'new state': + {'type': 'boolean'}})], + [([MessageTemplate({'target': + {'const': self.name}, + 'command': + {'const': 'get state'}})], + self._get_state), + ([MessageTemplate({'target': + {'const': self.name}, + 'command': + {'const': 'set state'}, + 'new state': + {'type': 'boolean'}})], + self._set_state)]) +``` + +Die Registrierung enthält zunächst den Namen der Instanz und des Plugins. +Dann folgt ein Array mit Nachrichten-Templates für alle Nachrichten, die +das Plugin senden möchte. +In unserem Fall sind dies `'state'`-Nachrichten, die den momentanen Zustand +mitteilen, optional mit einem Attribut `'event': 'changed'`, das angibt, +dass sich der Zustand geändert hat, und `'command'`-Nachrichten an den +untergeordneten, von unserem Nachlauf-Plugin kontrollierten Zustand. + +Nach den gesendeten Nachrichten werden die empfangenen Nachrichten +konfiguriert, hierbei wird für ein Array von Nachrichten-Templates jeweils +ein Callback angegeben, das für diese Nachrichten aufgerufen werden soll. +Für `'command': 'get state'`-Nachrichten ist dies in unserem Fall die +Methode `self._get_state` und für `'command': 'set state'`-Nachrichten die +Methode `self._set_state`, wobei im Template zusätzlich spezifiziert ist, +dass `'command': 'set state'`-Nachrichten ein `'boolean'`-Attribut +`'new state'` enthalten müssen. ### Callbacks +Ein großer Teil der Funktionalität von Plugins wird durch solche Callbacks +implementiert, die auf Nachrichten von anderen Clients im ControlPi-System +reagieren. + +In unserem Fall sind dies explizite Kommandos, den momentanen Zustand +auszulesen oder zu ändern, aber es kann auch auf beliebige andere +Nachrichten – beispielsweise die von unserem Beispiel-Plugin gesendeten +`'event'`- und `'state'`-Nachrichten – reagiert werden. + +Das Callback `self._get_state` sendet einfach den momentanen Zustand auf +den Bus: +```python + async def _get_state(self, message) -> None: + await self.bus.send(Message(self.name, {'state': self._state})) +``` + +Das Callback `self._set_state` sendet eine `'event': 'changed'`-Nachricht, +wenn der Zustand sich geändert hat: +```python + async def _set_state(self, message) -> None: + if self._state != message['new state']: + self._state = message['new state'] + await self.bus.send(Message(self.name, + {'event': 'changed', + 'state': self._state})) +``` + +Hat er sich zu `True` geändert, werden alle Ausschalt-Vorgänge abgebrochen, +indem die Zahl der abgebrochenen auf die Zahl der noch wartenden +Ausschalt-Vorgänge gesetzt wird. +Außerdem wird durch eine `'command'`-Nachricht sichergestellt, dass der +kontrollierte Zustand ebenfalls `True` ist: +```python + if message['new state']: + # Cancel all turning off: + self._cancelled_off = self._delayed_off + await self.bus.send(Message(self.name, + {'target': self.conf['state'], + 'command': 'set state', + 'new state': True})) +``` + +Hat er sich zu `False` geändert, wird die Anzahl der Ausschalt-Vorgänge um +1 erhöht und die konfigurierte Zeit gewartet. +Wenn nach diesem Warten die Anzahl der abgebrochenen Vorgänge noch größer +als 0 ist, wird diese um 1 reduziert und nichts weiter unternommen. +Nur, wenn die abgebrochenen Vorgänge schon 0 waren, wird der kontrollierte +Zustand auf `False` gesetzt: +```python + else: + self._delayed_off += 1 + await asyncio.sleep(self.conf['overshoot']) + if self._cancelled_off > 0: + self._cancelled_off -= 1 + else: + await self.bus.send(Message(self.name, + {'target': self.conf['state'], + 'command': 'set state', + 'new state': False})) + self._delayed_off -= 1 +``` + +Wenn der Zustand sich durch `'command': 'set state'` gar nicht geändert +hat, wird einfach nur der aktuelle Zustand als Nachricht gemeldet: +```python + else: + await self.bus.send(Message(self.name, + {'state': self._state})) +``` + +Schließlich muss jede Implementierung von `BasePlugin` eine asynchrone +`run`-Methode enthalten, die durch das ControlPi-System für alle Plugins +gestartet wird: +```python + async def run(self) -> None: + """Do nothing.""" + pass +``` + +Für unser Beispiel-Plugin hat diese nichts zu tun. +Für andere Plugins kann sie vor allem von der Kommunikation mit anderen +Clients unabhängige Kommunikation mit der Außenwelt implementieren: +* Starten eines Web-Servers, der auf eingehende Verbindungen wartet +* Starten eines parallelen Threads, der Peripherie-Ereignisse in +Bus-Nachrichten übersetzt +* Starten eines parallelen Threads, der eine Schnittstelle überwacht + +### Beispiel-Konfiguration +Die Beispiel-Konfiguration sieht so aus: +```json +{ + "Debug": { + "plugin": "WSServer", + "port": 8000, + "web": { + "/": { + "module": "controlpi_plugins.wsserver", + "location": "Debug" + } + } + }, + "Light": { + "plugin": "State" + }, + "Light-Overshoot": { + "plugin": "Overshoot", + "state": "Light" + } +} +``` + +Es bietet sich oft an, das Beispiel mit einer Debug-Oberfläche +auszustatten. +Um es laufen zu lassen, muss dann `controlpi-wsserver` zusätzlich (bei +aktiviertem Venv) installiert werden: +```shell +$ pip install git+git://git.graph-it.com/graphit/controlpi-wsserver.git +``` + +Außer dem Websocket-Server, der Debug-Oberfläche enthält dieses Beispiel +nur ein `State`-Plugin `Light`, das den kontrollierten Zustand – ein Licht, +das nach dem Ausschalten eine Weile weiterleuchten soll – darstellt, und +ein `Overshoot`-Plugin `Light-Overshoot`, das eben ein Beispiel für das +hier implementierte Plugin ist. + +Es ist in diesen Minimal-Beispielen oft sinnvoll Dinge, die in der +tatsächlichen Anwendung wahrscheinlich geschaltete elektrische Ausgänge – +z.B. durch das Plugin `controlpi-pinio` – wären durch einfache +`State`-Plugins darzustellen, da diese ohne externe Abhängigkeiten +funktionieren und in der Debug-Oberfläche betrachtet werden können. + +Das Beispiel kann (immer noch bei aktivierten Venv) ausgeführt werden +durch: +```shell +$ python -m controlpi conf.json +``` +Ein Zustand dieses Beispiels sieht zum Beispiel so aus: +![Debug-Oberfläche](tutorials/controlpi-plugin/DebugView.png) + +Das `Overshoot`-Plugin wurde bereits ausgeschaltet, das `State`-Plugin ist +aber noch eingeschaltet und wird genau 10 Sekunden (da der Default in der +Beispiel-Konfiguration nicht überschrieben wurde) später ausgehen. -- 2.34.1