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.

Schreibe eine Antwort

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> 

Erforderlich