FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: raspklaus am 04 November 2015, 14:35:17

Titel: [Gelöst] Fehler bei DOIF und DOELSEIF
Beitrag von: raspklaus am 04 November 2015, 14:35:17
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 ?

Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: moonsorrox am 04 November 2015, 14:53:02
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)
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: raspklaus am 05 November 2015, 11:02:30
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.
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: kumue am 05 November 2015, 11:22:30
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)
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag 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)

aber auch mit den Klammern tritt der Fehler auf

Ich bin nun am Ende von meinem Latein, da ich erst mit Perl angefangen habe
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: kumue am 05 November 2015, 12:06:09
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  :(
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: raspklaus am 05 November 2015, 12:09:05
Ich weiss dass es an dem use strict in der myUtils liegt, aber weiss nicht wie ich das zum Laufen bringe.
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: kumue am 05 November 2015, 12:14:07
vielleicht hilft dieser Beitrag weiter...
http://forum.fhem.de/index.php?topic=42264.0 (http://forum.fhem.de/index.php?topic=42264.0)
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: moonsorrox am 05 November 2015, 12:16:33
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}])
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: raspklaus am 05 November 2015, 12:22:58
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.
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: kumue am 05 November 2015, 12:25:48
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)
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: raspklaus am 05 November 2015, 12:32:47
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
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: kumue am 05 November 2015, 12:36:15
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
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: raspklaus am 05 November 2015, 13:29:10
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)

???
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: kumue am 05 November 2015, 13:47:00
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)


Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: Amenophis86 am 05 November 2015, 13:50:04
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.
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag 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}


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);




Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: kumue am 05 November 2015, 17:46:46
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
                     );
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: Damian am 05 November 2015, 19:03:26
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
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag 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
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: Damian am 05 November 2015, 19:33:09
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}
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag 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.

Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: Damian am 05 November 2015, 19:38:16
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
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: raspklaus am 05 November 2015, 19:41:22
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
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag 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)
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: raspklaus am 05 November 2015, 21:04:13
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)
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: kumue am 05 November 2015, 21:23:08
Fehlendes Leerzeichen vor DOELSEIF

Was hast du an der sub verändert ?
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: Damian am 05 November 2015, 22:03:25
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
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: moonsorrox am 05 November 2015, 23:37:47
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)
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: Vize am 06 November 2015, 08:09:58
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
Titel: Antw:Fehler bei DOIF und DOELSEIF
Beitrag von: raspklaus am 06 November 2015, 09:25:23
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
Titel: Antw:[Gelöst] Fehler bei DOIF und DOELSEIF
Beitrag von: Vize am 06 November 2015, 10:45:32
Stimmt, hab ich überlesen...sorry!

Gruß
Andreas