Sonnenaufgang - HUE / LightStrip

Begonnen von cRossi, 30 Dezember 2018, 21:00:03

Vorheriges Thema - Nächstes Thema

cRossi

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:

  • bri [default: 0]: bri-Wert des HUE-Device (wird kontinuierlich berechnet und verändert)
  • bri_time [default: 30]: Zeitintervall in Sekunden (s) für die Veränderung (= transitiontime), je höher desto länger dauert der Aufgang
  • bri_delta [default: 10]: Helligkeitsunterschied zwischen den Zeitintervallen (wird mit tranistiontime dynamisch berechnet und gesteuert)
  • bri_max [default: 254]: max. Helligkeit (muss größer als "bri" sein!)

  • hue [default: 0]: hue-Wert des HUE-Device (wird kontinuierlich berechnet und verändert)
  • hue_time [default: 60]: Zeitintervall in Sekunden (s) für die Veränderung (= transitiontime), je höher desto länger dauert der Aufgang
  • hue_delta [default: 500]: Farbunterschied zwischen den Zeitintervallen (wird mit tranistiontime dynamisch berechnet und gesteuert)
  • hue_max [default: 10000]: max. Farbe (muss größer als "hue" sein!) - geht vom roten Bereich in den Gelben

  • ct [default: 500]: ct-Wert des HUE-Device (wird kontinuierlich berechnet und verändert)
  • ct_time [default: 60]: Zeitintervall in Sekunden (s) für die Veränderung (= transitiontime), je höher desto länger dauert der Aufgang
  • ct_delta [default: 50]: Farbunterschied zwischen den Zeitintervallen (wird mit tranistiontime dynamisch berechnet und gesteuert)
  • ct_min [default: 300]: min. ct-Farbe (muss kleiner als "ct" sein!) - geht vom gelblichen in den weißen Bereich


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

RasPi 3B+
HM-MOD-RPI-PCB
FHEM