Graphmodul li - LightPi: Unterschied zwischen den Versionen

Aus Graph-IT Wiki
Zur Navigation springen Zur Suche springen
Swassen (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Swassen (Diskussion | Beiträge)
Zeile 8: Zeile 8:


== Der LightPi-Master ==
== Der LightPi-Master ==
Der LightPi-Master ist die Software-Komponente die auf dem Gebäudeserver läuft. Er öffnet einen TCP-Port und wartet auf eingehende Verbindungen von LightPi-Slaves. Er verarbeitet die Zustands- und Ereignis-Nachrichten der LightPi-Slaves und reagiert auf diese mit Befehlen an die LightPi-Slaves. Er verwaltet ein Menge von Statemachines die den gewünschten Schaltzustand der Ausgänge definieren. Der LightPi-Master ist in PHP geschrieben.
Der LightPi-Master ist die Software-Komponente die auf dem Gebäudeserver läuft. Er öffnet einen TCP-Port und wartet auf eingehende Verbindungen von LightPi-Slaves. Er verarbeitet die Zustands- und Ereignis-Nachrichten der LightPi-Slaves und reagiert auf diese mit Befehlen an die LightPi-Slaves. Er verwaltet ein Menge von Statemachines die den gewünschten Schaltzustand der Ausgänge definieren. Der LightPi-Master ist in PHP geschrieben und wird über die Datei <code>etc/master.json</code> konfiguriert:
{
  "uri": "tcp://192.168.1.20:47974",
  "peers": {
    "master": {
      "ip": "192.168.1.20", "lightpi": "master"
    },
    "NV1-01": {
      "ip": "192.168.64.1", "lightpi": "lightpi01"
    },
    "NV1-02": {
      "ip": "192.168.64.3", "lightpi": "lightpi03"
    }
  },
  "machines": {
    "NV01-01:A01": { ... },
    "NV01-01:all": { ... },
    "Alarm01": { ... }
  }
}
Unter dem Schlüssel <code>uri</code> wird die IP-Adresse und der TCP-Port festgelegt auf dem der LightPi-Master auf einkommende Verbindungen lauscht. Unter dem Schlüssel <code>peers</code> werden die Unterverteilungen im Gebäude aufgezählt und die in ihnen installierten LightPis mit ihren IP-Adressen definiert. Die Unterverteilung <code>master</code> gibt einen zusätzlichen Endpunkt zum Einspeisen von Ereignissen. Die Unterverteilungen <code>NV01-01</code>, <code>NV01-02</code>, etc. stellen die Sensoren und Aktoren für die Statemachines zur Verfügung. Auf diese Art und Weise kann man einen LightPi an einer Unterverteilung tauschen ohne die Definition der Statemachines zu verändern. Die Namen für die Unterverteilungen können frei festgelegt werden. Unter dem Schlüssel <code>machines</code> werden die Statemachines definiert. Es können beliebig viele Statemachines angegeben werden. Ihre Namen können ebenfalls frei festgelegt werden. Im folgenden ein paar Beispiele:
 
"NV01-01:A01": {
  "off": {
    "transitions": {
      "on": [ "NV1-01:A01:toggle" ]
    }
  },
  "on": {
    "transitions": {
      "off": [ "NV1-01:A01:toggle" ]
    },
    "actors": [ "NV1-01:A01" ]
  }
}
Die Statemaschine <code>NV01-01:A01</code> hat zwei Zustände: <code>on</code> und <code>off</code>. Unter dem Schlüssel <code>transitions</code> sind die aus dem jeweiligen Zustand heraus erreichbaren Zustände notiert und eine Liste von Ereignissen, bei denen der Zustandswechsel durchgeführt wird. Aus dem Zustand <code>off</code> ist der Zustand <code>on</code> erreichbar. Ist die Statemachine aktuell im Zustand <code>off</code> und wird tritt das Ereignis <code>NV1-01:A01:toggle</code> auf, so wird in den Zustand <code>on</code> gewechselt. Tritt dann erneut das Ereignis <code>NV1-01:A01:toggle</code> auf, so wird zurück in den Zustand <code>off</code> gewechselt.


== Das Graphmodul li - LightPi ==
== Das Graphmodul li - LightPi ==

Version vom 18. März 2019, 11:53 Uhr

Das Graphmodul li - LightPi bildet alles rund um den LightPi im Graphen ab. Mit dem LightPi können Gebäudeautomatisierungen durchgeführt werden.

Der LightPi

Der LightPi ist eine Appliance mit 16 12V Gleichstrom Eingängen und 16 230V Wechselstrom Ausgängen die über einen verbauten Raspberry Pi ausgelesen bzw. geschaltet werden können. Der LightPi kann so zur Gebäudeautomatisierungen eingesetzt werden. Dieser Artikel beschreibt die Software, welche auf dem Raspberry Pi und im Graphen läuft um den LightPi an den Graphen anzuschließen.

Der LightPi-Slave

Der LightPi-Slave ist die Software-Komponente die auf dem im LightPi verbauten Raspberry Pi ausgeführt wird. Sie verbindet sich mit dem LightPi-Master und teilt diesem in regelmässigen Abständen den Schaltzustand der Ausgänge mit. Wird eine Änderung eines Schaltzustandes an einem Eingang entdeckt, so wird dieses Ereignis ebenfalls dem LightPi-Master mitgeteilt. Des weiteren reagiert der LightPi-Slave auf Befehle des LightPi-Masters und schaltet daraufhin die Ausgänge. Der LightPi-Slave schaltet die Ausgänge nur auf Befehl des LightPi-Masters! Der LightPi-Slave ist in Python3 geschrieben und verwendet die Bibliothek pigpio zum Auslesen und Schalten der Ein- und Ausgänge. Er verbindet sich automatisch mit dem konfigurierten LightPi-Master. Reisst die Verbindung ab, so wird automatisch versucht, diese wiederherzustellen. Die Datenpakete zwischen LightPi-Slave und LightPi-Master sind mit msgpack kodiert. Die Kommunikation erfolgt nicht verschlüsselt und auch nicht authentifiziert über TCP/IP. Eine sichere Netzwerkinfrastruktur ist also notwendig!

Der LightPi-Master

Der LightPi-Master ist die Software-Komponente die auf dem Gebäudeserver läuft. Er öffnet einen TCP-Port und wartet auf eingehende Verbindungen von LightPi-Slaves. Er verarbeitet die Zustands- und Ereignis-Nachrichten der LightPi-Slaves und reagiert auf diese mit Befehlen an die LightPi-Slaves. Er verwaltet ein Menge von Statemachines die den gewünschten Schaltzustand der Ausgänge definieren. Der LightPi-Master ist in PHP geschrieben und wird über die Datei etc/master.json konfiguriert:

{
  "uri": "tcp://192.168.1.20:47974",
  "peers": {
    "master": {
      "ip": "192.168.1.20", "lightpi": "master"
    },
    "NV1-01": {
      "ip": "192.168.64.1", "lightpi": "lightpi01"
    },
    "NV1-02": {
      "ip": "192.168.64.3", "lightpi": "lightpi03"
    }
  },
  "machines": {
    "NV01-01:A01": { ... },
    "NV01-01:all": { ... },
    "Alarm01": { ... }
  }
}

Unter dem Schlüssel uri wird die IP-Adresse und der TCP-Port festgelegt auf dem der LightPi-Master auf einkommende Verbindungen lauscht. Unter dem Schlüssel peers werden die Unterverteilungen im Gebäude aufgezählt und die in ihnen installierten LightPis mit ihren IP-Adressen definiert. Die Unterverteilung master gibt einen zusätzlichen Endpunkt zum Einspeisen von Ereignissen. Die Unterverteilungen NV01-01, NV01-02, etc. stellen die Sensoren und Aktoren für die Statemachines zur Verfügung. Auf diese Art und Weise kann man einen LightPi an einer Unterverteilung tauschen ohne die Definition der Statemachines zu verändern. Die Namen für die Unterverteilungen können frei festgelegt werden. Unter dem Schlüssel machines werden die Statemachines definiert. Es können beliebig viele Statemachines angegeben werden. Ihre Namen können ebenfalls frei festgelegt werden. Im folgenden ein paar Beispiele:

"NV01-01:A01": {
  "off": {
    "transitions": {
      "on": [ "NV1-01:A01:toggle" ]
    }
  },
  "on": {
    "transitions": {
      "off": [ "NV1-01:A01:toggle" ]
    },
    "actors": [ "NV1-01:A01" ]
  }
}

Die Statemaschine NV01-01:A01 hat zwei Zustände: on und off. Unter dem Schlüssel transitions sind die aus dem jeweiligen Zustand heraus erreichbaren Zustände notiert und eine Liste von Ereignissen, bei denen der Zustandswechsel durchgeführt wird. Aus dem Zustand off ist der Zustand on erreichbar. Ist die Statemachine aktuell im Zustand off und wird tritt das Ereignis NV1-01:A01:toggle auf, so wird in den Zustand on gewechselt. Tritt dann erneut das Ereignis NV1-01:A01:toggle auf, so wird zurück in den Zustand off gewechselt.

Das Graphmodul li - LightPi