[gelöst] Brauche Denkanstoß für Perlcode

Begonnen von franky08, 15 Juni 2014, 17:36:40

Vorheriges Thema - Nächstes Thema

franky08

Hallo, ich probiere jetzt schon seit 2h den Fehler in folgendem notify auszumerzen aber mittlerweile sehe den Wald vor lauter Bäumen nicht mehr.

Der Code (aus der DEF):

TH_Sensor_WZ {
{if (ReadingsVal("TH_Sensor_WZ","temperature","99")>25) }
&& {if(($month ~~ [4..8]) && (isday() && $hour ~~ [14..20]))}{
fhem("attr Schalter_Klima disable 0")}}

Und im LOG:

2014.06.15 17:25:07 3: Klima_Betrieb return value: syntax error at (eval 75489) line 2, at EOF
syntax error at (eval 75489) line 4, near "}}"


Ich sehe den Fehler einfach nicht, kann mir bitte jemand auf die Sprünge helfen

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

maxritti

Wozu soll denn das && gehören?

Wenn man das ein wenig formatiert, sieht das ein wenig komisch aus:

TH_Sensor_WZ
{
  {
    if (ReadingsVal("TH_Sensor_WZ","temperature","99")>25)
  } && {
    if ( ($month ~~ [4..8]) && (isday() && $hour ~~ [14..20]))
  } {
    fhem("attr Schalter_Klima disable 0")
    }
}


Sollen die Bedingungen alle logisch und verknüpft werden, sollte dies hier passen:

TH_Sensor_WZ
{
  if ((ReadingsVal("TH_Sensor_WZ","temperature","99")>25) && ($month ~~ [4..8]) && isday() && ($hour ~~ [14..20])) {
    fhem("attr Schalter_Klima disable 0")
  }
}

franky08

#2
@maxritti

Ich DANKE dir, ich hab´s einfach nicht gesehen das dass && zwischen den }{ stand!

VG
Frank

P.S. Ich geb dir ein Bier aus!! (Virtuell)
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

franky08

#3
Jetzt muss ich mich doch noch einmal melden, irgendwie schaltet der Aktor (Klima_Schalter) obwohl nur eine Bedingung zutrifft (temperature >25).
Es soll ja nur geschaltet werden in der Zeit von 14 bis 21 Uhr, wenn Tag ist und der Monat Mai bis September ist.
Hier nochmal der angepasste Code.

TH_Sensor_WZ {if ((ReadingsVal("TH_Sensor_WZ","temperature","99")>25.0) && ($month ~~ [4..8]) && isday() && ($hour ~~ [14..21])) {
    fhem("set Klima_Schalter on")
}
else {
    fhem("set Klima_Schalter off")
}
  }


Nachtrag scheint doch zu funktionieren, kann es mit der Attribut "event-on-change-reading" auf dem Aktor zusammenhängen? Hab das Attribut jetzt gelöscht und der Schalter bleibt aus. Mal sehen.

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Puschel74

Hallo,

isday() && $hour macht in meinen Augen keinen Sinn (hat zwar mit deinem Problem erstmal nichts zu tun aber dennoch).

Entweder isday ODER $hour ABER nicht in einer Abfrage sondern eines von beiden sollte raus.
Hast du isday evtl. mit $we verwechselt?

Zur "Fehlereingrenzung" würde ich so vorgehen:
TH_Sensor_WZ {
  my $temp=(ReadingsVal("TH_Sensor_WZ","temperature","99"));
  if ($temp > 25.0){
    Log (3,"$temp");
    if ($month ~~ [4..8]) {
      Log(3,"$month");
  if (isday()) {
    if ($hour ~~ [14..21]) {
  Log(3,"$hour");
          fhem("set Klima_Schalter on")
        }
  }
}
  }
  else {
    fhem("set Klima_Schalter off")
  }
}

Logzeilen einbauen und schauen wie weit der Code das macht was man möchte.
Die Logzeilen können auch an den Anfang oder Ende des notify - so prüfe ich aber gerne ob auch die if-Bedingungen erfüllt werden.
Und hab so Anhaltspunkte im Logfile wo ich nach schauen muss/soll wenn ein Logeintrag nicht auftaucht obwohl ich es gerne hätte.

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.

franky08

Hallo Puschel, hast schon Recht, wenn es 14 bis 21 Uhr ist, dann ist es auch Tag. Aber ich hatte das in meiner fhem Anfanszeit schonmal mit !isday und der Zeit 21..23, also Nacht, dass hat nur funktioniert wenn sowohl !isday sowie die Zeit angegeben war. Wie schon geschrieben, hatte auf dem Schalter noch das Attribut event-on-change-reading gesetzt, seitdem ich das gelöscht habe scheint es zu laufen. Sehe ich dann morgen.

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

betateilchen

Zitat von: franky08 am 15 Juni 2014, 22:31:13wenn es 14 bis 21 Uhr ist, dann ist es auch Tag.

Das halte ich für einen groben Denkfehler!

Erstens stimmt das nicht für das ganze Jahr und zweitens geht Deine Abfrage [14..21] von 14:00 bis 21:59:59.
Und in Deutschland ist es normalerweise um 21:59:59 immer NACH Sonnenuntergang und damit nicht mehr isday().
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

franky08

Richtig, aber im Moment stimmt es noch ;) und die 21:00 Uhr stehen noch vom testen vorhin drin und dann geht isday bis 20:59:59. Hatte dieZeit vorhin verlängert um zu sehen ob es läuft.

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

betateilchen

Zitat von: franky08 am 16 Juni 2014, 00:08:17die 21:00 Uhr stehen noch vom testen vorhin drin und dann geht isday bis 20:59:59.

Dir ist hoffentlich klar, dass Du mit solchen Sätzen zur absoluten Verwirrung jedes Anfängers beiträgst?

Erstens: wenn Du $hour ~~ [14..21] prüfst, ist die Prüfung von 14:00:00 bis 21:59:59 gültig.
Zweitens: isday() hat rein gar nichts mit der vorher genannten Prüfung zu tun, denn es orientiert sich ausschließlich an sunrise/sunset.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

franky08

Entschuldigung, da habe ich mich mitten in der Nacht wohl etwas unglücklich ausgedrückt!
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1