Automatisches weiterschalten ins nächste cmd.

Begonnen von Hi2Helmi, 18 Oktober 2017, 22:30:07

Vorheriges Thema - Nächstes Thema

Hi2Helmi

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.
MfG
Florian

amenomade

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.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Hi2Helmi

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.
MfG
Florian

amenomade

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
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Hi2Helmi

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.
MfG
Florian

amenomade

Ändert sich [wz_fb_1:cSceneSet] inzwischen?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Hi2Helmi

#6
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).
MfG
Florian

Hi2Helmi

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)
MfG
Florian

Hi2Helmi

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.
MfG
Florian

amenomade

#9
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
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Hi2Helmi

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!
MfG
Florian

amenomade

Zeig mal bitte die Events vom Eventmonitor und genau wie dein geändertes DOIF aussieht.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Hi2Helmi

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.
MfG
Florian