Wer bereits einen Raspberry Pi mit der RaZberry Erweiterung besitzt, wird wahrscheinlich auch den Z-Way Server verwenden. Alles was sich in ein Z-Wave Netzwerk einbinden lässt, kann relativ gut mit dieser Kombination gesteuert werden. Wenn es jetzt allerdings um die die Beleuchtung geht, verwenden viele das Hue System von Phillips. Und hier kommt das erste Problem, Es existiert leider keine fertige App um die Philips Hue Bridge in das Z-Way System einzubinden. Deshalb habe ich hier einen gut funktionierenden Workaround gefunden.
An dieser Stelle gehe ich davon aus, dass die Hue Bridge bereits eingerichtet ist, die Lampen sich bereits über die App steuern lassen und natürlich das ein Raspberry Pi mit RaZberry Module und installiertem Z-Way Server zur Verfügung steht. Im ersten Schritt benötigen wir erstmal einen Benutzer auf unserer Hue Bridge. Dazu rufen wir in einem Browser die IP-Adresse der Bridge auf. Da die Hue Bridge wahrscheinlich über DHCP ins Netzwerk eingebunden wurde, finden wir die IP-Adresse am schnellsten im DHCP Server.
http://<bridge ip address>/debug/clip.html
Mit diesem Webinterface können wir nun eine erste Abfrage an die Hue Bridge stellen.
URL:
/api
Message Body:
{"devicetype":"my_hue_app#iphone peter"}
Method:
POST
Die Fehlermeldung an dieser Stelle besagt, dass kein Benutzer angelegt werden konnte weil der Button an der Bridge nicht gedrückt wurde. Also jetzt den Button an der Bridge drücken und das Kommando wiederholen.
Den langen Benutzernamen bei der Ausgabe benötigen wir bei allen Anfragen an die Bridge. Mehr Infos dazu sind hier zu finden.
Die Bridge ist nun vorbereitet und wir können alles weitere auf dem Raspberry Pi fortsetzen. Wie erwähnt, existiert keine App für das Philips Hue. Deshalb bauen wir uns hier ein paar Shell Skripte die später von unserem Z-Way Server ausgeführt werden sollen. Für jede Lampe benötigen wir drei Skripte – Einschalten, Ausschalten und Statusabfrage. In diesem Beispiel heißen diese:
- light1On.sh
- light1Off.sh
- light1Check.sh
Und das ganze auch noch als light2… und light3… usw.
Kommen wir nun zu den Skripten. Wir beginnen mit dem lightxOn.sh Skript.
#!/bin/bash curl --request PUT --data "{\"on\":true}" http://10.0.1.14/api/<username>/lights/1/state
Den Wert “username” ersetzen wir noch mit der Ausgabe des Benutzernamens aus der vorherigen Ausgabe und speichern das ganze als light1On.sh. Die beiden anderen Skripte werden ähnlich erzeugt, nur die Zahl in der URL muss jeweils auf 2 bzw. 3 geändert werden. Wir sollten jetzt drei Skripte haben:
- light1On.sh
- light2On.sh
- light3On.sh
Wir wollen die Lampen ja auch noch ausschalten. Hierfür legen wir wieder drei Skripte an, die lediglich statt einem true ein false in den Daten haben.
#!/bin/bash curl --request PUT --data "{\"on\":false}" http://10.0.1.14/api/<username>/lights/1/state
Nun haben wir wieder drei Skripte:
- light1Off.sh
- light2Off.sh
- light3Off.sh
Die wichtigsten Funktionen haben wir bereits, allerdings möchten wir auch den Status abfragen können um auch zu Wissen, ob die Lampen An oder Aus sind. Auch hierfür benötigen wir drei Skripte. Das erste nennen wir light1Check.sh.
#!/bin/bash LIGHTSTAT=$(curl -s --request GET http://10.0.1.14/api/<username>/lights/1/) if [ "${LIGHTSTAT:15:4}" = "true" ]; then echo on else echo off fi
Bei den weiteren Skripten ändern wir lediglich wieder die Zahl in der URL und speichern die Skripte. Nun haben wir wieder drei Skripte:
- light1Check.sh
- light2Check.sh
- light3Check.sh
Alle neun Skripte kopieren wir nun auf unseren Raspberry in das Verzeichnis /opt/z-way-server/automation. Die Skripte müssen noch mit dem folgenden Kommando ausführbar gemacht werden.
chmod +x light*
Das ganze sollte in etwa wie folgt aussehen.
Damit diese Skripte auch vom Z-Way System ausgeführt werden dürfen, müssen wir die Skripte noch in die Datei .syscommands eintragen. Was dann wie folgt aussehen sollte:
Bevor wir die Skripts in unseren Z-Way Server einbinden, sollten wir diese auch mal testen.
pi@raspberry: ./light1On.sh
Einschalten von Lampe 1.
pi@raspberry: ./light1Off.sh
Ausschalten von Lampe 1.
Falls die Skripte mit einer Fehlermeldung antworten, ist wahrscheinlich curl noch nicht auf dem Raspberry installiert. Das können wir mit dem folgenden Kommando nachholen:
sudo apt-get install curl
Danach sollte alles problemlos funktionieren.
Die weitere Konfiguration machen wir nun am Webinterface unseres Z-Way Servers. Zur Erinnerung, im lokalen Netzwerk erreichen wir diesen über die IP-Adresse oder diesen Link. Über das Zahnrad auf der rechten Seite wählen wir den Punkt Apps. Dort fügen wir dann die App Code Device mit einem Klick auf das Plus hinzu. Falls die App nicht angezeigt wird, hilft es den Filter aus „Alle Apps“ zu setzen.
Sobald die Anwendung installiert und aktiviert ist, können wir für jede unserer Lampen einen Schalter erstellen. Diesem weisen wir dann jeweils die Skripte für On, Off und Get Value zu.
Damit später beim Verwenden der Schalter auch der Status aktualisiert wird, wählen wir noch “Update Value on Action” aus.
Damit haben wir drei Schalter mit denen wir unsere Lampen über den Z-Way Server schalten können. Wer Spaß daran hat, kann auch noch Farbänderungen oder vorgefertigte Szenen in die Skripte einbauen.
Für die ganz faulen unter euch, habe ich alle Skripte zum Download vorbereitet. Viel Spaß damit.
Philips Hue und PowerShell
Unabhängig von einer Z-Wave Installation, können wir die Hue API auch mit Powershell von einen Windows Rechner direkt ansprechen. Das Prinzip ist das gleiche wie vorher über curl unter Linux. Nachfolgend ein kurzes Beispiel um den Status einer Lampe abzufragen:
# IP Adresse der Hue Bridge
$ip = "192.168.x.x"
# Username bzw. API Key
$apiUsername = "xxxxxxxx"
$hueState = Invoke-RestMethod -URI http://$ip/api/$apiUsername/lights/1/ -ContentType "application/json" -Method Get -ErrorAction SilentlyContinue
write-host $hueState.state.reachable
write-host $hueState.state.on
Für das Monitoring von Hue Lampen ganz hilfreich, aber wir wollen die Lampen ja auch schalten. Hier noch ein Beispiel um einzelne Lampen an- und auch wieder auszuschalten.
# IP-Adresse der Hue Bridge
$ip = "192.168.x.x"
# Username bzw. API Key
$apiUsername = "xxxxxxxx"
# Lampe 1 An
$body = '@{"on"=true}'
$body = $body -replace "^@", ""
$body = $body -replace "=", ":"
$body = $body -replace ";", ","
$body
$hueSwitch = Invoke-RestMethod -uri http://$ip/api/$apiUsername/lights/1/state/ -body $body -ContentType "application/json" -Method PUT -ErrorAction SilentlyContinue
# Lampe 1 Aus
$body = '@{"on"=false}'
$body = $body -replace "^@", ""
$body = $body -replace "=", ":"
$body = $body -replace ";", ","
$body
$hueSwitch = Invoke-RestMethod -uri http://$ip/api/$apiUsername/lights/1/state/ -body $body -ContentType "application/json" -Method PUT -ErrorAction SilentlyContinue
Ich gehe fest davon aus, dass euch noch weitere Use-Cases einfallen.
Cool, genau das habe ich gesucht. Jetzt wo ich das ganze auch mit Powershell machen kann, ist das auch eine Überlegung. Danke.
Hallo!
Ich habe mit Begeisterung Ihren Beitrag gelesen und ihn, als Raspberry/Smart Home Newbie, gleich versucht umzusetzen. Leider scheint der im Z-Way erstellte Schalter für meine Hue Lampe nicht richtig zu funktionieren. Denn weder Status noch An/Aus funktionieren.
Wenn ich über putty den Befehl ausführe kommt folgendes:
pi@raspberrypi:~ $ bash /opt/z-way-server/automation/light1On.sh
/opt/z-way-server/automation/light1On.sh: line 2: $’\r‘: command not found
[{„success“:{„/lights/1/state/on“:true}}]
Schaltet die Lampe sich an…
pi@raspberrypi:~ $ bash /opt/z-way-server/automation/light1Off.sh
/opt/z-way-server/automation/light1Off.sh: line 2: $’\r‘: command not found
[{„success“:{„/lights/1/state/on“:false}}]
Und aus…
pi@raspberrypi:~ $ bash /opt/z-way-server/automation/light1Check.sh
/opt/z-way-server/automation/light1Check.sh: line 2: $’\r‘: command not found
/opt/z-way-server/automation/light1Check.sh: line 4: $’\r‘: command not found
/opt/z-way-server/automation/light1Check.sh: line 13: syntax error near unexpected token `fi‘
/opt/z-way-server/automation/light1Check.sh: line 13: `fi‘
Und das sagt er mir bei check.
Irgendwo scheint da also ein Fehler zu sein. Allerdings einer der mich als Anfänger etwas überfordert 😉
Ich wäre über jede Hilfe dankbar 🙂
Gruß
Uwe
Das liegt mit Sicherheit an einem nicht installierten curl (steht im Artikel). Oder du hast mit copy & paste die Skripte aus dem Blog-Artikel übernommen, dann könnten ungewünschte Zeichen mit in die Skripte gekommen sein.
Versuche mal, die Skripte mal in den vi zu Pasten und entferne alles unbekannte an Zeichen (auch Leerzeichen).
Also im Bezug auf curl ist es laut System auf dem neusten Stand:
pi@raspberrypi:~ $ sudo apt-get install curl
Reading package lists… Done
Building dependency tree
Reading state information… Done
curl is already the newest version (7.52.1-5+deb9u8).
0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.
Skripte habe ich kopiert das stimmt. Der Downloadlink funktioniert leider nicht, dann könnte ich die mal vergleichen!
chmod +x light1On.sh
chmod +x light1Off.sh
chmod +x lightCheck.sh
Habe ich im /opt/z-way-server/automation ausgeführt.
Danach im gleichen Ordner…
cat .syscommands /opt/z-way-server/automation/light1On.sh
/opt/z-way-server/automation/light1Off.sh
/opt/z-way-server/automation/light1Check.sh
Wenn ich dann ./light1On.sh im pi home Verzeichnis eingebe funktioniert der Befehl nicht…
Entschuldige meine Unwissenheit und schon mal vielen Dank für deine Bemühungen einem Neuling zu helfen.
Gruß
Uwe
Habe den Download-Link mal aktualisiert. Lade Dir mal meine Skripte runter und versuche es damit mal.
Ok klappt alles über putty. Keine Fehlermeldungen mehr.
Lag wirklich an den ganzen Leerzeichen die durch das kopieren 1:1 übernommen wurden.
Allerdings klappt es im Z-Way immernoch nicht mit dem Schalter.
Code Device finde ich nicht, ich denke das es jetzt JS Code heißt?!
Die Einstellungen bzw URLs aus den Screenshots habe ich 1:1 so übernommen…
Er sagt im z-way:
Fehler beim Ausführen des Befehls:Error: this command is denied by policy
Problem gelöst.
Befehle standen nicht korrekt in der .syscommands
Läuft 🙂
Hallo Thomas,
Deine Beschreibung ist sehr ausführlich und hilfreich.
Leide habe ich ein Problem und möchte Dich um Hilfe bitten.
Die Skripte laufen bei mir über den PuTTY problemlos.
Nur bei der Definition des Code Device bekomme ich bei „On“ ==> This command is denied by policy und be „Off“ ==> Unexpected Token Illegal
In Deiner Beschreibung der cat.syscommands sieht es so aus, als wäre da ein Blank nach dem cat, was eigentlich nicht sein kann, oder? Hast Du eine Idee was ich falsch mache? Eine Doku zu cat.syscommands ist im Netz nicht zu finden
Besten Dank
Gruß
Axel
P.S. Natürlich möchte ich Dir auch noch ein gutes Neues Jahr wünschen .
Hallo Axel,
Dir auch ein gesundes neues Jahr. Tatsächlich gehört dort ein Leerzeichen hin. CAT ist das Kommando und .syscommands die Datei. Stelle bitte sicher, dass Du nicht einfach alles per Copy&Paste übernimmst. Gerade bei Windows Systemen kopierst Du dann auch unsichtbare Zeichen. Hast Du die Skripte heruntergeladen oder einfach nur per C&P übernommen?
Gruß
Thomas
Hallo Thomas,
Ich habe deine Lösung nun Schritt für Schritt umgesetzt. Soweit finktioniert auch fast alles. Die Lampen gehen an und aus. Allerdings funktioniert die Rückmeldung bei mir nicht mehr, wenn ich einen zyklischen Intervall einstelle. Das Symbol wechselt kurz auf grün und beim aktualisieren wieder auf grau, obwohl die Lampe an ist.
Unter Events steht dann Lichtname : 0 , on
Laut einem anderem Forum muss man dann hinter dem Aufruf noch [1] schreiben:
system(„/opt/z-way-server/automation/Light2OGCheck.sh“)[1];
Leider funktioniert aber auch dies nicht.
Hast du noch eine Idee?
Gruß Andreas
Sorry, ich arbeite schon lange nicht mehr mit dem Z-Way Gateway, deshalb kann ich es auch nicht nachvollziehen. Aber die „Check“ Skripte fragen ja nur den Status der Lampe ab, mehr nicht. Das dauerhafte Abfragen des Status erledigt Z-Way selbst. Hast Du alle Skripte auch entsprechend berechtigt? Andernfalls ist eventuell durch ein Update des Z-Way Servers diese Funktion des Abfragens irgendwo anders.