Hallo Leute,
ich mache schon eine Weile damit rum, aber irgendwie sehe ich den Fehler nicht... evlt. sieht ihn einer von euch auf Anhieb.
define BadHeizSchalt at +*00:01 { IF ((($hour >= 5) and ($hour < 21)) and (([badthermo:temperature] <= 19) and ([badthermo:temperature] < 25))){set BadHeizung on} ELSE {set BadHeizung off}}
und es schaltet nix....
im Log steht dann:
2015.11.08 15:17:58 3: BadHeizSchalt: syntax error at (eval 177) line 1, near "badthermo:"
syntax error at (eval 177) line 1, near "}}"
Bareword "off" not allowed while "strict subs" in use at (eval 177) line 1.
und wenn ich nur -->
IF ((($hms >= "05:35:00") and ($hms < "21:00:00")) and (([badthermo:temperature] <= 19) and ([badthermo:temperature] < 21)))(set BadHeizung on) ELSE (set BadHeizung off)
dann geht es...
Könnte sich das jemand mal ansehen? --> Danke --<
LG
Nucleo
Keiner mal eine Idee?
if --> Perl if
IF --> FHEM IF
Schau mal in die Commandref unter IF. Dieses IF verwendet keine geschweiften Klammern.
Ok Nachfrage, weil ich es nicht verstehe.
wenn ich das so definiere, dann muss ich das Pearl if verwenden und nicht das FHEM IF???
Zitat von: nucleo74 am 08 November 2015, 15:20:29
Hallo Leute,
ich mache schon eine Weile damit rum, aber irgendwie sehe ich den Fehler nicht... evlt. sieht ihn einer von euch auf Anhieb.
define BadHeizSchalt at +*00:01 { IF ((($hour >= 5) and ($hour < 21)) and (([badthermo:temperature] <= 19) and ([badthermo:temperature] < 25))){set BadHeizung on} ELSE {set BadHeizung off}}
und es schaltet nix....
im Log steht dann:
2015.11.08 15:17:58 3: BadHeizSchalt: syntax error at (eval 177) line 1, near "badthermo:"
syntax error at (eval 177) line 1, near "}}"
Bareword "off" not allowed while "strict subs" in use at (eval 177) line 1.
und wenn ich nur -->
IF ((($hms >= "05:35:00") and ($hms < "21:00:00")) and (([badthermo:temperature] <= 19) and ([badthermo:temperature] < 21)))(set BadHeizung on) ELSE (set BadHeizung off)
dann geht es...
Könnte sich das jemand mal ansehen? --> Danke --<
LG
Nucleo
Nimm am besten gleich DOIF. Es macht nicht viel Sinn im Minutentakt etwas abzufragen, wenn man es auch Sekundengenau haben kann - ohne ständiges Abfragen.
Gruß
Damian
Alles, was in {} steht, wird als Perl-Ausdruck abgearbeitet, also ja, kleines if verwenden.
Super und danke schon mal.
werde beides probieren.
DOIF hatte ich gar nicht auf den Schirm > danke. ...das mit der einen Minute war zu Testzwecken....später sollte das alle Stunde passieren... aber doif ist interessant.
Da mit {} und Pearl hatte ich nicht verstanden > danke
Melde mich mit der Lösung.
Gruß
Nucleo
naja lange rumgemacht und am Ende war es doch so einfach....
gewählte Lösung: DOIF...
und so habe ich es gemacht.
define BadHeizSchalt DOIF ([05:30 - 21:00] and [badthermo:temperature] < 21) (set BadHeizung on) DOELSE (set BadHeizung off)
Danke für die Hilfe!
In der commandref alleine hätte ich es nicht gefunden, weil ich nicht gewusst hätte nach was ich suche und DOIF gab es nicht als ich mit FHEM angefangen hab....
LG
Nucleo
Zitat von: nucleo74 am 08 November 2015, 20:29:02
naja lange rumgemacht und am Ende war es doch so einfach....
gewählte Lösung: DOIF...
und so habe ich es gemacht.
define BadHeizSchalt DOIF ([05:30 - 21:00] and [badthermo:temperature] < 21) (set BadHeizung on) DOELSE (set BadHeizung off)
Danke für die Hilfe!
In der commandref alleine hätte ich es nicht gefunden, weil ich nicht gewusst hätte nach was ich suche und DOIF gab es nicht als ich mit FHEM angefangen hab....
LG
Nucleo
Ist immer das Beste, wenn man selbst zu einer Lösung kommt.
Naja, dass es dieses Modul gibt, dazu muss man nicht lange hier im Forum surfen ;)
Gruß
Damian
Hi,
das beschreibt meinen Wunsch ja schon ganz gut.
Bis jetzt schalte ich eine Stehlampe im Wohnzimmer über ein at immer zum Sonnenuntergang ein und nachts um 2 Uhr wieder aus, egal, ob ich da bin oder nicht. Inzwischen habe ich precence und Roommate aber stabil zum laufen bekommen (bis jetzt Lan-Ping/BT-Kombi, geofency teste ich gerade), sodass ich das eigentlich nur noch schalten möchte, wenn ich auch zuhause bin.
Der at sieht derzeit so aus:
define StehlampeAbendsAn at +*{sunset_rel()} set WZ_Stehlampe on
define StehlampeNachtsAus at *02:00 set WZ_Stehlampe off
Müsste der DOIF dann so aussehen:
define StehlampeOnOff DOIF ([+*{sunset_rel()} - 02:00] and [rr_petjek:Status] = home) (set WZ_Stehlampe on) DOELSEIF (set WZ_Stehlampe off)
Abgesehen von der Syntax (die wahrscheinlich so nicht korrekt ist): wenn das Licht angeht, weil ich bei Sonnenuntergang zuhause war würde es damit auch ausgehen, wenn ich das Haus danach verlasse, oder? Und wenn ich vor 2 Uhr nachts wieder heim komme auch wieder an gehen? Sollte so sein, oder?
LG,
petjek
Hinter DOELSEIF fehlt Deine Bedingung. Oder Du nimmst DOELSE
Ah, stimmt, vertippt.
Aber ansonsten korrekt?
Kenne mich da nicht so mit aus, aber würde Mal sagen auf den ersten Blick OK.
Hab's mal probiert aber stimmt nicht so ganz anscheinend.
In den Readings steht nun
timer_01_c01 error: Wrong timespec *{sunset_rel()}: either HH:MM:SS or {perlcode}
timer_02_c01 12.08.2017 02:00:00
Das Ausschalten um 2 Uhr Nachts sollte klappen, der Bezug zum Sonnenuntergang muss aber wohl anders formuliert werden. Ich habe allerdings keine Ahnung von perl.
Jemand?
LG,
petjek
ich glaube (achtung viertelwissen) bei DOIF gibt es das * wie im 'at' nicht.
define StehlampeOnOff DOIF ([+{sunset_rel()} - 02:00] and [rr_petjek:Status] = home) (set WZ_Stehlampe on) DOELSEIF (set WZ_Stehlampe off)
ansonsten liegt es wohl an der klammerung, dafür müsstest du evtl. mal Damian fragen.
Schau doch bitte in die Commandref, da gibt es meines Wissens ein Beispiel für.
Zitat von: CoolTux am 11 August 2017, 10:10:26
Schau doch bitte in die Commandref, da gibt es meines Wissens ein Beispiel für.
wen meinst du @ CoolTux ?
ich hab die cref durchsucht nach '+*'. in der deutschen 13x, in der englischen 16x. und immer steht ein 'at' davor.
oh mann....
jetzt hab ich erstmal gelesen was petjek überhaupt machen will ::)
Frage: warum willst du von deinem (funktionierenden?) at auf DOIF wechseln??
die Abfrage ob du zu Hause bist, kannst du auch fort machen!
ansonsten hat CoolTux recht, in der cref steht ein beispiel für deinen Anwendungsfall
ZitatSchalten mit Zeitfunktionen, hier: bei Sonnenaufgang und Sonnenuntergang:
define di_light DOIF ([+{sunrise_rel(900,"06:00","08:00")}]) (set outdoorlight off) DOELSEIF ([+{sunset_rel(900,"17:00","21:00")}]) (set outdoorlight on)