Graph-IT

ControlPi-Plugin für Graph-Connections

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.

Installation

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

Benutzung

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:

Debug-Oberfläche

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:

coMessage im Graphen

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.