FHEM Forum

Verschiedenes => Bastelecke => Thema gestartet von: MrTom am 12 August 2017, 21:57:53

Titel: Mysensors Dimmer Funktion für Dimmgeschwindigkeit
Beitrag von: MrTom am 12 August 2017, 21:57:53
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
Titel: Antw:Mysensors Dimmer Funktion für Dimmgeschwindigkeit
Beitrag von: dev0 am 12 August 2017, 22:21:06
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.
Titel: Antw:Mysensors Dimmer Funktion für Dimmgeschwindigkeit
Beitrag von: Beta-User am 17 August 2017, 07:40:05
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