Wie es manchmal so ist, kann ein einziges Ereignis das ganze Leben verändern. So auch die Geburt meines ersten Kindes. Das ist mit der Grund dafür, warum das basteln aktuell eine etwas niedrigere Priorität bekommen hat.

Aber natürlich gibt das Kind hin und wieder auch Anlass etwas am Haus zu verbessern. Denn aktuell ist Schlaftrainig angesagt und immer wenn abrupt das Nachttischlicht ausgeschaltet wird, ist erstmal “alarm“.

Daher war die Überlegung, das Nachtlicht nicht plötzlich auszuschalten sondern langsam auszudimmen – ähnlich wie bei einem Sonnenuntergang. In der Hoffnung, dass das Kind dadurch nicht erschrickt und das einschlafen leichter fällt.

Natürlich war schon eine kleine Lampe mit LED Leuchtmittel, welches man sogar dimmen könnte, vorhanden und an einer Steckdose angeschlossen. Und tatsächlich sind an meinem Dimmaktor noch zwei Anschlüsse frei. Jedoch hätte ich dazu diese eine schaltbare Steckdose so umverdrahten müssen, das sie eben nicht mehr über einen Schaltaktor läuft sondern über den Dimmaktor. Es wäre die einzige im Haus und irgendwie fühlte sich das nicht richtig an. Zumal ich auch alle anderen Steckdosen im Zimmer auf eine andere Phase (des 5×1.5 welches die Steckdosen speist) hätte umverdrahten müssen – das war mir zu aufwändig.

Stattdessen wollte ich die gleiche Technik nutzen, die auch schon im Garten eingesetzt wird: Zigbee.

Dann habe ich eine Wippe am Lichtschalter so programmiert das die 2-Kanal-Bedienung aktiviert wird, so dass ich einmal einen kurzen und einen langen Tastendruck auslösen kann. Die Idee:
– Der kurze Tastendruck fährt überall im Obergeschoss die Rollos runter, schaltet diverse Lichter aus und bereitet alles zum “Ins Bett gehen” vor.
– Der lange Tastendruck startet dann den Dimmvorgang. Es soll innerhalb von 5 Minuten von der maximalen Helligkeit auf “aus” gedimmt werden.

Meinem Programmierprinzip folgend habe ich in der ETS “nur” Kommunikationsobjekte für die beiden Tastenaktionen gemacht und den Rest mache ich dann im Homeserver durch eine kleine Logik:

Logik im Gira Homeserver zur Steuerung des Sonnenuntergangslichts
Logik zur Steuerung des Sonnenuntergangslichts

Bei der Ausgangsbox “geht ins Bett” werden wie beschrieben Rollos herunter gefahren und die Lichter im Flur ausgeschaltet.

Bei der Ausgangsbox “licht dimmen” bzw “licht reset” wird über “Web-Seiten abfragen” eine URL aufgerufen. Denn schon alleine aus Entwicklungs- und Testgründen (den Homeserver muss man ja bei jeder Änderung neu starten) wollte ich den ganzen Dimmvorgang nicht über Sequenzen oder ähnliches steuern, sondern einfach nur der deCONZ-API mit einem Aufruf mitteilen “stelle das Licht so und so ein und nimm dir dafür 300 Sekunden Zeit”. Das habe ich dann als PHP-Script gelöst, welches einfach auf meinem NAS liegt und auf Knopfdruck vom Homeserver aufgerufen wird.

Aufruf einer Webseite im Gira Homeserver 2
Aufruf einer Webseite im Homeserver 1
Aufruf einer Webseite im Gira Homeserver 2
Aufruf einer Webseite im Homeserver 2

Ich werte im Script noch einen GET-Paramter aus, um die Lampe auch vom gedimmten Zustand wieder auf “ungedimmt” wechseln zu können. Hier mein Script.

<?php
	header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
	header("Cache-Control: post-check=0, pre-check=0", false);
	header("Pragma: no-cache");

	class ApiLightStateSet {
		public $bri = 0;
		public $ct = 0;
		public $on = true;
		public $colormode = "ct";
		public $transitiontime = 0;
	}
	
	$apiPath = "http://IP-DES-DECONS-GATEWAYS:8080/api";
	$apiKey = "APIKEY";
	$uid = "LAMPEN-UID";
	
	$apiPath .= "/" . $apiKey . "/lights/" . $uid . "/state";
		
	$action = $_GET["a"];
	if ($action == "dim")
	{		
		setBrightness(254, 362, 0);
		sleep(2);
		setBrightness(0, 362, 0);
		sleep(2);
		setBrightness(254, 362, 0);
		sleep(2);
		setBrightness(0, 500, 3000);
	}
	else if ($action == "res")
	{
		setBrightness(254, 362, 0);
	}
	
	function setBrightness($bri, $ct, $transitiontime)
	{
		$data = new ApiLightStateSet();
		$data->on = ($bri > 0);
		$data->bri = (int)$bri;
		$data->ct = $ct;
		$data->transitiontime = (int)$transitiontime;
		sendApiData($data);
	}
	
	function sendApiData($data)
	{
		global $apiPath;
		if ($data)
			$jsonData = json_encode($data);
		
		$curl = curl_init();
		curl_setopt($curl, CURLOPT_URL, $apiPath);
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
		curl_setopt($curl, CURLOPT_POSTFIELDS, $jsonData);
		curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Content-Length: ' . strlen($jsonData)));
		$response = curl_exec($curl);		
		if ($response)
		{
			$json = json_decode($response);
			var_dump($json);
		}
		curl_close($curl);
	}
?>

Wie man erkennen kann wird beim starten des Dimmens zuerst die Lampe einmal kurz ein- und ausgeschaltet. Das ist die optische Rückmeldung, dass das Dimmen gestartet wurde.

Ergebnis: Das Licht geht nun auf Knopfdruck von hellweiß auf ein ganz dunkles warmweiß und schließlich aus. Das ganze in einer Zeit von ca. 5 Minuten.
Und so wie es aussieht, hilft es dem Kind beim einschlafen.

Wie schon oft beschrieben statte ich meinen Garten mit einer Ambiente-Beleuchtung auf Zigbee Basis aus.

Hier habe ich den Grillpavillon und die Teichbeleuchtung beschrieben.

In diesem Beitrag soll es nun um die automatische Steuerung gehen, denn das was die deCONZ App so kann, reicht mir leider nicht.

Da ich ja schon einen Rasperry für deCONZ in Betrieb habe, werde ich eine Webseite auf diesem laufen lassen und dann über REST-API mit deCONZ sprechen.

Ziel ist es, das ich “Animationen” abspielen kann. Also Farbübergänge, Helligkeitsübergänge, usw. Hatte hier ja schon mal ein Video gepostet. Es ist ja immerhin Ambiente-Licht. 🙂

Licht Animationen

Ich habe mich also hingesetzt und ein kleines PHP-Projekt mit Symfony geschrieben. Die Bedienung ist aufs Handy ausgelegt und aktuell ist die Funktion nur ganz simpel (und die Oberfläche ist noch nicht wirklich schön).

  • Es können mehrere “Szenen” erstellt werden
  • Innerhalb einer Szene können beliebige Lampen sein
  • Jede Lampe in einer Szene kann verschiedene “Aktionen” ausführen
  • Zwischen den Aktionen können beliebige Zeitintervalle vergehen
  • Am Ende einer Szene wird diese wiederholt, oder zur nächsten Szene gewechselt

Und dann kam wieder mal alles anders, als geplant

Denn der Raspberry, der die deCONZ App ausführt hat seine SD-Karte zerlegt, und damit ist die ganze Arbeit dahin.
Da ich nicht wieder auf SD-Karten setzen will, bringe ich jetzt allen PIs bei vom Netzwerk zu booten (genauer von meinem QNAP NAS) und setze dann die deCONZ App wieder auf.

Meine Steuersoftware werde ich dann übrigens nochmal komplett neu machen, und zwar als Blazor Projekt. Also komplett in C# – doch das ist ein anderer Beitrag…

Nachdem ich bei den letzten Versuchen Probleme mit der mechanischen Stabilität der Platine/MOSFET/Kupferschicht hatte, habe ich mir für die Außenbeleuchtung nun etwas anderes überlegt: Zigbee!

Stein des Anstoßes war mein neuer Teich, den ich schön beleuchten wollte. Erdspießlampen gibt es genug aber wenn man das RGBW steuerbar haben möchte, dann wirds teuer.
Also dachte ich mir ich kaufe günstige Lampen ohne Leuchtmittel und setze eine GU10 RGBW Birne rein, die ich dann über den Bus steuern kann. Sowas selbst zu bauen ist sicher möglich, aber aufgrund des geringen Platzes bestimmt fummelig, so dass ich hier auf fertige Technik setzen werde.
Und das, was im Moment scheinbar am weitesten verbreitet ist, ist Zigbee.
Ich habe mir also 4 Erdspieß-Lampen und 4 RGBW Zigbee GU10 Leuchtmittel bestellt.

Als Basis möchte ich einen Raspberry mit dem Conbee 2 einsetzen. Das ist ein USB Stick, mit dem man den für Zigbee nötigen Controller erzeugen kann. Und es gibt eine REST-API um andere Systeme anzubinden.

Neben den Teichlampen werde ich die ganze Ambiente-Beleuchtung des Gartens mit Zigbee lösen, also auch die Beleuchtung des Grillpavillons mit einem Zigbee Controller umsetzen. Diese gibt es fertig und erschwinglich zu kaufen und sie passen in meine Unterverteilung beim Pavillon.

Installation Conbee

Ich habe also einen rumliegenden Raspberry 3 genommen und erstmal raspian installiert. Danach die grafische Benutzeroberfläche deaktiviert (raspi-config) und lt. Anleitung den Stick bzw. die Software “deCONZ” installiert.

Danach die Software mittels

deCONZ -platform minimal --http-port=8080

gestartet und schon konnte ich mit einem Browser darauf zugreifen, meine Lampen anlernen und danach auch sofort bedienen.

deCONZ Lampensteuerung

Ich habe den Start der Software so umgesetzt, das es bei Systemstart automatisch passiert. Dafür nutze ich das Tool “screen”.

nano /etc/rc.local

#Start Deconz
screen -d -m deCONZ -platform minimal --http-port=8080

Ein paar wichtige Hinweise:
Die sqlite Datenbank für deCONZ liegt im Homeverzeichniss des Benutzers, der die Anwendung startet (bei mir root). Also kann sie mit sqlite3 /root/.local/share/dresden-elektronik/deCONZ/zl1.db editiert werden. Ein Passwort für die Datenbank wird nicht benötigt.
Dort werden z.B. die Lampen, aber auch authentifizierte Dritthersteller-Apps gespeichert. (Wichtig, wenn man so eine App mal wieder löschen will. Das geht über das Frontend aktuell nicht).

Anbindung an KNX

Leider ist es so, das KNX nicht so viel von Zigbee kennt. Selbst RGB(w) Leuchtmittel sind scheinbar “nicht mal eben” eingerichtet. Eigentlich sehr schade.
Aber ich möchte natürlich in meinem Garten auch etwas “besonderes” machen und stelle mir tatsächlich “animiertes” Licht vor. Also vielleicht kleine Effekte, aber zumindest nicht immer die gleiche Farbe, sondern leicht variierende Farbtöne, schön sanft über geblendet.
Bei meinen Recherche nach entsprechender Technik bin ich über dieses Produktvideo bei Youtube gestolpert:

Nicht ganz “so fett”, aber schon so ähnlich möchte ich es haben.

Wegen der oben genannten Punkte scheint mir also eine Steuerung über KNX bzw. den Gira Quadclient nicht (sinnvoll) möglich zu sein. Ich werde also selbst etwas entwickeln müssen, aber bis dahin kann ich zumindest über “deCONZ” die Lampen über Funk/Zigbee steuern.