FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Hi2Helmi am 18 Oktober 2017, 22:30:07

Titel: Automatisches weiterschalten ins nächste cmd.
Beitrag von: Hi2Helmi am 18 Oktober 2017, 22:30:07
Hallo,
ich baue gerade ein DOIF und frage mich, ob es eine Möglichkeit gibt automatisch von einem cmd nach einer gewissen Zeit ins nächste zu schalten.
Titel: Antw:Automatisches weiterschalten ins nächste cmd.
Beitrag von: amenomade am 18 Oktober 2017, 22:49:40
Ich würde sagen: ja, mit set <doifname> cmd<n> und dem wait Attribut.
Wäre aber produktiver zu zeigen, was Du schon hast, und was du machen willst.
Titel: Antw:Automatisches weiterschalten ins nächste cmd.
Beitrag von: Hi2Helmi am 19 Oktober 2017, 18:59:36
Verstehe ich nicht, bei mit funktioniert dein Tip leider nicht:

define wz_beschattung_hand DOIF ([wz_fb_1:cSceneSet]==3 and $cmd=~"0|3") \
DOELSEIF (([wz_fb_1:cSceneSet]==3) and ($cmd==1))\
(set wz_beschattung_hand cmd_3)\
DOELSEIF (([wz_fb_1:cSceneSet]==3) and ($cmd==3))


attr wz_beschattung_hand alias Beschattung Hand
attr wz_beschattung_hand group Beschattung
attr wz_beschattung_hand icon fts_shutter_manual
attr wz_beschattung_hand room 01 Wohnzimmer
attr wz_beschattung_hand selftrigger wait
attr wz_beschattung_hand wait 0:0:10


Im Moment ist es noch ein Test DOIF, später würde ich gerne mit meiner FB die Automatik für meine Jalousien Ein bzw. Ausschalten und dies mit meiner RGB Leuchte signalisieren, diese soll beim Einschalten 2 Sekunden lang grün und beim Ausschalten 2 Sekunden lang rot leuchten.
Titel: Antw:Automatisches weiterschalten ins nächste cmd.
Beitrag von: amenomade am 19 Oktober 2017, 20:37:48
Sorry, dein Test DOIF verstehe ich immer noch nicht. Wie sehen die Befehle aus, die Du ausführen möchtest, um deine RGB Leuchte zu signalisieren? Und wie sehen die Befehle aus, womit Du die Jalousienautomatik schalten willst? Warum brauchst so von cmd zu cmd zu springen?

Reicht nicht so ein DOIF (pseudocode)?
([Jalousieautomatik] eq "on")
     (set RGBLeuchte grün)
     (set RGBLeuchte aus)
DOELSEIF ([Jalousieautomatik] eq "off")
    (set RGBLeuchte rot)
    (set RGBLeuchte aus)

attr <doif> wait 0,2:0,2
Titel: Antw:Automatisches weiterschalten ins nächste cmd.
Beitrag von: Hi2Helmi am 19 Oktober 2017, 21:43:23
Danke schon mal für deine Antwort, mein Code sieht jetzt so aus:

([wz_fb_1:cSceneSet]==3 and $cmd=~"0|2")
(set wz_rgb RGB ff0000,setreading wz_beschattung_hand handbetrieb an)
(set wz_rgb RGB 000000)
DOELSEIF ([wz_fb_1:cSceneSet]==3 and $cmd==1.2)
(set wz_rgb RGB 00ff00,setreading wz_beschattung_hand handbetrieb aus)
(set wz_rgb RGB 000000)

attr wz_beschattung_hand wait 0,2:0,2


Wenn ich allerdings meine Fernbedienung drücke kommt nach dem ersten drücken wie erwartet der erste "Ausführungsstrang" auch mit dem passendem Abstand, wenn ich dann nochmal drücke sollte eigentlich das DOELSEIF ausgeführt werden, dies passiert aber nicht.

Habe auch schon
DOELSEIF ([wz_fb_1:cSceneSet]==3 and $cmd==1)
(set wz_rgb RGB 00ff00,setreading wz_beschattung_hand handbetrieb aus)
(set wz_rgb RGB 000000)
probiert.
Titel: Antw:Automatisches weiterschalten ins nächste cmd.
Beitrag von: amenomade am 20 Oktober 2017, 01:40:58
Ändert sich [wz_fb_1:cSceneSet] inzwischen?
Titel: Antw:Automatisches weiterschalten ins nächste cmd.
Beitrag von: Hi2Helmi am 20 Oktober 2017, 15:59:32
Ja hat den Wert 3 angenommen, jedesmal wenn ich an der FB auf das X drücke. Es ist eine Keyfob von Fibaro (nur zur Info).
Titel: Antw:Automatisches weiterschalten ins nächste cmd.
Beitrag von: Hi2Helmi am 20 Oktober 2017, 16:36:55
Wenn ich den set Befehl zum Ausschalten der Lampe weglasse funktioniert das umschalten!

([wz_fb_1:cSceneSet]==3 and $cmd=~"0|2")
(set wz_rgb RGB ff0000,setreading wz_beschattung_hand handbetrieb an)
##(set wz_rgb RGB 000000)
DOELSEIF ([wz_fb_1:cSceneSet]==3 and $cmd==1)
(set wz_rgb RGB 00ff00,setreading wz_beschattung_hand handbetrieb aus)
##(set wz_rgb RGB 000000)
Titel: Antw:Automatisches weiterschalten ins nächste cmd.
Beitrag von: Hi2Helmi am 20 Oktober 2017, 16:52:00
Ich habe jetzt eine Lösung gefunden:

([wz_fb_1:cSceneSet]==3 and $cmd=~"0|2")
(set wz_rgb RGB ff0000,setreading wz_beschattung_hand handbetrieb an,defmod wieder_aus at +00:00:02 set wz_rgb RGB 000000)
DOELSEIF ([wz_fb_1:cSceneSet]==3 and $cmd==1)
(set wz_rgb RGB 00ff00,setreading wz_beschattung_hand handbetrieb aus,defmod wieder_aus at +00:00:02 set wz_rgb RGB 000000)


Verstehe nur nicht, warum der Versuch von oben

([wz_fb_1:cSceneSet]==3 and $cmd=~"0|2")
(set wz_rgb RGB ff0000,setreading wz_beschattung_hand handbetrieb an)
(set wz_rgb RGB 000000)
DOELSEIF ([wz_fb_1:cSceneSet]==3 and $cmd==1.2)
(set wz_rgb RGB 00ff00,setreading wz_beschattung_hand handbetrieb aus)
(set wz_rgb RGB 000000)


nicht funktioniert.
Titel: Antw:Automatisches weiterschalten ins nächste cmd.
Beitrag von: amenomade am 20 Oktober 2017, 18:12:24
Weil vermutlich das DOIF in einem anderen Zustand gewechselt hatte, der mit $cmd==1.2 nicht identifizierbar war. Oder gar nicht gewechselt hatte, da keine weitere Bedingung mehr wahr war.

Deswegen meine vorherige Frage: hat sich [wz_fb_1:cSceneSet] inzwischen geändert? Ich meine z.B. den Wert 2 oder 1 genommen.

Und die Benutzung von $cmd muss man gut verstehen. Ist immer ein bisschen tricky

Probier mal z.B. mit:
([wz_fb_1:cSceneSet]==3 and [?wz_beschattung_hand:handbetrieb] eq "aus")
(set wz_rgb RGB ff0000,setreading wz_beschattung_hand handbetrieb an)
(set wz_rgb RGB 000000)
DOELSEIF ([wz_fb_1:cSceneSet]==3 and [?wz_beschattung_hand:handbetrieb] eq "aus")
(set wz_rgb RGB 00ff00,setreading wz_beschattung_hand handbetrieb aus)
(set wz_rgb RGB 000000)


attr <doifname> wait 0,2:0,2
attr <doifname> do resetwait
Titel: Antw:Automatisches weiterschalten ins nächste cmd.
Beitrag von: Hi2Helmi am 22 Oktober 2017, 19:07:13
Danke für die Antwort, so funktionierte es.
Habe es noch meinen Ansprüchen angepasst:

([wz_fb_1:cSceneSet] eq "3" and [?wz_beschattung_hand:handbetrieb] eq "an")
(setreading wz_beschattung_hand rgb [wz_rgb:RGB],set wz_rgb RGB 00ff00,setreading wz_beschattung_hand handbetrieb aus)
(set wz_rgb RGB [wz_beschattung_hand:rgb])
DOELSEIF ([wz_fb_1:cSceneSet] eq "3" and [?wz_beschattung_hand:handbetrieb] eq "aus")
(setreading wz_beschattung_hand rgb [wz_rgb:RGB],set wz_rgb RGB ff0000,setreading wz_beschattung_hand handbetrieb an)
(set wz_rgb RGB [wz_beschattung_hand:rgb])


Sobald ich aber cSceneSet gegen cSceneDim tausche dann funktioniert es nicht mehr.
Zur kurzen Erklärung:
cSceneSet ist ein normaler kurzer Tastendruck
cSceneDim ist ein langer Tastendruck der mit cSceneDimEnd (welcher erst mal ignoriert wird) beendet wird.

Doch sobald ich in diesem DOIF getauscht habe, funktioniert auch ein anderes DOIF von der Fernbedienung nicht mehr, obwohl ich da nichts gemacht habe.

Hier das andere DOIF:

([wz_fb_1:cSceneSet]==1 and $cmd=~"0|2")
   (set wz.rgb on 10)
DOELSEIF ([wz_fb_1:cSceneSet]==1 and $cmd==1)
   (set wz.rgb off 10)


Jetzt stehe ich völlig auf dem Schlauch.
Habe auch schon im Event Monitor geschaut, bei jedem Tastendruck ob kurz oder lang wird "nur" der Richtige Event ausgelöst und auch nur einmal!
Titel: Antw:Automatisches weiterschalten ins nächste cmd.
Beitrag von: amenomade am 23 Oktober 2017, 09:53:59
Zeig mal bitte die Events vom Eventmonitor und genau wie dein geändertes DOIF aussieht.
Titel: Antw:Automatisches weiterschalten ins nächste cmd.
Beitrag von: Hi2Helmi am 24 Oktober 2017, 21:26:57
Ich weiß nicht ob ich es diese Woche noch schaffe und Zeit dazu finde. Aber nächste Woche habe ich Urlaub, da werde ich mich damit nochmal beschäftigen.