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
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")
}
}
@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)
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
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
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
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().
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
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.
Entschuldigung, da habe ich mich mitten in der Nacht wohl etwas unglücklich ausgedrückt!