Hauptmenü

Homematic Bewegunsmelder

Begonnen von ezekiel1111, 16 März 2013, 23:10:45

Vorheriges Thema - Nächstes Thema

ezekiel1111

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

MisterEltako

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
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

Zrrronggg!

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.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

ezekiel1111

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

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Zrrronggg!

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.



FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Zrrronggg!

Zitatund ich glaube auch da wird dann passend gerundet.

das ist korrekt, man sollte aber wissen dass es so ist.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

ezekiel1111

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