Dieses Paket enthält ein Plugin für das ControlPi-System, mit dem eine Verbindung zu einem gegebenen Graphen aufgebaut werden kann, um die Nachrichten, die den gegebenen Filter erfüllen, zu diesem zu übertragen.
Eine ausführliche Dokumentation ist in der Dokumentation der ControlPi-Infrastruktur zu finden.
Der Code dieses Plugins kann mit git geclonet werden:
$ git clone git://git.graph-it.com/graphit/controlpi-graph.git
(Falls Zugang zu diesem Server per SSH besteht und Änderungen gepusht werden sollen, sollte stattdessen die SSH-URL benutzt werden.)
Dann kann es editierbar in ein virtuelles Environment installiert werden:
(venv)$ pip install --editable <Pfad zum Code-Repository>
Auf dem Raspberry Pi (oder wenn keine Code-Änderungen gewünscht sind) kann es auch direkt, ohne einen git-Clone installiert werden:
(venv)$ pip install git+git://git.graph-it.com/graphit/controlpi-graph.git
Eine minimale ControlPi-Konfiguration, die dieses Plugin benutzt, ist im git-Repository enthalten:
{
"Master": {
"plugin": "WSServer",
"port": 8080,
"web": {
"/": {
"module": "controlpi_plugins.wsserver",
"location": "Debug"
}
}
},
"Example State": {
"plugin": "State"
},
"Graph": {
"plugin": "Graph",
"url": "tls://graph.example.com",
"crt": "graph.crt",
"name": "te",
"filter": [
{
"sender": { "const": "Example State" },
"state": { "const": true }
}
]
},
"Graph-Sync": {
"plugin": "Periodic",
"seconds": 10,
"message": {
"target": "Graph",
"command": "sync"
}
}
}
Die Verbindung zum Graphen wird über das Graph
-Plugin hergestellt, wobei
das Attribut url
die TLS-URL des Graphen enthält, das Attribut crt
den
Pfad zum TLS-Client-Zertifikat (vom Verzeichnis, in dem controlpi
gestartet wird aus navigiert) und das Attribut name
den Namen der
coRoot
-Instanz im Graphen, an der die Nachrichten verknüpft und
verarbeitet werden sollen.
Der filter
bestimmt, welche Nachrichten an den Graphen weitergeleitet
werden sollen, in diesem Fall nur Nachrichten, in denen der
Beispiel-Zustand true
meldet.
Auf dem Graphen muss das controlpi
-Modul installiert und eine
coRoot
-Instanz mit dem gegebenen Namen vorhanden sein, damit die
Strukturen, an denen die Nachrichten abgelegt werden, vorhanden sind.
Die Nachrichten werden durch das Plugin gesammelt und an den Graphen
geliefert, wenn das Kommando sync
and das Graph
-Plugin gesendet wird.
Ein übliches Pattern ist, dass das sync
-Kommando wie in diesem Beispiel
regelmäßig von einem Periodic
-Plugin aufgerufen wird.
In der Debug-Oberfläche sieht das Minimal-Beispiel so aus:
Im Graphen können wir sehen, dass wegen des Filters nur die Nachrichten,
bei denen der Beispiel-Zustand auf true
gesetzt wird, aber nicht
diejenigen, bei denen er auf false
gesetzt wird, ankommen:
Um in umgekehrter Richtung Nachrichten aus dem Graphen an diese
ControlPi-Instanz zu schicken, wird das WSServer
-Plugin benutzt.
Die URL zu diesem, z.B. ws://graph.example.com:8080
, ist an der
coRoot
-Instanz im Graphen hinterlegt, damit dort der Graphmodul-Service
service('controlpi.send','te',['key'=>'value']);
verwendet werden kann.