[gelöst] at Befehl mit if Verschachtelung, was mache ich falsch

Begonnen von nucleo74, 08 November 2015, 15:20:29

Vorheriges Thema - Nächstes Thema

nucleo74

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

nucleo74


Ellert

if --> Perl if
IF --> FHEM IF

Schau mal in die Commandref unter IF. Dieses IF verwendet keine geschweiften Klammern.

nucleo74

Ok Nachfrage, weil ich es nicht verstehe.
wenn ich das so definiere, dann muss ich das Pearl if verwenden und nicht das FHEM IF???

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Icinger

Alles, was in {} steht, wird als Perl-Ausdruck abgearbeitet, also ja, kleines if verwenden.
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

nucleo74

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

nucleo74

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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

petjek

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
Die Möglichkeiten der deutschen Grammatik können einen, wenn man sich darauf, was man ruhig, wenn man möchte, sollte, einlässt, überraschen.

CoolTux

Hinter DOELSEIF fehlt Deine Bedingung. Oder Du nimmst DOELSE
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

petjek

Die Möglichkeiten der deutschen Grammatik können einen, wenn man sich darauf, was man ruhig, wenn man möchte, sollte, einlässt, überraschen.

CoolTux

Kenne mich da nicht so mit aus, aber würde Mal sagen auf den ersten Blick OK.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

petjek

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
Die Möglichkeiten der deutschen Grammatik können einen, wenn man sich darauf, was man ruhig, wenn man möchte, sollte, einlässt, überraschen.

nils_

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.
viele Wege in FHEM es gibt!