Das Problem hatte ich schon mal und nie richtig gelöst.
Ich habe einen FS20-Wand-Schalter, den ich auf doppelte Kanalzahl eingestellt habe. Wenn ich jetzt längere Befehlketten damit auslöse, wird immer wieder mal das Toggeln unbeabsichtigt wiederholt. Das passiert auch dann, wenn ich den Befehl per Webinterface auslöse - liegt also nicht am Schalter selber. Ich hatte schon unterschiedliche Varianten mit und ohne "Untoggle" versucht - ohne Erfolg.
Der erste Ablauf ist:
- Taste gedrückt
- Ansage über Tablet, abhängig vom Zustand (Fenster sind offen oder geschlossen)
- Dummy schalt auf entgegengesetzten Zustand
Das funktioniert
der Zweite Ablauf ist:
- Taste gedrückt
- Ansage wie oben
- HiFi und Fernseher wird auschgeschaltet
es folgt unbeabsichtigt:
- der nächste Toggle-Befehl, als ob die Taste gedrückt worden sei
- der Ablauf wiederholt sich , manchmal 3 - 4 Mal
Ich spare mir die Textpassagen der Config, da ich hier schon unterschiedlichste Varianten mit DOIF oder mit notify, mit und ohne unterschiedlichen Hilfsvariablen getestet habe.
Schalte ich das ganze statt mit einem Toggle mit einem Schalter, dann funktioniert es wunderbar.
Untoggle ist mAn eine Notloesung, was prinzipbedingt nicht perfekt funktionieren kann und ist deswegen auch nicht Teil des FS20 Moduls.
Ich wuerde das Problem mit dem Event-Monitor oder "info timer" debuggen, ich vermute, dass irgendwelche Events doppelt gesendet / interpretiert werden.
Danke für den Hinweis. Wie gesagt, sowohl mit oder ohne Untoggle kommt der Fehler.
Aber ich verstehe meinen Post auch mehr als Hinweis für Leidensgenossen, dass komplexere Aufgaben besser nicht mittels Kanalverdopplung der FS20-Schalter angegangen werden sollen. Hab da wirklich schon von vorn bis hinten debugged und nichts gefunden - was ja nichts heißen soll. Wird eine längere Kette an Komandos abgearbeitet, scheint der "Toggle-Befehl" irgendwie noch im System zu hängen und wieder aktiv zu werden. Da hilft auch kein Attribut wie event-min-interval.
ZitatWird eine längere Kette an Komandos abgearbeitet, scheint der "Toggle-Befehl" irgendwie noch im System zu hängen und wieder aktiv zu werden.
Der Toggle-Befehl "hängt" nicht im System und wird dann irgendwann wieder aktiv.
Das Event triggert dein notify und dann hat es sich damit.
Wenn das Event öfter gesendet wird triggert logischerweise auch das notify öfter.
Prüfen kann man das schön, wie Rudi auch vorgeschlagen hat, mit dem EventMonitor.
EventMonitor öffnen und Taste drücken und schauen was so alles passiert.
Ich hatte auch FS20-Sender mit doppelter Kanalzahl in Betrieb und nie Probleme mit meinen notifys.
Aber wenn du Hilfe willst wäre es nicht verkehrt einen deiner "Problem-Codes" zu zeigen.
Meist liegt es ja einfach an einem nicht vorhandenen/falschen regexp.
Edith:
ZitatIch spare mir die Textpassagen der Config,
Ah ja, ok.
In diesem Fall spare ich mir dann die weiteren Hilfeversuche.
Der gesamte Code soll ja nicht das Problem sein. Will nur nicht so dreist sein zu erwarten, dass sich jemand die Zeit nimmt, das wirklich durchzukämpfen. Wie gesagt, das war so das Resultat längerer Tests mit unterschiedlichen Konfigurationen.
Hier der Text, wie alles funktioniert, egal, ob ich wirklich den Wandschalter drücke oder die Button im Wabinterface "toggle".
#FS20_Y ist der FS20-Wand-Toggle-Schalter für Person2
define FS20_Y FS20 632d c3
attr FS20_Y IODev CUL_0
attr FS20_Y room FS20,Security
attr FS20_Y sortby 2
attr FS20_Y verbose 5
attr FS20_Y webCmd toggle
#FS20_H ist der FS20-Wand-Toggle-Schalter für Person1
define FS20_H FS20 632d c2
attr FS20_H IODev CUL_0
attr FS20_H room FS20,Security
attr FS20_H sortby 1
attr FS20_H verbose 5
attr FS20_H webCmd toggle
define Person2 dummy
attr Person2 alarmDevice Sensor
attr Person2 alarmSettings alarm0,|Person2:on|daheim|off
attr Person2 devStateIcon on:status_available off:status_away_1@red
attr Person2 group Security
attr Person2 icon user_unknown
attr Person2 room Security
attr Person2 sortby 2
attr Person2 verbose 5
define Person1 dummy
attr Person1 alarmDevice Sensor
attr Person1 alarmSettings alarm0,|Person1:on|daheim|off
attr Person1 devStateIcon on:status_available off:status_away_1@red
attr Person1 group Security
attr Person1 icon user_unknown
attr Person1 room Security
attr Person1 sortby 1
attr Person1 verbose 5
define Haus_Zustand dummy
attr Haus_Zustand alarmDevice Sensor
attr Haus_Zustand alarmSettings |||on
define NF_Haus_nYnH notify FS20_Y { \
if (Value("Person2") eq "off" && Value("Person1") eq "off") { \
fhem "set Person2 on";; \
fhem "set Haus_Zustand 1" \
} \
elsif (Value("Person2") eq "off" && Value("Person1") eq "on") { \
fhem "set Person2 on";; \
fhem "set Haus_Zustand 2" \
} \
elsif (Value("Person2") eq "on" && Value("Person1") eq "off") { \
fhem "set Person2 off";; \
if (Value("Alle_Fenster") ne "Closed") {\
fhem "set Haus_Zustand 3" \
} \
elsif (Value("Alle_Fenster") eq "Closed") {\
fhem "set Haus_Zustand 4" \
} \
} \
elsif (Value("Person2") eq "on" && Value("Person1") eq "on") { \
fhem "set Person2 off";; \
fhem "set Haus_Zustand 5" \
} \
}
define NF_Haus_nHnY notify FS20_H { \
if (Value("Person2") eq "off" && Value("Person1") eq "off") { \
fhem "set Person1 on";; \
fhem "set Haus_Zustand 6" \
} \
elsif (Value("Person2") eq "off" && Value("Person1") eq "on") { \
fhem "set Person1 off";; \
if (Value("Alle_Fenster") ne "Closed") {\
fhem "set Haus_Zustand 7" \
} \
elsif (Value("Alle_Fenster") eq "Closed") {\
fhem "set Haus_Zustand 8" \
} \
} \
elsif (Value("Person2") eq "on" && Value("Person1") eq "off") { \
fhem "set Person1 on";; \
fhem "set Haus_Zustand 9" \
} \
elsif (Value("Person2") eq "on" && Value("Person1") eq "on") { \
fhem "set Person1 off";; \
fhem "set Haus_Zustand 10" \
} \
}
define NF_Text notify Haus_Zustand { \
if (Value("Haus_Zustand") eq "1") { \
fhem "set alabama ttsSay Hallo Person2. Endlich bist Du wieder zu Hause." \
} \
elsif (Value("Haus_Zustand") eq "2") { \
fhem "set alabama ttsSay Hallo Person2. Endlich bist Du wieder zu Hause. Person1 ist schon da." \
} \
elsif (Value("Haus_Zustand") eq "3") { \
fhem "set alabama ttsSay Person2. Es sind nicht alle Fenster geschlossen. Bitte kontrolliere das nochmal bevor Du weg gehst." \
} \
elsif (Value("Haus_Zustand") eq "4") { \
fhem "set alabama ttsSay Auf Wiedersehen Person2. Die Fenster sind geschlossen." \
} \
elsif (Value("Haus_Zustand") eq "5") { \
fhem "set alabama ttsSay Auf Wiedersehen Person2." \
} \
elsif (Value("Haus_Zustand") eq "6") { \
fhem "set alabama ttsSay Hallo Person1. Willkommen zu Hause." \
} \
elsif (Value("Haus_Zustand") eq "7") { \
fhem "set alabama ttsSay Person1. Es sind nicht alle Fenster geschlossen. Bitte kontrolliere das nochmal bevor Du weg gehst." \
} \
elsif (Value("Haus_Zustand") eq "8") { \
fhem "set alabama ttsSay Auf Wiedersehen Person1. Die Fenster sind geschlossen." \
} \
elsif (Value("Haus_Zustand") eq "9") { \
fhem "set alabama ttsSay Hallo Person1. Willkommen zu Hause. Person2 ist schon da." \
} \
elsif (Value("Haus_Zustand") eq "10") { \
fhem "set alabama ttsSay Auf Wiedersehen Person1." \
} \
}
define FileLog_Anwesenheit FileLog ./log/FileLog_Anwesenheit-%Y.log FS20_Person1:.*|FS20_Person2:.*|Person1:.*|Person2:.*
Setze ich nun dahinter beispielsweise
define DI_Haus DOIF([Person1] eq "on" or [Person2] eq "on") (set Alarmanlage off) DOELSE (set Alarmanlage on)
Dann wird (nicht immer, aber sehr häufig) nach dem einmaligen Klicken des FS20_Y oder FS20_H dieser im Anschluss ein- oder mehrmals hin und her geschaltet, mit allen folgenden Schritten. Es passiert nie, dass ein notify gar nicht ausgelöst wird - zumindest nicht häufiger als bei allen anderen FS20-Schaltern. Für mich ist das rätselhaft, da diese beiden Schalter FS20_H sowie FS20_Y ansonsten nirgends im Code vorkommen.
Ursprünglich war auch alles zusammen in einem notify oder einem DOIF, später hatte ich den Teil
define NF_Text notify Haus_Zustand
herausgenommen, in der Hoffnung, dass das hilft.
EDIT:
Das war mein erster Thread zu diesem Thema - falls es jemand wirklich interessiert. Zwischenzeitlich hat sich viel geändert, das eigentliche Problem blieb.
http://forum.fhem.de/index.php/topic,37207.msg295955.html#msg295955 (http://forum.fhem.de/index.php/topic,37207.msg295955.html#msg295955)