Hallo,
ich bin FHEM Anfänger. Habe einen CUL an meiner FB 7390 und zwei Steckdosenschaltaktoren sowie einen Bewegungsmelder von Homematic.
Einschalten und Ausschalten der Steckdosen funktioniert.
Nun will ich eine Steckdose mit dem Bewegungsmelder einschalten (das funktioniert mittels define Einschalt notify Bewegunsmelder set Steckdose on) und nach einer bestimmten Zeit wieder auszuschalten. Das bekomme ich aber leider nicht hin, folgenden Code habe ich nach langem Suchen in diversen Foren eingebaut (Auszug aus meiner fhem.cfg):
define BZ_Licht_an notify BZ_Bewegungsmelder {\
fhem "set BZ_Steckdose_1 on ;;;; define BZ_Licht_aus at +00:00:10 set BZ_Steckdose_1 off";;\
}
Als Ergebnis steht im Log:
2013.03.16 23:04:33 3: set BZ_Steckdose_1 on ;; define BZ_Licht_aus at +00:00:10 set BZ_Steckdose_1 off : on requires no parameters
2013.03.16 23:04:33 3: BZ_Licht_an return value: on requires no parameters
Wo liegt der Fehler? Vielen Dank schon im Voraus für Eure Hilfe!
P.S.: Bin leider kein Informatiker und habe nur rudimentäre Programmierkenntnisse.
VG
ezekiel 1111
define BZ_Licht_an notify BZ_Bewegungsmelder {\
fhem ("set BZ_Steckdose_1 on") ;;\
fhem("define BZ_Licht_aus at +00:00:10 set BZ_Steckdose_1 off");;\
}
MfG, MisterEltako
Im Grunde fehlen bei dir nur 2 Klammern ()
Anstatt:
Zitatdefine BZ_Licht_an notify BZ_Bewegungsmelder {\
fhem "set BZ_Steckdose_1 on ;;;; define BZ_Licht_aus at +00:00:10 set BZ_Steckdose_1 off";;\
}
Versuche:
define BZ_Licht_an notify BZ_Bewegungsmelder {\
fhem ( "set BZ_Steckdose_1 on ;; define BZ_Licht_aus at +00:00:10 set BZ_Steckdose_1 off")}
MisterEltakos Code geht auch, aber die Umschließung jedes einzelnen Kommandos mit einem eigenen Klammerpaar und einem jeweils einleitendem fhem("...
ist funktional unnötig, manche finden aber, dass das übersichtlicher aussieht.
Hallo,
vielen, vielen Dank für die schnelle Antwort. Die Klammern waren das Problem. Jetzt funktionierts.
habe jetzt noch ein delete Befehl eigebaut, das der Zeitzyklus bei jeder Bewegung entsprechend jeder Bewegung verlängert wird. Sieht jetzt so aus:
define BZ_Licht_an notify BZ_Bewegungsmelder {\
fhem ( "delete BZ_Licht_aus") ;;;; fhem ( "set BZ_Steckdose_1 on") ;;;; fhem ( "define BZ_Licht_aus at +00:05:00 set BZ_Steckdose_1 off");;\
}
Ezekiel1111
schau dir mal on-for-timer an. wenn deine steckdose das kann ist es einfacher und übersichtlicher als den timer selber zu verwalten.
gruss
andre
Seufz.
Dies hier geht:
define BZ_Licht_an notify BZ_Bewegungsmelder {\
fhem ( "delete BZ_Licht_aus") ;;;; fhem ( "set BZ_Steckdose_1 on") ;;;; fhem ( "define BZ_Licht_aus at +00:05:00 set BZ_Steckdose_1 off");;\
}
Aber das kann man natürlich auch kürzer schreiben:
define BZ_Licht_an notify BZ_Bewegungsmelder {\
fhem ( "delete BZ_Licht_aus ;; set BZ_Steckdose_1 on;; define BZ_Licht_aus at +00:05:00 set BZ_Steckdose_1 off")}
Und da du gar kein PERL brauchst, geht's auch noch kürzer:
define BZ_Licht_an notify BZ_Bewegungsmelder delete BZ_Licht_aus ;; set BZ_Steckdose_1 on ;; define BZ_Licht_aus at +00:05:00 set BZ_Steckdose_1 off
Und wenn die steckdose "on-for-timer" kann, geht auch
define BZ_Licht_an notify BZ_Bewegungsmelder set BZ_Steckdose_1 on-for-timer 320
(300 Sekunden = 5 Minuten geht nicht nur 288 oder 320 Sekunden)
Ich weiss nicht, wer damit angefangen hat, jedes Kommando in ein Einzelnes fhem ( " ")
einzupacken.
Das KANN man machen, weil es geht, ist aber funktional total überflüssig und bläht den Code unnötig auf.
Und dieses Konstrukt
{\
fhem ( "
gibt die Kontrolle von FHEM an PERL, nur um sie sofort wieder an FHEM zurückzugeben. Ohne das PERL irgendwas machen soll (vor allem "if...") ist das auch unnötig.
Man kommt weiter, wenn versucht zu kapieren, wann man geschweifte Klammern verwenden muss und wann man Kommandos an FHEM zurück übermitteln muss. Das macht den Code echt schlanker und auch letzlich leichter Verständlich. Ich spreche aus eigener leidvoller Erfahrung.
wenn es homematic ist geht alles zwischen 0 und 85825945 sekunden. und bei den devices die on-for-timer nur emulieren sowieso.
die einschränkung auf bestimmte werte gilt nur für fs20 und ich glaube auch da wird dann passend gerundet.
gruss
andre
Zitatund ich glaube auch da wird dann passend gerundet.
das ist korrekt, man sollte aber wissen dass es so ist.
Hallo,
nochmals vielen Dank für die tolle Unterstützung.
Der Befehl läuft jetzt auch ohne Klammern.
on-for-timer funktioniert auch; leider blinkt dabei die Status-LED der Funksteckdose, daher verwende ich lieber den notify-Befehl.
VG
Ezekiel1111