openHAB: Die Welt der Dinge in der Hand

Ein weiteres Beispiel für einen Persistence-Service ist die Anwesenheitssimulation, die unter Verwendung des Google-Kalenders implementiert wurde. Bei der Anwesenheitssimulation geht es darum, durch Nachahmung des „normalen“ Nutzerverhaltens (Licht, Rollläden, Bewässerung etc.) ein Haus bewohnt wirken zu lassen, um Einbrecher abzuschrecken. Der Persistence-Service lädt dafür Status-Änderungen in einen Kalender hoch und legt darin Ereignisse für die Zukunft an. Ein Schaltbefehl, der jetzt ausgeführt wird, führt damit zu einem Ereignis, das zum aktuellen Zeitpunkt zuzüglich eines Offsets von (standardmäßig) zwei Wochen angelegt wird. Aktiviert der Nutzer zu gegebener Zeit die Anwesenheitssimulation, werden nun die damals exportierten, tatsächlich aufgetretenen Ereignisse abgespielt. Damit ist für die Anwesenheitssimulation kein spezielles Training des Systems mehr nötig. Über die gewohnten Oberflächen des Google-Kalenders (Web, Smartphone, Desktop) kann man natürlich jederzeit auf einzelne Ereignisse zugreifen, sie administrieren und optimieren.

REST API

openHAB kann im Systemverbund des IoT von dort aus auch Aktionen entgegennehmen und diese in echte Schaltbefehle umsetzen. Es wäre z. B. ein Szenario denkbar, in dem mehrere openHAB-Installationen an unterschiedlichen Standorten über einen IoT-Service koordiniert werden sollen. Würde man in der ersten Lokation den Status „anwesend“ setzen, soll der Status in der zweiten Lokation auf „abwesend“ geschaltet werden.

Für die automatische Aktivierung des jeweils anderen Status stellt openHAB eine REST-Schnittstelle zur Verfügung, die im Wesentlichen zwei Aufgaben erfüllt: Zum Einen bietet sie lesenden Zugriff auf die deklarierten Items und Sitemaps, und zum Anderen können Status-Updates und Kommandos an einzelne Items geschickt werden [7]. Der Einstiegs-URI des REST API lautet http:// <host>:<port>/rest (z.B. http://demo.openhab.org:8080/rest) und führt zu folgender Antwort:

http://demo.openhab.org:8080/rest/items
    http://demo.openhab.org:8080/rest/sitemaps
Lesender Zugriff

Für den lesenden Zugriff auf Items können folgende URIs mit HTTP-GET aufgerufen werden:

  • http:// <host>:<port>/rest/items – ruft die Liste aller Items ab (media-type: application/xml, application/json, application/x-javascript)
  • http:// <host>:<port>/rest/items/Anwesenheit – ruft ein einzelnes Item ab (media-type: application/xml, application/json, application/x-javascript)
  • http:// <host>:<port>/rest/items/Anwesenheit/state – ruft den konkreten Status eines Items ab (media-type: plain text)

Damit Nutzer des REST API möglichst ressourcenschonend über Statusänderungen informiert werden, wurde das Server-Push-Verfahren unter Zuhilfenahme des Atmosphere-Frameworks implementiert [8]. Clients können sich für Änderungen folgender Ressourcen registrieren:

  • ein einzelnes Item (oder eine Item-Gruppe)
  • ein Item-Status
  • eine Seite der Sitemap

Wann immer sich der Status eines Items, das Teil einer subskribierten Ressource ist, ändert, wird die fragliche Ressource in exakt der gleichen Syntax zurückgegeben, als wäre sie durch einen „normalen“ Request angefragt worden. Dieses Verhalten ist insbesondere für Clients sinnvoll, die sich auf die Seiten einer Sitemap subskribieren, weil sie so einen Refresh durchführen können, sobald sich der Status eines Items auf der aktuell angezeigten Seite geändert hat. Ebenfalls relevant ist das Verfahren bei der Integration von openHAB mit anderen z. B. IoT-Services, da diese aktiv über Änderungen informiert werden, anstatt selbständig pollen zu müssen. Die Nutzung der Server-Push-Technologien ist dabei übrigens denkbar einfach: Clients müssen lediglich in ihren Requests den HTTP-Header X-Atmosphere-Transport setzen.

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.