FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: franky08 am 15 Juni 2014, 17:36:40

Titel: [gelöst] Brauche Denkanstoß für Perlcode
Beitrag von: franky08 am 15 Juni 2014, 17:36:40
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
Titel: Antw:Brauche Denkanstoß für Perlcode
Beitrag von: maxritti am 15 Juni 2014, 17:44:20
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")
  }
}
Titel: Antw:Brauche Denkanstoß für Perlcode
Beitrag von: franky08 am 15 Juni 2014, 17:53:25
@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)
Titel: Antw:Brauche Denkanstoß für Perlcode
Beitrag von: franky08 am 15 Juni 2014, 22:02:57
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
Titel: Antw:Brauche Denkanstoß für Perlcode
Beitrag von: Puschel74 am 15 Juni 2014, 22:20:31
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
Titel: Antw:Brauche Denkanstoß für Perlcode
Beitrag von: franky08 am 15 Juni 2014, 22:31:13
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
Titel: Antw:Brauche Denkanstoß für Perlcode
Beitrag von: betateilchen am 15 Juni 2014, 23:58:10
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().
Titel: Antw:Brauche Denkanstoß für Perlcode
Beitrag von: franky08 am 16 Juni 2014, 00:08:17
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
Titel: Antw:Brauche Denkanstoß für Perlcode
Beitrag von: betateilchen am 16 Juni 2014, 12:23:29
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.
Titel: Antw:[gelöst] Brauche Denkanstoß für Perlcode
Beitrag von: franky08 am 16 Juni 2014, 13:49:32
Entschuldigung, da habe ich mich mitten in der Nacht wohl etwas unglücklich ausgedrückt!