Hallo zusammen
ich habe mir in meine Haussteuerung nun auch noch einen Mysensors Dimmer geleistet... :)
Nun würde ich gerne das Dimmern über eine gewisse Zeit einstellen. Ich kenne das von WifiLight-Devices, bei denen man schön das Rampup mitgeben kann.
Ich hab mich mal "laienhaft" an einen Perlskript herangewagt, der soweit funktioniert:
##############################################
# LED dimmer
#
sub LEDdimdown(@)
{
my ($ledName, $time, $target) = @_;
my $r1 = ReadingsVal($ledName,"percentage",100);
my $delay = int($time*10);
if ($target < $r1) {
my $delay = int($time*1000000/($r1-$target));
for(my $i=$r1; $i>=$target; $i--) {
fhem "set $ledName precentage $i;";
usleep($delay);
};
};
return undef;
}
sub LEDdimup(@)
{
my ($ledName, $time, $target) = @_;
my $r1 = ReadingsVal($ledName,"percentage",100);
my $delay = int($time*10);
if ($target > $r1) {
my $delay = int($time*1000000/($r1-$target));
for(my $i=$r1; $i<=$target; $i++) {
fhem "set $ledName precentage $i;";
usleep($delay);
};
};
return undef;
}
Jedoch besteht hier das Problem, nehm ich mal an, dass die eingebaute usleep-Funktion die gesamte FHEM-Installation "anhält". So scheint es zumindest. D.h. wenn ich 30 Sekunden als $time-Wert übergebe, geht im FHEM 30 Sekunden nix.
Gibts da einen elegantere Lösung?
Gruss
MrTom
sleep/usleep blockiert. Du könntest das timerbasiert lösen, aber auch das würde ich nicht auf FHEM Seite machen, sondern in der Controller Firmware.
Stimme dev0 voll zu.
Sofern Du den Standard MySensors-Sketch nutzt: Du kannst zum einen das delay im code selbst länger einstellen (aktuell: 10ms pro Prozent). Das wäre dann aber wieder fest einprogrammiert.
Wenn Du das von FHEM-Seite einstellen können willst, könntest Du noch ein S_CUSTOM-Child präsentieren und darüber dann (z.B. V_VAR1) die Dimmzeit pro Prozent ändern, erfordert aber natürlich einiges an Code-Anpassung.
Sofern Du dazu Hilfe benötigst, bitte den Thread ins passende Unterforum verschieben.
Gruß, Beta-User