Oder-Abfrage trifft nicht zu

Begonnen von Puschel74, 08 Januar 2013, 10:53:05

Vorheriges Thema - Nächstes Thema

Puschel74

So,

nun hat es auch mich mal wieder erwischt.
Ich bitte 2 unabhängige Augen mal drüber zu schauen:

EG_WZ_Bewegungsmelder:Ein.* {
  my $now=sprintf("%%02d:%%02d",$hour,$min);
  if (Value("WZ_Deckenlicht") eq "Aus" || Value("WZ_Fernsehlicht") eq "Aus") {
    if ($now >= "21:00" && $now <= "11:30") {
      if($now >= "00:00" && $now < "05:00") {
          fhem ("set WZ_Deckenlicht dim25%%");
      }
      if($now >= "05:00" && $now < "11:30") {
        fhem ("set WZ_Deckenlicht dim50%%");
      }
      if($now >= "21:00" && $now <= "22:00") {
        fhem ("set WZ_Deckenlicht dim50%%");
      }
      if($now >= "22:00" && $now <= "23:59") {
        fhem ("set WZ_Deckenlicht dim25%%");
      }
    fhem ("delete wieder_aus") if (Value("wieder_aus") ne "");
    fhem ("define wieder_aus at +00:00:40 set WZ_Deckenlicht off;; set EG_WZ_Bewegungsmelder off");
    }
  }
  fhem ("set EG_WZ_Bewegungsmelder off")
}


Sollte WZ_Deckenlicht ODER WZ_Fernsehlicht Aus sein soll, nach Uhrzeit, gedimmt werden.
Beide Lichter haben den Status Aus (und nicht off oder toggle) allerdings wird direkt der letzte Befehl ausgeführt
}
  }
  fhem ("set EG_WZ_Bewegungsmelder off")

Das einzige Attribut für diesen Schnipsel lautet
attr Licht_abends room 21_Geraete

Bitte entfernt meine Tomaten und lenkt mich mal in die richtige Richtung.

Grad probiert:

Auch das

EG_WZ_Bewegungsmelder:Ein.* {
  my $now=sprintf("%%02d:%%02d",$hour,$min);
    if ($now >= "21:00" && $now <= "11:30") {
      if($now >= "00:00" && $now < "05:00") {
          fhem ("set WZ_Deckenlicht dim25%%");
      }
      if($now >= "05:00" && $now < "11:30") {
        fhem ("set WZ_Deckenlicht dim50%%");
      }
      if($now >= "21:00" && $now <= "22:00") {
        fhem ("set WZ_Deckenlicht dim50%%");
      }
      if($now >= "22:00" && $now <= "23:59") {
        fhem ("set WZ_Deckenlicht dim25%%");
      }
    fhem ("delete wieder_aus") if (Value("wieder_aus") ne "");
    fhem ("define wieder_aus at +00:00:40 set WZ_Deckenlicht off;; set EG_WZ_Bewegungsmelder off");
    }
  fhem ("set EG_WZ_Bewegungsmelder off")
}

führt direkt zum ausführen der letzte Zeile wobei das

EG_Eingang_Bewegungsmelder:on.* {
my $now=sprintf("%%02d:%%02d",$hour,$min);
my $fhttk_eing_tuer = ReadingsVal("EG_Eingangstuer", "Window", "nA");
if ( $fhttk_eing_tuer eq "Closed" ) {
if ($now >= "15:00" or $now < "09:00") {
fhem ("set EG_Eingang_Licht_innen on-for-timer 30; set EG_Vorraum_Licht on-for-timer 48; set EG_Eingang_Bewegungsmelder Aus");
}
}
fhem ("set EG_Eingang_Bewegungsmelder off");
}

einwandfrei funktioniert.

Danke und Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Joachim

Moin Puschel74,

habe zwar auch keine Ahnung von Perl,

aber Du rennst in die Falle der If-Schleife.

EG_WZ_Bewegungsmelder:Ein.* {
  my $now=sprintf("%%02d:%%02d",$hour,$min);
  if (Value("WZ_Deckenlicht") eq "Aus" || Value("WZ_Fernsehlicht") eq "Aus") { beginn der If-Abfrage
    if ($now >= "21:00" && $now <= "11:30") {
      if($now >= "00:00" && $now < "05:00") {
          fhem ("set WZ_Deckenlicht dim25%%");
      }
      if($now >= "05:00" && $now < "11:30") {
        fhem ("set WZ_Deckenlicht dim50%%");
      }
      if($now >= "21:00" && $now <= "22:00") {
        fhem ("set WZ_Deckenlicht dim50%%");
      }
      if($now >= "22:00" && $now <= "23:59") {
        fhem ("set WZ_Deckenlicht dim25%%");
      }
    fhem ("delete wieder_aus") if (Value("wieder_aus") ne "");
    fhem ("define wieder_aus at +00:00:40 set WZ_Deckenlicht off;; set EG_WZ_Bewegungsmelder off");
    }   
  } Ende der If-Abfrage
  fhem ("set EG_WZ_Bewegungsmelder off") nächste Zeile die abgearbeitet wird
}

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Puschel74

Hallo,

danke schonmal für die Antwort.

Das ich in dieser Falle hänge ist mir klar ;-)

Was ich nicht ganz verstehe ist, warum nicht IN dieses If verzweigt wird da doch
WZ_Deckenlicht UND auch WZ_Fernsehlicht AUS sind.
Nach meinem Verständnis sollte in das if verzweigt werden sobald EINER der beiden Aus ist.
Und es sind definitv beide Aus und nicht off oder toggle.

Somit sollte doch eigentlich die Prüfung nach der Uhrzeit erfolgen (diese habe ich
bereits erweitert auf 12:30).
Der letzte Zeile dient nur dazu den Bewegungsmelder wieder "scharf" zu schalten in fhem.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Joachim

Versuchs mal mit mehr Klammern

  if (($now >= "21:00") && ($now <= "11:30")) {
nicht getestet, aber wenn ich es richtig verstanden habe, dann gibt and (&&) einen Wahrheitswert zurück, wenn links und rechts vom && wahr ist. Ich habe die Prioritäten im Moment auch nicht im Kopf.

diese oder-Verknüpfung rennt in Meinem Perl-Modul wunderbar
if((($t0 eq "00") || ($t0 eq "06") || ($t0 eq "12") || ($t0 eq "18")) && ($t0 ne $t2)){

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Puschel74

Hallo,

danke mal für den Tipp aber ...

EG_WZ_Bewegungsmelder:Ein.* {
  my $now=sprintf("%%02d:%%02d",$hour,$min);
  if (Value("WZ_Deckenlicht") eq "Aus") {
    if (($now >= "21:00") && ($now <= "20:30")) {
      if(($now >= "00:00") && ($now < "05:00")) {
          fhem ("set WZ_Deckenlicht dim25%%");
      }
      if(($now >= "05:00") && ($now < "20:30")) {
        fhem ("set WZ_Deckenlicht dim50%%");
      }
      if(($now >= "21:00") && ($now <= "22:00")) {
        fhem ("set WZ_Deckenlicht dim50%%");
      }
      if(($now >= "22:00") && ($now <= "23:59")) {
        fhem ("set WZ_Deckenlicht dim25%%");
      }
    fhem ("delete wieder_aus") if (Value("wieder_aus") ne "");
    fhem ("define wieder_aus at +00:00:40 set WZ_Deckenlicht off;; set EG_WZ_Bewegungsmelder off");
    }
  }
  fhem ("set EG_WZ_Bewegungsmelder off")
}

liefert mir im Logfile nur
2013.01.08 12:47:30 2: FS20 EG_WZ_Bewegungsmelder on
2013.01.08 12:47:30 2: FS20 set EG_WZ_Bewegungsmelder off

Ich lass jetzt auch WZ_Deckenlicht auf off prüfen aber auch nüscht.
Ich habe eigentlich gedacht das dann das Deckenlicht auf 50% gedimmt wird.

Wo hingegen dieser Teil

EG_Eingang_Bewegungsmelder:on.* {
my $now=sprintf("%%02d:%%02d",$hour,$min);
my $fhttk_eing_tuer = ReadingsVal("EG_Eingangstuer", "Window", "nA");
if ( $fhttk_eing_tuer eq "Closed" ) {
if ($now >= "15:00" or $now < "09:00") {
fhem ("set EG_Eingang_Licht_innen on-for-timer 30; set EG_Vorraum_Licht on-for-timer 48; set EG_Eingang_Bewegungsmelder Aus");
}
}
fhem ("set EG_Eingang_Bewegungsmelder off");
}


wunderbar funktioniert.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Joachim

geht er denn überhaupt durch die If-Abfragen?

--> Pflaster die Abfrage mal mit LOG (stammt von Dir) und bau mal ein else mit ein.

EG_WZ_Bewegungsmelder:Ein.* {
  my $now=sprintf("%%02d:%%02d",$hour,$min);
  if ($now >= "21:00" && $now <= "11:30") {
    logeintrag
    } else{
      logeintrag    
      if($now >= "00:00" && $now < "05:00") {
        fhem ("set WZ_Deckenlicht dim25%%");
        logeintrag
      } else{
        logeintrag
      }      
      if($now >= "05:00" && $now < "11:30") {
        fhem ("set WZ_Deckenlicht dim50%%");
logeintrag
      } else{
 logeintrag
}
      if($now >= "21:00" && $now <= "22:00") {
        fhem ("set WZ_Deckenlicht dim50%%");
logeintrag
      } else{
 logeintrag
}
      if($now >= "22:00" && $now <= "23:59") {
        fhem ("set WZ_Deckenlicht dim25%%");
logeintrag
} else{
      }
    fhem ("delete wieder_aus") if (Value("wieder_aus") ne "");
    fhem ("define wieder_aus at +00:00:40 set WZ_Deckenlicht off;; set EG_WZ_Bewegungsmelder off");
    }
  fhem ("set EG_WZ_Bewegungsmelder off")
}


Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Puschel74

Hallo,

ja das mit dem Log ist nicht verkehrt :-)
Aber das ...
EG_WZ_Bewegungsmelder:on.* {
  my $now=sprintf("%%02d:%%02d",$hour,$min);
  if (Value("WZ_Deckenlicht") eq "off") {
    if (($now >= "21:00") && ($now <= "20:30")) {
      if(($now >= "00:00") && ($now < "05:00")) {
          fhem ("set WZ_Deckenlicht dim25%%");
          Log (3,"absatz1");  
      }
      if(($now >= "05:00") && ($now < "20:30")) {
        fhem ("set WZ_Deckenlicht dim50%%");
Log (3,"absatz2");
      }
      if(($now >= "21:00") && ($now <= "22:00")) {
        fhem ("set WZ_Deckenlicht dim50%%");
Log (3,"absatz3");
      }
      if(($now >= "22:00") && ($now <= "23:59")) {
        fhem ("set WZ_Deckenlicht dim25%%");
Log (3,"absatz4");
      }
    fhem ("delete wieder_aus") if (Value("wieder_aus") ne "");
    fhem ("define wieder_aus at +00:00:40 set WZ_Deckenlicht off;; set EG_WZ_Bewegungsmelder off");
Log (3,"Durchs if durch");
    }
  }
  fhem ("set EG_WZ_Bewegungsmelder off");
  Log (3,"und der schluss");
}

liefert mir im Log das

2013.01.08 13:55:19 2: FS20 set EG_WZ_Bewegungsmelder on
2013.01.08 13:55:19 2: FS20 set EG_WZ_Bewegungsmelder off
2013.01.08 13:55:19 3: und der schluss
2013.01.08 13:55:20 2: FS20 EG_WZ_Bewegungsmelder off

also wird doch garnicht geprüft ob das Deckenlicht aus ist??

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Joachim

Deshalb der else-Block, damit man sieht, wie er die Schleifen durchlauft.
Eventuell sogar mit den Werten, die abgefragt werden, denn Computer haben eine andere Logic wie Menschen.
Nicht umsonst heißt EDV auch Ende der Vernunft

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Joachim

Läuft das eigentlich in einem Modul (z.B. Myutils) oder steht dass in der fhem.cfg?
Paralel lese ich Den anderen Tread von Dir
 Aw: Projekt Abwesenheit Erkennung (Ping) + Heizung Steuerung

und da sind ja doppelte ;; und Zeilenschutz drin \

define Heizung_AutoEco notify Anwesenheit.*:.* { \
if (Value("Anwesenheit_Chris") eq "on") { \
fhem ("set Heizung auto") if (Value("Heizung") eq "off");; \
Log (3,"Setze Heizung Auto");; \
} \
else { \
fhem ("set Heizung eco") if (Value("Heizung") eq "on");; \
Log (3,"Setze Heizung Eco");;\
}\
Log (3,"Ich mach nix warum auch immer);;\
}

nicht dass das dadurch hängt.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Puschel74

Hallo,

der Code steht in der fhem.cfg aber ich editiere immer über das DEF vom notify.
Da braucht es nichts zu schützen, aber in der fhem.cfg steht der Code geschützt - das übernimmt fhem beim speichern sonst würde es ja nur noch Fehlermeldungen hageln *g*

Ich hab grad gesehen das ich in einem anderen Codeschnipsel bei mir

if(sunrise_abs(7200) gt $now or $now gt sunset_abs(-3600) or ( $fhttk_bad_tuer eq "Closed" and $fhttk_sz_tuer eq "Closed" ) ) {
  if($now >= "00:00" && $now < "06:45") {


abfrage und das klappt auch wunderbar.

Ich muss mein Problem im Wohnzimmer aber mal von ganz klien angehen und langsam erweitern.
Ich hab jetzt die Prüfung auf das Deckenlicht rausgenommen, aber der if-Zweig wird immer noch nicht durchlaufen.
Ich werd mal die else einbauen und nochmal testen aber erstmal nur ob das Licht überhaupt an geht wenn der BM auslöst *g*

Danke schonmal bis hier für die Hilfe.
Ich meld mich wieder

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Puschel74

So,

von klein aufgedröselt und den Fehler erkannt.
Tja, nur so lernt man ;-)

Das ist richtig:

EG_WZ_Bewegungsmelder:on.* {
  my $now=sprintf("%%02d:%%02d",$hour,$min);
  if ((Value("WZ_Deckenlicht") eq "Aus") || (Value("WZ_Fernsehlicht") eq "Aus")) {
    if($now gt "00:00" && $now lt "05:00") {
      fhem ("set WZ_Deckenlicht dim25%%");
      Log (3,"absatz1");  
      }
      if($now gt "05:00" && $now lt "17:30") {
        fhem ("set WZ_Deckenlicht dim50%%");
Log (3,"absatz2");
      }
      if($now gt "17:30" && $now lt "22:00") {
        fhem ("set WZ_Deckenlicht dim50%%");
Log (3,"absatz3");
      }
      if($now gt "22:00" && $now lt "23:59") {
        fhem ("set WZ_Deckenlicht dim25%%");
Log (3,"absatz4");
      }
    fhem ("delete wieder_aus") if (Value("wieder_aus") ne "");
    fhem ("define wieder_aus at +00:00:40 set WZ_Deckenlicht off;; set EG_WZ_Bewegungsmelder off");
Log (3,"Durchs if durch");
    }
  fhem ("set EG_WZ_Bewegungsmelder off");
  Log (3,"und der schluss");
}

dann funktioniert es auch mit dem Licht.

Danke nochmal für die Hilfe.

Grüße

P.S.: Die Werte bleiben nicht so - das war nur zum probieren
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Joachim

Dann haben wir beide wieder etwas gelernt.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232