Hauptmenü

Syntaxfehler im Notify

Begonnen von slor, 13 März 2014, 15:17:13

Vorheriges Thema - Nächstes Thema

slor

Hallo zusammen,

ich möchte gerne, dass meine Küchenlampe angeht, sobald die Terassentür aufgeht.
Ich habe ein logfile erstellt, in das nur open und close von Haustür und Gartentür gelogged werden. (Zur besseren übersicht)

Nun habe ich noch einen Notify gebaut, der bei einem Open nach Sonnenuntergang das Licht für 600 Sek einschalten soll.

Kontakt_Gartentuer.open {\sunset_abs(1800) lt sprintf("%%02d:%%02d", $hour, $min)) {\fhem "set EG_Kueche_Deckenlampe on-for-timer 600";;\  }\ }

Bei folgendem Eintrag im Log soll der Notify reagieren: 2014-03-13_08:29:16 kontakte Gartentuer open
Das funktioniert auch soweit. Nur scheint, dass was ich danach genaut habe nicht so zu stimmen.
Fehler:
kontakt_Gartentuer_auf_licht_an return value: syntax error at (eval 28) line 1, near ")) "
syntax error at (eval 28) line 1, near "} }"


Kann mal bitte jemand von den Profi Codern da drauf schauen?

Vielen Dank!

dieda

#1
Hast du dir das Beispiel der If-Funktion aus dem Einsteigerleitfaden angeschaut und mit deinem verglichen?

define Schalter1Notify notify Schalter1 { if ( "%" eq "off") {fhem("set wz_Media off")} }

Dort steht {wenn ("der Wert der gelesen werden soll" eg "der Wert der sein soll") {fhem("set dein Aktor der schalten soll")} }

Das ist die Bedingung:
("der Wert der gelesen werden soll" eg "der Wert der sein soll")

Das was Fhem machen soll:
{fhem("set dein Aktor der schalten soll")}

Mehrere Bedingungen werden mit
&&
verkettet.

Beispiel:
define test notify .*:.* { if ($NAME eq "Taster" && $EVENT eq "on") [fhem("set lampe $EVENT")} }

Weitere Infos findest du im http://forum.fhem.de/index.php/topic,19621.0.html unter dem Punkt "Einfache Programmierung: if-Bedingung"
Komponenten:
Sensoren und Aktoren: FS20, Max!, Zigbee, Zwave
IODev:  Cul1101, MaxLan, ZWAVE, Deconz
Router: KD-Fritte (6360)
Sonstiges: Raspberries,  1x LMS,1 FHEM, 1 x zum Testen,  Logitech-Clients,  Onkyo, SamsungTV, Squeezebox, TabletUIs

slor

Danke für die Hinweise. Ich hatte mir das aus dem Forum / Wiki zusammengesucht. Scheinbar ist das noch die alte Schreibweise.

Ich werde mich da noch mal durchwühlen.

Für konkrete Tips wie mein Code funktionieren würde wäre ich trotzdem dankbar.

Haecksler

Probiers mal so:
Kontakt_Gartentuer {if (Value("Kontakt_Gartentuer") eq "open" && (sunset_abs(1800) lt sprintf("%%02d:%%02d", $hour, $min)) {fhem ("set EG_Kueche_Deckenlampe on-for-timer 600")} }

Ist aber ohne Gewähr.

Gruß,
Stefan

Damian

Darf es auch etwas weniger kryptisch sein?

define n_lampe notify Kontakt_Gartentuer.open IF ($hms gt sunset_abs(1800)) (set EG_Kueche_Deckenlampe on-for-timer 600)

IF findest du hier:

http://forum.fhem.de/index.php/topic,17895.msg118503.html#msg118503

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

slor

 :) Danke! Das ist ja deutlich einfacher und verständlicher. Ich probier das heute Abend mal aus.

Wird das on-for-timer eigentlich nach Ablauf der 600 Sek auf off zurückgesetzt? Bzw. zählt FHEM runter, so das man sehen könnte wie viel Zeit schon verstrichen ist?

Was muss ich eigentlich noch einbauen, falls die Küchen Lampe schon an ist und jemand die Garten Tür öffnet? Es soll den Timer nur sezten, wenn status der Lampe off ist.

Damian

Zitat von: slor am 14 März 2014, 12:58:34
:) Danke! Das ist ja deutlich einfacher und verständlicher. Ich probier das heute Abend mal aus.

Wird das on-for-timer eigentlich nach Ablauf der 600 Sek auf off zurückgesetzt? Bzw. zählt FHEM runter, so das man sehen könnte wie viel Zeit schon verstrichen ist?

Was muss ich eigentlich noch einbauen, falls die Küchen Lampe schon an ist und jemand die Garten Tür öffnet? Es soll den Timer nur sezten, wenn status der Lampe off ist.

Der Status bleibt on-for-timer auch, wenn die Lampe ausgegangen ist. Du kannst aber ohne Fehlermeldung das Kommando absetzen, bevor die Lampe ausgegangen ist - die Zeit verlängert sich entsprechend.


Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

slor

#7
Ich meinte, was muss noch rein, wenn ich vor her die Lampe manuell angeschaltetet habe, damit das Kommando on-for-timer nicht gesetzt wird, da ja sonst die lampe aus geht. Z.B. beim Abendessen ist das Licht an und ich mache die Tür auf. Dann sitze ich nach 10 min im dunkeln.

Da muss noch eine zweite Bedingung rein und mit "und" mit dem bestehenden If verknüpft werden:
define n_lampe notify Kontakt_Gartentuer.open (IF ($hms gt sunset_abs(1800)) and IF ([EG_Kueche_Deckenlampe:state] eq "off")) (set EG_Kueche_Deckenlampe on-for-timer 600)

Richtig?

Damian

Zitat von: slor am 14 März 2014, 15:18:50
Ich meinte, was muss noch rein, wenn ich vor her die Lampe manuell angeschaltetet habe, damit das Kommando on-for-timer nicht gesetzt wird, da ja sonst die lampe aus geht. Z.B. beim Abendessen ist das Licht an und ich mache die Tür auf. Dann sitze ich nach 10 min im dunkeln.

Da muss noch eine zweite Bedingung rein und mit "und" mit dem bestehenden If verknüpft werden:
define n_lampe notify Kontakt_Gartentuer.open (IF ($hms gt sunset_abs(1800)) and IF ([EG_Kueche_Deckenlampe:state] eq "off")) (set EG_Kueche_Deckenlampe on-for-timer 600)

Richtig?

Wenn schon, dann ohne zweiten IF:

define n_lampe notify Kontakt_Gartentuer.open IF ($hms gt sunset_abs(1800) and [EG_Kueche_Deckenlampe:state] eq "off") (set EG_Kueche_Deckenlampe on-for-timer 600)

oder noch eleganter:

define n_lampe notify Kontakt_Gartentuer.open IF ($hms gt sunset_abs(1800)) (set EG_Kueche_Deckenlampe:FILTER=STATE!=on on-for-timer 600)


Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

slor

Herrlich, ich würd auch gern vernünftig Programmieren können...  :-[
Vielen Dank! Sobald ich Dein If Modul importiert habe mach ich mal einen Test. Ist ja so lansgam dunkel hier im Norden.

Sebastian

slor

Moin Moin noch mal,

das Ganze läuft nun seit 2 Wochen ohne Probleme... bis ich heute mal nach 00 Uhr nach Hause gekommen bin.
Da ging das Licht nämlich nicht an :-( Ich dachte erst, es liegt an meinem Alkoholpegel... Aber nein, die Sonne ist heute ja noch nicht untergegangen.

Wie kan ich denn das Notify so erweitern, dass es zwischen Sonnenuntergang und Sonnnaufgang die Lampe anschltet?

Paul

Cubietruck, HM-USB, CUL, FS20, FHT, HUE, Keymatic

betateilchen

Zitat von: slor
Herrlich, ich würd auch gern vernünftig Programmieren können...
...
Sobald ich Dein If Modul importiert habe

(Randbemerkung) ich kann zwar programmieren, aber der Sinn bzw. die Notwendigkeit von IF hat sich mir bis heute nicht erschlossen
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!