FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: NeuFehm am 05 Januar 2016, 15:17:55

Titel: PERL in notify mit mehreren FHEM-Befehlen
Beitrag von: NeuFehm am 05 Januar 2016, 15:17:55
Ich bekomme es einfach nicht hin. :(

Sieht jemand gleich einen Fehler?
Relais1,2 ist für hoch und runter, hier zum Test mit Dummy-Lampen
t100 = Zeit zum vollständigen schließen


Rollo1.* {
my $Relais = "";
my $Relais1 = "Testlicht1";
my $Relais2 = "Testlicht2";
my $t100 = 10;
my $Status = ReadingsVal("Rollo1", "alterWert", 0);
my $Ziel = $EVENT;
my $Diff = ($Ziel-$Status);
my $AbsDiff = abs($Diff);
my $Laufzeit = $AbsDiff/100*$t100;
if ($Ziel == 100 || $Ziel == 0) {$Laufzeit=$t100}
if ($Diff < 0){
    $Relais = $Relais1;
    } else {
    $Relais = $Relais2;
    }
fhem "set $Relais on";
fhem "sleep $Laufzeit";
fhem "set $Relais off";
fhem "setreading Rollo1 alterWert $EVENT"
}
Titel: Antw:PERL in notify mit mehreren FHEM-Befehlen
Beitrag von: masterray57 am 05 Januar 2016, 15:21:36
Semikolon fehlt nach letztem Befehl. Gruss
Titel: Antw:PERL in notify mit mehreren FHEM-Befehlen
Beitrag von: NeuFehm am 05 Januar 2016, 15:49:29
Danke.... jetzt arbeitet schon mal was ;)
Allerdings nicht so, wie ich mag.
Ich vermute meine Befehle werden gleichzeitig ausgeführt,
und auch wieder nicht??? ;)
Hier der Eventmonitor mit meinen Kommentaren in Klammer
2016-01-05 15:33:36 ECMDDevice Testlicht2 on (richtig)
2016-01-05 15:33:38 ECMDDevice Testlicht2 off (sehr gut)
2016-01-05 15:33:38 dummy Rollo1 75 (der kommt zu spät)
2016-01-05 15:33:38 dummy Rollo1 alterWert: 75 (der richtig)
2016-01-05 15:33:38 ECMDDevice Testlicht2 on (das ist falsch)


Und hier nochmal die aktuelle Definition mit Semikolon ;)

Rollo1.* {
my $Relais = "";
my $Relais1 = "Testlicht1";
my $Relais2 = "Testlicht2";
my $t100 = 10;
my $Status = ReadingsVal("Rollo1", "alterWert", 0);
my $Ziel = $EVENT;
my $Diff = ($Ziel-$Status);
my $AbsDiff = abs($Diff);
my $Laufzeit = $AbsDiff/100*$t100;
if ($Ziel == 100 || $Ziel == 0) {$Laufzeit=$t100}
if ($Diff < 0){
    $Relais = $Relais1;
    } else {
    $Relais = $Relais2;
    }
fhem "set $Relais on";
fhem "sleep $Laufzeit";
fhem "set $Relais off";
fhem "setreading Rollo1 alterWert $EVENT";
}


Hier noch ein Hinweis aus dem Log:
WARNING: sleep without additional commands is deprecated and blocks FHEM

Offensichtlich stimmt was mit dem sleep nicht?
Titel: Antw:PERL in notify mit mehreren FHEM-Befehlen
Beitrag von: NeuFehm am 05 Januar 2016, 16:01:50
Hurra, hier das funktionierende notify:
Rollo1.* {
my $Relais = "";
my $Relais1 = "Testlicht1";
my $Relais2 = "Testlicht2";
my $t100 = 10;
my $Status = ReadingsVal("Rollo1", "alterWert", 0);
my $Ziel = $EVENT;
my $Diff = ($Ziel-$Status);
my $AbsDiff = abs($Diff);
my $Laufzeit = $AbsDiff/100*$t100;
if ($Ziel == 100 || $Ziel == 0) {$Laufzeit=$t100}
if ($Diff < 0){
    $Relais = $Relais1;
    } else {
    $Relais = $Relais2;
    }
fhem "set $Relais on";
fhem "sleep $Laufzeit; set $Relais off";
fhem "setreading Rollo1 alterWert $EVENT";
}