DOIF sendet mehrmals. Wie lässt sich das abstellen?

Begonnen von Burny4600, 08 Dezember 2016, 12:59:17

Vorheriges Thema - Nächstes Thema

Burny4600

Zum Test habe ich nur ein kleines DOIF Beispiel konfiguriert um das eigenartige Verhalten der ROLLO Steuerung zu finden.
Eine Fernbedienung öffnet bzw. schließt die Rollläden.
### OG1-Schlafzimmer
define R_OG1_SL_FB DOIF ([FB_R_OG1_Nord] eq "AUF" and [{sunrise(1800,"08:00")}-{sunset(-600)}])\
(set R_OG1_SL_P open)\
DOELSEIF\
([FB_R_OG1_Nord] eq "ZU")\
(set R_OG1_SL_P closed)
attr R_OG1_SL_FB alias Steuerung Fernbedienung Rollladen - OG1 Schlafzimmer
attr R_OG1_SL_FB devStateIcon initialize.*:control_minus P0:fts_shutter_10 P100:fts_shutter_100
attr R_OG1_SL_FB do always
attr R_OG1_SL_FB eventMap cmd_1:P0 cmd_2:P100
attr R_OG1_SL_FB group Steuerung
attr R_OG1_SL_FB icon fts_shutter_updown
attr R_OG1_SL_FB room OG1,OG1-Schlafzimmer,Rolllaeden

# -----------------------------------------------------------------------------------------------

### OG1-Bad
define R_OG1_BA_FB DOIF ([FB_R_OG1_Nord] eq "AUF")\
(set R_OG1_BA_P open)\
DOELSEIF\
([FB_R_OG1_Nord] eq "ZU")\
(set R_OG1_BA_P closed)
attr R_OG1_BA_FB alias Steuerung Fernbedienung Rollladen - OG1 Bad
attr R_OG1_BA_FB devStateIcon initialize.*:control_minus P0:fts_shutter_10 P100:fts_shutter_100
attr R_OG1_BA_FB do always
attr R_OG1_BA_FB eventMap cmd_1:P0 cmd_2:P100
attr R_OG1_BA_FB group Steuerung
attr R_OG1_BA_FB icon fts_shutter_updown
attr R_OG1_BA_FB room OG1,OG1-Bad,Rolllaeden

# -----------------------------------------------------------------------------------------------

### OG1-Wohnzimmer
define R_OG1_WZ_FB DOIF ([FB_R_OG1_Nord] eq "AUF")\
(set R_OG1_WZ_P open)\
DOELSEIF\
([FB_R_OG1_Nord] eq "ZU")\
(set R_OG1_WZ_P closed)
attr R_OG1_WZ_FB alias Steuerung Fernbedienung Rollladen - OG1 Wohnzimmer
attr R_OG1_WZ_FB devStateIcon initialize.*:control_minus P0:fts_shutter_10 P100:fts_shutter_100
attr R_OG1_WZ_FB do always
attr R_OG1_WZ_FB eventMap cmd_1:P0 cmd_2:P100
attr R_OG1_WZ_FB group Steuerung
attr R_OG1_WZ_FB icon fts_shutter_updown
attr R_OG1_WZ_FB room OG1,OG1-Wohnzimmer,Rolllaeden
attr R_OG1_WZ_FB verbose 5


Config ROLLOMODUL
define R_OG1_WZ_P ROLLO
attr R_OG1_WZ_P alias OG1 Wohnzimmer - Rollladen
attr R_OG1_WZ_P autoStop 0
attr R_OG1_WZ_P automatic-enabled on
attr R_OG1_WZ_P blockMode none
attr R_OG1_WZ_P cmdIcon half:remotecontrol/black_btn_MENUDroid open:remotecontrol/black_btn_CHUP closed:remotecontrol/black_btn_CHDOWN stop:remotecontrol/black_btn_STOP
attr R_OG1_WZ_P commandDown set R_OG1_WZ off
attr R_OG1_WZ_P commandStopDown set R_OG1_WZ off
attr R_OG1_WZ_P commandStopUp set R_OG1_WZ on
attr R_OG1_WZ_P commandUp set R_OG1_WZ on
attr R_OG1_WZ_P devStateIcon open:fts_shutter_10:closed closed:fts_shutter_100:open half:fts_shutter_50:closed drive-up:fts_shutter_up@red:stop drive-down:fts_shutter_down@red:stop position-100:fts_shutter_100:open position-90:fts_shutter_80:closed position-80:fts_shutter_80:closed position-70:fts_shutter_70:closed position-60:fts_shutter_60:closed position-50:fts_shutter_50:closed position-40:fts_shutter_40:open position-30:fts_shutter_30:open position-20:fts_shutter_20:open position-10:fts_shutter_10:open position-0:fts_shutter_10:closed
attr R_OG1_WZ_P excessBottom 0
attr R_OG1_WZ_P excessTop 0
attr R_OG1_WZ_P group Steuerung
attr R_OG1_WZ_P icon fts_shutter_updown
attr R_OG1_WZ_P reactionTime 1
attr R_OG1_WZ_P resetTime 1
attr R_OG1_WZ_P room OG1,OG1-Wohnzimmer,Rolllaeden
attr R_OG1_WZ_P secondsDown 20
attr R_OG1_WZ_P secondsUp 21
attr R_OG1_WZ_P switchTime 1
attr R_OG1_WZ_P type normal
attr R_OG1_WZ_P verbose 5
attr R_OG1_WZ_P webCmd position:half:open:closed:stop


Wie man aus dem LOG sieht wird der Rollladen mehrmals angesteuert, was aber nicht sein dürfte.
Es wird immer ein kurzer Zwischenstop ausgeführt wenn die Steuerrung über ein DOIF erfolgt.
2016.12.08 12:15:35.730 3: FS20 set FB_R_OG1_Nord on
2016.12.08 12:15:35.731 5: nanoCUL868_OG1 sending F1b1b0811
2016.12.08 12:15:35.732 5: SW: F1b1b0811
2016.12.08 12:15:35.952 2: nanoCUL433_OG1 IT_set: R_OG1_BA on
2016.12.08 12:15:36.953 2: nanoCUL433_OG1 IT_set: R_OG1_SL on
2016.12.08 12:15:37.452 5: ROLLO (R_OG1_WZ_P) >> Set (open,)
2016.12.08 12:15:37.705 5: ROLLO (R_OG1_WZ_P) >> Start
2016.12.08 12:15:37.706 4: ROLLO (R_OG1_WZ_P) drive from 100 to 0. command: open. state: closed
2016.12.08 12:15:37.707 4: ROLLO (R_OG1_WZ_P) position: 100 -> 0 / direction: up
2016.12.08 12:15:37.709 5: ROLLO (R_OG1_WZ_P) >> calculateDriveTime | going up: from 100 to 0
2016.12.08 12:15:37.710 4: ROLLO (R_OG1_WZ_P) calculateDriveTime: oldpos=100,newpos=0,direction=up,time=21,steps=100,drivetime=23
2016.12.08 12:15:37.963 4: ROLLO (R_OG1_WZ_P) execute following commands: set R_OG1_WZ on; ;
2016.12.08 12:15:38.213 3: FS20 set R_OG1_WZ on
2016.12.08 12:15:38.214 5: nanoCUL868_OG1 sending F1b1b1511
2016.12.08 12:15:38.266 4: ROLLO (R_OG1_WZ_P) stop in 23 seconds.
2016.12.08 12:15:38.424 5: SW: F1b1b1511
2016.12.08 12:15:38.446 4: FS20 FB_R_OG1_Nord on
2016.12.08 12:15:38.762 2: nanoCUL433_OG1 IT_set: R_OG1_BA on
2016.12.08 12:15:40.096 2: nanoCUL433_OG1 IT_set: R_OG1_SL on
2016.12.08 12:15:40.595 5: ROLLO (R_OG1_WZ_P) >> Set (open,)
2016.12.08 12:15:40.597 5: ROLLO (R_OG1_WZ_P) >> calculatePosition
2016.12.08 12:15:40.598 4: ROLLO (R_OG1_WZ_P) calculated Position is 90.4761904761905; rest drivetime is 19
2016.12.08 12:15:41.342 5: ROLLO (R_OG1_WZ_P) >> Start
2016.12.08 12:15:41.343 4: ROLLO (R_OG1_WZ_P) drive from 90.4761904761905 to 0. command: open. state: drive-up
2016.12.08 12:15:41.344 4: ROLLO (R_OG1_WZ_P) position: 90.4761904761905 -> 0 / direction: up
2016.12.08 12:15:41.346 5: ROLLO (R_OG1_WZ_P) >> calculateDriveTime | going up: from 90.4761904761905 to 0
2016.12.08 12:15:41.347 4: ROLLO (R_OG1_WZ_P) calculateDriveTime: oldpos=90.4761904761905,newpos=0,direction=up,time=21,steps=90.4761904761905,drivetime=21
2016.12.08 12:15:41.591 4: ROLLO (R_OG1_WZ_P) execute following commands: set R_OG1_WZ on; ;
2016.12.08 12:15:41.836 3: FS20 set R_OG1_WZ on
2016.12.08 12:15:41.837 5: nanoCUL868_OG1 sending F1b1b1511
2016.12.08 12:15:41.882 4: ROLLO (R_OG1_WZ_P) stop in 21 seconds.
2016.12.08 12:15:41.963 3: nanoCUL433 IT: R_OG1_BA AUF->on
2016.12.08 12:15:42.010 3: nanoCUL433 IT: R_OG1_SL AUF->on
2016.12.08 12:15:42.105 3: nanoCUL433 IT: R_OG1_BA AUF->on
2016.12.08 12:15:42.200 3: nanoCUL433 IT: R_OG1_SL AUF->on
2016.12.08 12:15:42.551 5: SW: F1b1b1511
2016.12.08 12:15:42.590 4: FS20 R_OG1_WZ on
2016.12.08 12:15:42.881 4: FS20 R_OG1_WZ on
2016.12.08 12:15:43.126 5: CUL/RAW: /F1B
2016.12.08 12:15:43.129 5: CUL/RAW: F1B/1B001117

2016.12.08 12:15:43.130 4: CUL_Parse: nanoCUL868_OG1 F1B1B001117 -62.5
2016.12.08 12:15:43.132 5: nanoCUL868_OG1: dispatch 810b04xx0101a0011b1b000011
2016.12.08 12:15:44.004 5: CUL/RAW: /F1B1B001117

2016.12.08 12:15:44.006 4: CUL_Parse: nanoCUL868_OG1 F1B1B001117 -62.5
2016.12.08 12:15:44.008 5: nanoCUL868_OG1: dispatch 810b04xx0101a0011b1b000011
2016.12.08 12:15:59.000 2: nanoCUL433_OG1 IT_set: R_OG1_BA on
2016.12.08 12:15:59.485 3: nanoCUL433_EG IT: R_OG1_BA AUF->on
2016.12.08 12:16:00.012 2: nanoCUL433_OG1 IT_set: R_OG1_SL on
2016.12.08 12:16:00.709 3: nanoCUL433_EG IT: R_OG1_SL AUF->on
2016.12.08 12:16:10.111 5: ROLLO (R_OG1_WZ_P) >> Timer
2016.12.08 12:16:10.113 5: ROLLO (R_OG1_WZ_P) >> Stop
2016.12.08 12:16:10.116 4: ROLLO (R_OG1_WZ_P): stops from drive-up at position 0
2016.12.08 12:16:10.119 3: FS20 set R_OG1_WZ on
2016.12.08 12:16:10.120 5: nanoCUL868_OG1 sending F1b1b1511
2016.12.08 12:16:10.122 5: SW: F1b1b1511
2016.12.08 12:16:10.203 4: ROLLO (R_OG1_WZ_P) stopped by excute the command: set R_OG1_WZ on
2016.12.08 12:16:12.147 4: FS20 R_OG1_WZ on
2016.12.08 12:16:12.851 5: CUL/RAW: /F1B1B001117

2016.12.08 12:16:12.853 4: CUL_Parse: nanoCUL868_OG1 F1B1B001117 -62.5
2016.12.08 12:16:12.855 5: nanoCUL868_OG1: dispatch 810b04xx0101a0011b1b000011


Wenn der Rollladen direkt oder über das ROLLO Modul gesteuert wird tritt dieses Fehlerverhalten nicht auf.
Auch mit Hilfe der Attribute cmdpause 10 und repeatsame 1 ändert sich nichts am Verhalten.
Auch hier erfolgt genauso eine mehrfache Ansteuerrung.
LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

Ellert


Burny4600

#2
Ich benötige in dieser Anwendung das bei einem neuerlichen Tastendruck auf on oder off der Befehl ein zweites mal geschickt wird um den Rollladen wieder zu stoppen.
Wenn ich das do always weg lasse funktioniert das nicht mehr.
LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

CoolTux

Nein ist es nicht. Es kommt auf den Anwendungsfall an.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Burny4600

Zitat von: CoolTux am 08 Dezember 2016, 16:31:44
Nein ist es nicht. Es kommt auf den Anwendungsfall an.
Und wie kann ich das mit DOIF lösen?
LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Burny4600

Was soll ich mit dem DOELSE ()

Ich habe je einen WebButton für AUF und für ZU.
Wenn ich ein zweites Mal auf AUF oder auf ZU drücke soll der Rollladen in der vorher definierten Fahrtrichtung stehen bleiben.
([FB_R_OG1_Nord] eq "AUF")
(set R_OG1_WZ_P open)
DOELSEIF
([FB_R_OG1_Nord] eq "ZU")
(set R_OG1_WZ_P closed)

LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

Ellert

Zitat von: Burny4600 am 08 Dezember 2016, 16:20:17
Ich benötige in dieser Anwendung das bei einem neuerlichen Tastendruck auf on oder off der Befehl ein zweites mal geschickt wird um den Rollladen wieder zu stoppen.
Wenn ich das do always weg lasse funktioniert das nicht mehr.
Dann gibt es noch die Möglichkeit auf Events zu triggern, statt auf Readings. Damit blendest Du die Auslöser aus, die bei Aktualisierung der Gerätereadings entstehen.

Burny4600

Nur was soll die Änderung auf Events verbessern?
Ob ich es so
([FB_R_OG1_Nord:"AUF"])
(set R_OG1_WZ_P open)
DOELSEIF
([FB_R_OG1_Nord:"ZU"])
(set R_OG1_WZ_P closed)

oder so
([FB_R_OG1_Nord] eq "AUF")
(set R_OG1_WZ_P open)
DOELSEIF
([FB_R_OG1_Nord] eq "ZU")
(set R_OG1_WZ_P closed)

ändert an dem Verhalten rein gar nichts.
LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

Ellert

Ich meinte nicht reguläre Ausdrücke für Readings, sondern komplette Events, wie ["^FB_R_OG1_Nord$:^AUF$"]

Damian

Zitat von: Burny4600 am 09 Dezember 2016, 17:01:47
Nur was soll die Änderung auf Events verbessern?
Ob ich es so
([FB_R_OG1_Nord:"AUF"])
(set R_OG1_WZ_P open)
DOELSEIF
([FB_R_OG1_Nord:"ZU"])
(set R_OG1_WZ_P closed)

oder so
([FB_R_OG1_Nord] eq "AUF")
(set R_OG1_WZ_P open)
DOELSEIF
([FB_R_OG1_Nord] eq "ZU")
(set R_OG1_WZ_P closed)

ändert an dem Verhalten rein gar nichts.

Es kann schon ein unterschiedliches Verhalten geben, denn bei [FB_R_OG1_Nord:"AUF"] wird tatsächlich das Vorkommen von "AUF" im Event zum Trigger. Bei [FB_R_OG1_Nord] eq "AUF" führt dagegen jedes Event des Devices FB_R_OG1_Nord zum Überprüfen der Bedingung.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Burny4600

Grundsätzlich sollte ein solches Verhalten gar nicht passieren laut DOIF commandref.
Das DOIF-Modul arbeitet mit Zuständen. Jeder Ausführungszweig DOIF/DOELSEIF..DOELSEIF/DOELSE stellt einen eigenen Zustand dar (cmd_1, cmd_2, usw.). Das Modul merkt sich den zuletzt ausgeführten Ausführungszweig und wiederholt diesen standardmäßig nicht. Ein Ausführungszweig wird erst dann wieder ausgeführt, wenn zwischenzeitlich ein anderer Ausführungszweig ausgeführt wurde, also ein Zustandswechsel stattgefunden hat. Dieses Verhalten ist sinnvoll, um zu verhindern, dass zyklisch sendende Sensoren (Temperatur, Feuchtigkeit, Helligkeit, usw.) zu ständiger Wiederholung des selben Befehls oder Befehlsabfolge führen.

Die Konfigurationen sollten nur einmal einen Zweig bearbeiten.
Das verhalten der DOIF Anwendungen ist wie das Prellen eines Kontaktes.
Obwohl nur einmal der Befehl abgesetzt wird, startet der Rollladen, stop und startet wie es im gefällt.

Was auffällt, ist wenn ich direkt den Funkaktor anspreche dieses Verhalten nicht ist.
Mache ich das gleiche mit dem ROLLO Modul tritt dieses sonderbare Verhalten auf, aber nur wenn ich DOIF verwende.
Nehme ich einen Dummy der das ROLLO Modul bedient funktioniert es auch.


LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

luetty

#12
Hast Du mal im Event-Monitor geguckt, wer die 2. (ungewollte) Aktion auslöst?
Ich hab mich vor kurzem in einer ähnlichen Problematik befunden und so den Fehler eingrenzen können.

Gerade dass mit den Events ist nicht zu unterschätzen, wenn man mehrere Auslösemöglichkeiten hat.
Bei mir war dass Problem (SpiegelBTRadio) nicht vorhanden, solange ich nur einen Dummy zum schalten hatte. Als der dash-Button dazu kam, funktionierte alles irgendwie nicht mehr stabil. Genau hier war dass Problem, dass ich den state des dash ausgelesen habe. Drückte ich auf den dummy, schlug das DOIF für den dash zu und schaltete nochmal.

Ellert


Damian

Es steht und fällt alles mit der Analyse der Events, die zu Triggerung des definierten DOIFs führen. Ich glaube da müssen wir noch etwas ausführlicher im WIKI darauf eingehen.

Ganz wichtig ist es alle Events im Event-Monitor aufzuzeichnen, die relevant sind, hier ist es ganz einfach: Filter im Event-Monitor auf FB_R_OG1_Nord setzen. Wenn man die hat, dann lässt sich innerhalb weniger Sekunden erklären warum sich das definierte Modul so verhält und nicht anders.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF