Graphmodul li - LightPi: Unterschied zwischen den Versionen

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 ==