FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: wowogiengen am 27 Juli 2019, 13:32:45

Titel: Verkettung von fhem Befehlen im DoIF
Beitrag von: wowogiengen am 27 Juli 2019, 13:32:45
Hallo,
ich habe folgendes definiert:
defmod zaehler_notify_DOIF_1 DOIF ([zaehler_notify:"^zaehler:.-1$"]) (set VentilatorSpeisPower  off;;set VentilatorSpeisDirection off;;set VentilatorSpeisPower on;; ) \
DOELSEIF ([zaehler_notify:"^zaehler:.0$"])  (set VentilatorSpeisPower  off;;)\
DOELSEIF ([zaehler_notify:"^zaehler:.1$"])  (set VentilatorSpeisPower  off;; set VentilatorSpeisDirection on;; set VentilatorSpeisPower  on;; )
attr zaehler_notify_DOIF_1 room Speis
attr zaehler_notify_DOIF_1 verbose 5

setstate zaehler_notify_DOIF_1 cmd_2
setstate zaehler_notify_DOIF_1 2019-07-27 13:23:27 Device zaehler_notify
setstate zaehler_notify_DOIF_1 2019-07-27 13:23:27 cmd 2
setstate zaehler_notify_DOIF_1 2019-07-27 13:23:27 cmd_event zaehler_notify
setstate zaehler_notify_DOIF_1 2019-07-27 13:23:27 cmd_nr 2
setstate zaehler_notify_DOIF_1 2019-07-27 13:23:27 e_zaehler_notify_events zaehler: 0
setstate zaehler_notify_DOIF_1 2019-07-27 13:21:18 mode enabled
setstate zaehler_notify_DOIF_1 2019-07-27 13:23:27 state cmd_2



Damit soll und wird ein Ventilator geschalten, welcher 2 Phaseneingänge  hat, eine für Links- und eine für Rechtslauf.

Da jedoch durch set VentilatorSpeisDirection on;; set VentilatorSpeisPower  on;;
die Leistung aufgeschalten werden könnte, bevor der Ventilator gestoppt hat, zieht der Motor natürlich viel Strom, wird vlt. heiß und brennt mir irgendwann durch.

In meinem anderen Device habe ich das so gelöst:

defmod ntfy_Ventilator notify (Drehrichtung:RAUS|Drehrichtung:REIN|Drehrichtung:toggle)\
{\
if (Value("VentilatorSpeisPower") eq "off")\
{\
if (Value("Drehrichtung") eq "RAUS")\
{\
fhem("set VentilatorSpeisDirection off");;;;\
}\
else\
{\
if (Value("Drehrichtung") eq "REIN")\
{\
fhem("set VentilatorSpeisDirection on");;;;\
}\
else \
{\
if (Value("Drehrichtung") eq "toggle")\
{ \
fhem("set VentilatorSpeisDirection toggle");;;;\
}\
}\
}\
}\
else\
{\
if (Value("VentilatorSpeisPower") eq "on")\
{\
fhem("set VentilatorSpeisPower off");;;;\
fhem("set Leistung AUS");;;;\
fhem("define a2b at +00:00:10 set Leistung AN");;\
fhem("define a2a at +00:00:10 set VentilatorSpeisPower on");;\
if (Value("Drehrichtung") eq "REIN")\
{\
fhem("set VentilatorSpeisDirection on");;;;\
}\
else\
{\
if (Value("Drehrichtung") eq "RAUS")\
{\
fhem ("set VentilatorSpeisDirection off");;\
}\
else \
{\
if (Value("Drehrichtung") eq "toggle")\
{ \
fhem("set VentilatorSpeisDirection toggle");;;;\
}\
}\
}\
\
}\
}\
}
attr ntfy_Ventilator room Speis

setstate ntfy_Ventilator 2019-07-27 13:08:10
setstate ntfy_Ventilator 2019-07-27 13:00:22 state active

d.h. die Leistung wird mittels "at" verzögert aufgeschalten.

Das mit dem Abfragen auf toggle funktioniert auch nicht richtig, ist hier aber nicht relevant...

Kann ich die beiden at-Befehle genauso in mein DoIF übernehmen? oder muss ich das da dann anders schreiben?`
Viele Grüße
Wolfgang
Titel: Antw:Verkettung von fhem Befehlen im DoIF
Beitrag von: DasQ am 27 Juli 2019, 16:07:56
du hast in doif ein attribut wait (https://fhem.de/commandref_DE.html#DOIF_wait), normal sollte das helfen.

Zitatwait

Das Attribut verzögert die Befehlsausführung, nach wahr werden einer Bedingung.

Laufende Wait-Timer werden bei einem eingeleiteten Statuswechsel des DOIF abgebrochen, daher werden die zu verzögernden Befehle nicht mehr ausgeführt.
Titel: Antw:Verkettung von fhem Befehlen im DoIF
Beitrag von: wowogiengen am 27 Juli 2019, 18:29:50
Zitat von: DasQ am 27 Juli 2019, 16:07:56
du hast in doif ein attribut wait (https://fhem.de/commandref_DE.html#DOIF_wait), normal sollte das helfen.
Hallo DasQ,
ich will ja nicht den ganzen Zweig verzögern, sondern nur, dass die Leistung wieder eingeschalten wird.
Viele Grüße
Wolfgang
Titel: Antw:Verkettung von fhem Befehlen im DoIF
Beitrag von: amenomade am 27 Juli 2019, 19:20:54
Zitat von: wowogiengen am 27 Juli 2019, 18:29:50
Hallo DasQ,
ich will ja nicht den ganzen Zweig verzögern, sondern nur, dass die Leistung wieder eingeschalten wird.
Viele Grüße
Wolfgang
wait ist trotzdem deine Lösung. DasQ hat dir den Link gegeben. Zuerst lesen, erst dann evtl mit "ich will ja nicht... sondern nur..." zurück kommen.
Zitat von: CommandRefDOIF (Bedingung1)
(set ...) ## erster Befehl der ersten Sequenz soll um eine Sekunde verzögert werden
(set ...) ## zweiter Befehl der ersten Sequenz soll um 2 Sekunden nach dem ersten Befehl verzögert werden
DOELSEIF (Bedingung2)
(set ...) ## erster Befehl der zweiten Sequenz soll um 3 Sekunden verzögert werden
(set ...) ## zweiter Befehl der zweiten Sequenz soll um 0,5 Sekunden nach dem ersten Befehl verzögert werden

attr <DOIF-module> wait 1,2:3,0.5

Wenn wir dabei sind, die Verkettung von Befehlen in DOIF ist nicht mit ;; sondern mit Koma, oder in deinem Fall wo Du Verzögerungen brauchst, getrennte Klammernpaare. Da würde auch helfen, CommandRef zu lesen.
Titel: Antw:Verkettung von fhem Befehlen im DoIF
Beitrag von: wowogiengen am 27 Juli 2019, 20:05:33
Hallo,
ja, ich habe die CommandRef nicht gelesen, zumindest nicht soweit bis zu den attributen...
Ich habe aber auch so meine Probleme mit den Beispielen oder der Befehlssyntax an sich, da steig ich oft nicht durch...
ich habs jetzt mal so programmiert:
defmod zaehler_notify_DOIF_1 DOIF ([zaehler_notify:"^zaehler:.-1$"]) \
(set VentilatorSpeisPower off)\
(set VentilatorSpeisDirection off)\
(set VentilatorSpeisPower on) \
DOELSEIF ([zaehler_notify:"^zaehler:.0$"])\
(set VentilatorSpeisPower off)\
DOELSEIF ([zaehler_notify:"^zaehler:.1$"])\
(set VentilatorSpeisPower off)\
(set VentilatorSpeisDirection on)\
(set VentilatorSpeisPower on)
attr zaehler_notify_DOIF_1 room Speis
attr zaehler_notify_DOIF_1 verbose 5
attr zaehler_notify_DOIF_1 wait 0,0,2:0:0,0,2


Damit sollte dann die Leistung immer erst nach 2 Sekunden aufgeschalten werden, wobei ich vielleicht auch eher 5 oder noch mehr nehmen sollte...

Viele Grüße
und Danke für eure Mühe - bin bestimmt nicht der einzige, der etwas dusselig ist

Wolfgang
Titel: Antw:Verkettung von fhem Befehlen im DoIF
Beitrag von: amenomade am 27 Juli 2019, 22:25:04
Zitat von: wowogiengen am 27 Juli 2019, 20:05:33
Ich habe aber auch so meine Probleme mit den Beispielen oder der Befehlssyntax an sich, da steig ich oft nicht durch...

Viele Grüße
und Danke für eure Mühe - bin bestimmt nicht der einzige, der etwas dusselig ist

Wolfgang
Kein Thema. Dafür ist das Anfängersforum da. Aber bitte erst lesen, was empfohlen wird, dann probieren, und erst dann nachfragen ;)