Ich versuche mich gerade an DOIF steh aber irgendwie auf der Leitung
define z_advent DOIF ([06:00-22:00] and [ReadingsVal( "BM_Bewegungsmelder", "brightness", "") <= 100] and Advent==1) { fhem ("set advent on") }
DOELSEIF ([06:00-22:00] and [ReadingsVal( "BM_Bewegungsmelder", "brightness", "") > 100] and Advent==1) { fhem ("set advent off") }
DOELSEIF ([22:00]) (set advent off)
wenn ich dies über das Webinterface eingeben kommt:
z_advent DOIF: Wrong timespec ReadingsVal("BM_Bewegungsmelder","brightness","")<=100: either HH:MM:SS or {perlcode}: ReadingsVal("BM_Bewegungsmelder","brightness","")<=100
Zur Erkärung :
advent ist ein Dummy der die Zustände 0 und 1 annehmen kann
1 soll gesetzt werden wenn
Das Ganze zwischen 06:00 und 22:00
und wenn der HM Bewegungsmelder ein Brightness reading von <= 100 liefert und eine Berechnung der Variablen Advent 1 zugewiesen hat
0 soll gesetzt werden wenn
auch zwischen 06:00 und 22:00
und wenn der HM Bewegungsmelder ein Brightness reading von >100 liefert und eine Berechnung der Variablen Advent 1 zugewiesen hat
ansonsten wird um 22:00 immer der Wert 0 zugewiesen
Wo ist da der Knoten ?
ich würde das so machen:
define z_advent DOIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] <= 100 and Advent==1) ("set advent on")
DOELSEIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] > 100 and Advent==1) ("set advent off")
DOELSEIF ([22:00]) (set advent off)
Den Syntax frisst fhem jetzt aber es kommt eine Fehlermeldung im Log
2015.11.04 19:47:23 2: z_advent: perl error in condition: DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and
ReadingValDoIf('BM_Bewegungsmelder','brightness','') <= 100 and Advent==1:
Bareword "Advent" not allowed while "strict subs" in use at (eval 267039) line 1.
Ist Advent eine sub aus 99_myUtils.pm ?
wenn ja, mit {} versuchen...
define z_advent DOIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] <= 100 and {Advent==1}) ("set advent on")
DOELSEIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] > 100 and {Advent==1}) ("set advent off")
DOELSEIF ([22:00]) (set advent off)
Ja, es ist die sub aus
http://forum.fhem.de/index.php/topic,42209.0.html (http://forum.fhem.de/index.php/topic,42209.0.html)
aber auch mit den Klammern tritt der Fehler auf
Ich bin nun am Ende von meinem Latein, da ich erst mit Perl angefangen habe
schade...
im Ausführungsteil bei DOIF muss perl-Code in { }.
Beim Ereignisteil scheint das wohl nicht zu funktionieren.
steht jetzt auch erstmal auf dem Schlauch :(
Ich weiss dass es an dem use strict in der myUtils liegt, aber weiss nicht wie ich das zum Laufen bringe.
vielleicht hilft dieser Beitrag weiter...
http://forum.fhem.de/index.php?topic=42264.0 (http://forum.fhem.de/index.php?topic=42264.0)
Zitat von: raspklaus am 05 November 2015, 11:47:14
Ja, es ist die sub aus
http://forum.fhem.de/index.php/topic,42209.0.html (http://forum.fhem.de/index.php/topic,42209.0.html)
OK das wußte ich nicht.. da würde ich auch nur probieren..
hast du es so schon mal probiert:
([{Advent==1}])
moon,
dann kommt diese Meldung:
2015.11.05 12:19:33 2: z_advent: perl error in condition: DOIF_time($hash,$hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"") and ReadingValDoIf('BM_Bewegungsmelder','brightness','') > 100 and {Advent==1}: Month '12' out of range 0..11 at ./FHEM/99_myUtils.pm line 231.
ich glaube so...
((Advent) == 1)
define z_advent DOIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] <= 100 and ((Advent)==1))) ("set advent on")
DOELSEIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] > 100 and ((Advent)==1))) ("set advent off")
DOELSEIF ([22:00]) (set advent off)
mit diesem Erfolg:
z_advent DOIF: expected DOELSEIF or DOELSE: ) ("set advent on") DOELSEIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] > 100 and ((Advent)==1))) ("set advent off") DOELSEIF ([22:00]) (set advent off
define z_advent DOIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] <= 100 and ((Advent)==1))) (set advent on)
DOELSEIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] > 100 and ((Advent)==1))) (set advent off)
DOELSEIF ([22:00]) (set advent off)
ohne die " " bei den set...
aber nun .. :D
nun ......
_advent DOIF: expected DOELSEIF or DOELSE: ) (set advent on) DOELSEIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] > 100 and ((Advent)==1))) (set advent off) DOELSEIF ([22:00]) (set advent off)
???
zu viele Klammern )
define z_advent DOIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] <= 100 and ((Advent)==1)) (set advent on)
DOELSEIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] > 100 and ((Advent)==1)) (set advent off)
DOELSEIF ([22:00]) (set advent off)
define z_advent DOIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] <= 100 and [{Advent}] eq "1") (set advent on)
DOELSEIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] > 100 and [{Advent}] eq "1") (set advent off)
DOELSEIF ([22:00]) (set advent off)
Versuch das mal. Vom Prinzip ist immer in [] das was geprüft werden soll und da hinter kommt der Operator und dann der Wert auf den es geprüft wird.
Fehler hat sich wieder mal geändert:
z_advent DOIF: the at function "Advent" must return a timespec and not Month '12' out of range 0..11 at ./FHEM/99_myUtils.pm line 231.
.: {Advent}
Hier mal die sub:
sub Advent() {
my ($Sekunde, $Minute, $Stunde, $Monatstag, $Monat, $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
my $Dez=0;
my $adv=0;
if($Monat<1) {
if ($Monatstag<7) {$adv=1;}
$Dez=-1;
}
if($Monat>9) {
my $t = timelocal(0, 0, 0, 25, 12, $Jahr-$Dez);
my $wd = (localtime $t)[6];
$t = timelocal(0, 0, 0, 25-$wd-1, 12, $Jahr-$Dez);
my $dt2 = DateTime->new(
year => $Jahr-$Dez,
month => 12,
day => 25-$wd-1,
hour => 0,
minute => 0,
second => 0
);
$dt2->subtract(days => 28);
if($dt2->months()==11) {
if($dt2->days >= $Monatstag ) {$adv=1;}
} else {
if($Monat==11) {$adv=1;}
else {if($Monatstag>=$dt2->month()) {$adv=1;}}
}
}
readingsSingleUpdate($defs{"dmy_DateTime"},"Advent",$adv,1);
#return 0;
return $adv;
}
Die Zeile 231 ist:
my $t = timelocal(0, 0, 0, 25, 12, $Jahr-$Dez);
schon versucht, 12 durch 11 zu ersetzen ?
my $t = timelocal(0, 0, 0, 25, 11, $Jahr-$Dez); <<<<<<<<<<<<<<<<< hier
my $wd = (localtime $t)[6];
$t = timelocal(0, 0, 0, 25-$wd-1, 11, $Jahr-$Dez);<<<<<<<<<<<<<<<<<<< hier
my $dt2 = DateTime->new(
year => $Jahr-$Dez,
month => 11, <<<<<<<<<<<<<<<<<<<<<<<<<<<< hier
day => 25-$wd-1,
hour => 0,
minute => 0,
second => 0
);
Zitat von: raspklaus am 05 November 2015, 17:16:06
Fehler hat sich wieder mal geändert:
z_advent DOIF: the at function "Advent" must return a timespec and not Month '12' out of range 0..11 at ./FHEM/99_myUtils.pm line 231.
.: {Advent}
Bevor ihr noch tagelang weiter experimentiert.
Wenn deine Adventfunktion deklariert ist und in der Kommandozeile der Aufruf {Advent} den richtigen Wert liefert.
Dann kannst du in der Bedingung von DOIF Advent als eine Perlfunktion direkt angeben in der Form:
(.... and Advent==1 ...) (set bla...)
Eckige oder geschweifte Klammern sind hier fehl am Platz.
Gruß
Damian
Hallo Damian,
wie meinst Du in der Kommandozeile den richtigen Wert liefert.
Sorry habe die Sub nicht selbst geschrieben.
Was muss ich eingeben damit ein Wert angezeigt wird ?
Danke für deine Hilfe
Zitat von: raspklaus am 05 November 2015, 19:23:14
Hallo Damian,
wie meinst Du in der Kommandozeile den richtigen Wert liefert.
Sorry habe die Sub nicht selbst geschrieben.
Was muss ich eingeben damit ein Wert angezeigt wird ?
Danke für deine Hilfe
Habe ich doch geschrieben:
{Advent}
Danke, wieder was gelernt
Wenn ich {Advent} eingebe bekomme ich folgende Meldung wie oben
Month '12' out of range 0..11 at ./FHEM/99_myUtils.pm line 231.
Zitat von: raspklaus am 05 November 2015, 19:35:30
Danke, wieder was gelernt
Wenn ich {Advent} eingebe bekomme ich folgende Meldung wie oben
Month '12' out of range 0..11 at ./FHEM/99_myUtils.pm line 231.
Dann muss die Funktion der Autor korrigieren und dann kannst du sie in DOIF, wie geschrieben, verwenden ;)
Gruß
Damian
Aber laut
http://forum.fhem.de/index.php/topic,42209.0.html (http://forum.fhem.de/index.php/topic,42209.0.html)
soll sie so funktionieren. Ich habe sie 1 zu 1 übernommen
Also wenn die sub Advent tut, dann müsste es doch so funktionieren..
define z_advent DOIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] <= 100 and Advent==1) (set advent on)
DOELSEIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] > 100 and Advent==1) (set advent off)
DOELSEIF ([22:00]) (set advent off)
Die Sub tuts jetzt aber bei Deiner DOIF kommt die Meldung
_advent DOIF: no left bracket of condition: DOIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] <= 100 and Advent==1) (set advent on)DOELSEIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] > 100 and Advent==1) (set advent off)DOELSEIF ([22:00]) (set advent off)
Fehlendes Leerzeichen vor DOELSEIF
Was hast du an der sub verändert ?
Zitat von: kumue am 05 November 2015, 20:00:23
Also wenn die sub Advent tut, dann müsste es doch so funktionieren..
define z_advent DOIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] <= 100 and Advent==1) (set advent on)
DOELSEIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] > 100 and Advent==1) (set advent off)
DOELSEIF ([22:00]) (set advent off)
Im DEF-Editor darf nur noch:
([06:00-22:00] and [BM_Bewegungsmelder:brightness] <= 100 and Advent==1) (set advent on)
DOELSEIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] > 100 and Advent==1) (set advent off)
DOELSEIF ([22:00]) (set advent off)
stehen.
DOIF ist bereits der Modulname.
Gruß
Damian
Zitat von: Damian am 05 November 2015, 22:03:25
Im DEF-Editor darf nur noch:
([06:00-22:00] and [BM_Bewegungsmelder:brightness] <= 100 and Advent==1) (set advent on)
DOELSEIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] > 100 and Advent==1) (set advent off)
DOELSEIF ([22:00]) (set advent off)
stehen.
DOIF ist bereits der Modulname.
Gruß
Damian
siehe hier (http://forum.fhem.de/index.php/topic,43525.msg354642.html#msg354642)
Zitat von: raspklaus am 05 November 2015, 19:41:22
http://forum.fhem.de/index.php/topic,42209.0.html (http://forum.fhem.de/index.php/topic,42209.0.html)
Ich habe sie 1 zu 1 übernommen
Anscheinend nicht, denn auch dort steht, wie kumue schon schrieb, jeweils eine 11 und keine 12 drin...
Gruß
Andreas
Icinger hat das Modul nachträglich nochmal geändert nachdem ich mich mit ihm in Verbindung gesetzt habe. Steht aber auch in den weiteren Beiträgen im Threat
Stimmt, hab ich überlesen...sorry!
Gruß
Andreas