[Gelöst] Fehler bei DOIF und DOELSEIF

Begonnen von raspklaus, 04 November 2015, 14:35:17

Vorheriges Thema - Nächstes Thema

Amenophis86

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.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

raspklaus

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





kumue

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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

raspklaus

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

Damian

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}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

raspklaus

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.


Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

raspklaus

Aber laut

http://forum.fhem.de/index.php/topic,42209.0.html

soll sie so funktionieren. Ich habe sie 1 zu 1 übernommen

kumue

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)

raspklaus

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)

kumue

#26
Fehlendes Leerzeichen vor DOELSEIF

Was hast du an der sub verändert ?

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

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
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Vize

Zitat von: raspklaus am 05 November 2015, 19:41:22
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