FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: cRossi am 30 Dezember 2018, 21:00:03

Titel: Sonnenaufgang - HUE / LightStrip
Beitrag von: cRossi am 30 Dezember 2018, 21:00:03
Hallo zusammen,
nach längerem lesen hier im Forum und mit Hilfe der div. Suchen bin ich nicht richtig fündig geworden was einer (für mich) vernünftig funktionierenden Lösung für eine Sonnenaufgangssimulation mit HUE und einem LightStrip nahe kommt.

Nach noch längeren probieren und lesen der div. Codeschnipsel bin ich nun bei folgender Lösung angekommen, welche zwar ca. 30 "at" ab dem Start erzeugt, aber dafür läuft der Sonnenaufgang auch schön gleichmäßig über einen Zeitraum von gut 25 min. Dafür werden Helligkeit und Farbe werden zeitlich gesteuert und können in ihren Startwerten angepasst werden und am Ende wird noch vom gelblichen in den weißen Bereich gewechselt (ct-Transition). Die "at" Befehle beginnen mit 'sa_' gefolgt vom Typ 'bri_', 'hue_' oder 'ct_' und einem Zähler '1'... ($count).

Beispielaufruf aus der Kommandozeile:
Zitat{sonnenaufgang("<HUEdevice>")}


Über ein "at" oder "DOIF" kann es dann regelmäßig aufgerufen werden.  :D


Den Code einfach in 99_myUtils.pm einfügen und wenn notwendig die Parameter noch nach Wunsch anpassen.

Parameter:


sub sonnenaufgang($) {
my ($device) = @_;
my $count = 0;

my $bri = 0;
my $bri_time = 30;
my $bri_delta = 10;
my $bri_max = 254;

my $hue = 0;
my $hue_time = 60;
my $hue_delta = 500;
my $hue_max = 10000;

my $ct = 500;
my $ct_time = 60;
my $ct_delta = 50;
my $ct_min = 300;

my $time = time();
my $HHMMSS = POSIX::strftime("%H:%M:%S", localtime(time()));

fhem("set $device sat 254 : hue $hue : bri $bri");

my $bri_timer = $time + $bri_delta;
while($bri < $bri_max) {
$count = $count + 1;
$HHMMSS = POSIX::strftime("%H:%M:%S", localtime($bri_timer));
fhem("define sa_bri_$count at $HHMMSS set $device bri $bri : transitiontime $bri_time");
$bri = $bri + $bri_delta;
$bri_timer = $bri_timer + $bri_time;
}

my $hue_timer = $time + $bri_delta * 1.5;
while($hue < $hue_max) {
$count = $count + 1;
$HHMMSS = POSIX::strftime("%H:%M:%S", localtime($hue_timer));
fhem("define sa_hue_$count at $HHMMSS set $device hue $hue : transitiontime $hue_time");
$hue = $hue + $hue_delta;
$hue_timer = $hue_timer + $hue_time;
}

my $ct_timer = $hue_timer;
while($ct > $ct_min) {
$count = $count + 1;
$HHMMSS = POSIX::strftime("%H:%M:%S", localtime($ct_timer));
fhem("define sa_ct_$count at $HHMMSS set $device ct $ct : transitiontime $ct_time");
$ct = $ct - $ct_delta;
$ct_timer = $ct_timer + $ct_time;
}
}



Viel Spaß damit und guten Rutsch ins Neue Jahr
cRossi