Hallo,
aktuell blende ich eine Birne über folgende Funktion ein/aus. Da gibt es sicherlich optimierungspotential, hat da jemand ev eine fertige Funktion für mich oder Anregungen?
sub FadeIn($)
{
my ($device) = @_;
return if($device eq "");
my $IsOpen = lc ReadingsVal("TradfriGW","state","closed");
my $State = lc ReadingsVal($device,"reachableState","1");
my $CurrDim = ReadingsVal($device,"dimvalue","10");
return if(($State ne "1")||($IsOpen ne "opened")||($CurrDim>90));
while($CurrDim<100) {
$CurrDim = $CurrDim+10;
fhem("set $device dimvalue $CurrDim");
fhem("sleep 0.1");
};
}
sub FadeOut($)
{
my ($device) = @_;
return if($device eq "");
my $IsOpen = lc ReadingsVal("TradfriGW","state","closed");
my $State = lc ReadingsVal($device,"reachableState","1");
my $CurrDim = ReadingsVal($device,"dimvalue","10");
return if(($State ne "1")||($IsOpen ne "opened")||($CurrDim<10));
while($CurrDim>0) {
$CurrDim = $CurrDim-10;
fhem("set $device dimvalue $CurrDim");
fhem("sleep 0.1");
};
}
mit den ganzen sleep die in deinem fall blockierend arbeiten blockierst du dein ganzes fhem. das ist nicht gut.
was du tun solltest:
- schauen ob das device um das es geht die möglichkeit bietet direkt anzugeben das langsam gedimmt werden soll
das geht z.b. bei homematic, bei hue, lightify, ---
bei tradfri geht es zumindest mit der version die ich gerade baue auch. mehr hier: https://forum.fhem.de/index.php/topic,96125.msg890934.html#msg890934 (https://forum.fhem.de/index.php/topic,96125.msg890934.html#msg890934)
- wenn das nicht geht musst du das sleep so verwenden das es nicht blockiert. beispiele gibt es hier im forum.
- eine möglichkeit wie das geht findest du z.b. hier: https://forum.fhem.de/index.php/topic,51906.msg436451.html#msg436451 (http://tps://forum.fhem.de/index.php/topic,51906.msg436451.html#msg436451)