Hauptmenü

DOIF löst manchmal nicht aus

Begonnen von RockThisParty, 09 Januar 2018, 22:18:16

Vorheriges Thema - Nächstes Thema

RockThisParty

Hallo in die Runde!

Ich grabe mich seit einiger Zeit ins DOIF ... habe aber augenscheinlich noch zu vieles nicht verstanden  :-\

Anwendung:
Wenn ich an einem FS20-Wandschalter die Taste 3 lange drücke ("dimupdown") sollen die Musiccast-Lautsprecher (mc_kueche) auf Quelle netradio mit Sender NDR-Info geschaltet werden.
Den Sender muss ich über das Ändern des Attributs vorgeben.
Erschwerend kommt hinzu, dass das Sender-Vorwählen nur zuverlässig funktioniert, wenn die Lautsprecher vorher aus waren. Ist irgendwie ein Problem im Modul ...
Aaaalso:
- Wenn dimupdown und Lautsprecher an => Ausschalten, Warten, Attribut setzen, MitSenderEinschalten
- Wenn dimupdown und Lautsprecher aus => Attribut setzen, MitSenderEinschalten.

Das sieht bei mir so aus:
[mc_kueche_taste_3:"dimupdown"] and [MC_Kueche:state] eq "on")
(set MC_Kueche power standby,{Log3 "MC_Kueche",3,"Kurz warten nach Ausschalten"})
(attr MC_Kueche FavoriteNetRadioChannel 2, set MC_Kueche TurnFavNetRadioChannelOn, {Log3 "MC_Kueche",3,"DOIF Umschalten auf NDR Info"},set mc_kueche_taste_3 dimup)
DOELSEIF([mc_kueche_taste_3:"dimupdown"] and [MC_Kueche:state] eq "off")
(attr MC_Kueche FavoriteNetRadioChannel 2, set MC_Kueche TurnFavNetRadioChannelOn, {Log3 "MC_Kueche",3,"DOIF Einschalten mit NDR Info"},set mc_kueche_taste_3 dimup)

Zusätzlich
attr wait 0,1 gesetzt.

Das funktioniert so manchmal, aber oft erhalte ich gar keine Reaktion, obwohl das dimupdown-Event sicher ankommt.

Könnt Ihr mir helfen??

Vielen Dank im Voraus!

Frank_Huber

Ein komplettes list vom doif bitte...

Mit dem Handy online, daher kurz gefasst...


KernSani

spontan beurteilt könnte das am fehlendem do always liegen, aber wie Frank shon sagt, bitte list vom DOIF.
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

RockThisParty

So?
defmod mc_kueche_3_lang DOIF ([mc_kueche_taste_3:"dimupdown"] and [MC_Kueche:state] eq "on")\
(set MC_Kueche power standby,{Log3 "MC_Kueche",3,"Kurz warten nach Ausschalten"})\
(attr MC_Kueche FavoriteNetRadioChannel 2, set MC_Kueche TurnFavNetRadioChannelOn, {Log3 "MC_Kueche",3,"DOIF Umschalten auf NDR Info"},set mc_kueche_taste_3 dimup)\
DOELSEIF([mc_kueche_taste_3:"dimupdown"] and [MC_Kueche:state] eq "off")\
(attr MC_Kueche FavoriteNetRadioChannel 2, set MC_Kueche TurnFavNetRadioChannelOn, {Log3 "MC_Kueche",3,"DOIF Einschalten mit NDR Info"},set mc_kueche_taste_3 dimup)
attr mc_kueche_3_lang room DOIF,Kueche
attr mc_kueche_3_lang wait 0,1

setstate mc_kueche_3_lang cmd_2
setstate mc_kueche_3_lang 2018-01-09 22:36:33 Device MC_Kueche
setstate mc_kueche_3_lang 2018-01-09 21:45:35 cmd 2
setstate mc_kueche_3_lang 2018-01-09 21:45:35 cmd_event mc_kueche_taste_3
setstate mc_kueche_3_lang 2018-01-09 21:45:35 cmd_nr 2
setstate mc_kueche_3_lang 2018-01-09 22:36:33 e_MC_Kueche_events FirmwareAvailable: 0
setstate mc_kueche_3_lang 2018-01-09 22:36:33 e_MC_Kueche_state off
setstate mc_kueche_3_lang 2018-01-09 22:22:56 e_mc_kueche_taste_3_events dimupdown
setstate mc_kueche_3_lang 2018-01-09 21:34:33 mode enabled
setstate mc_kueche_3_lang 2018-01-09 21:45:35 state cmd_2
setstate mc_kueche_3_lang 2018-01-09 21:45:35 wait_timer no timer



Und noch ein Nachtrag:
Das set ... dimup ist schon ein Versuch, das DOIF wieder "aufzuwecken", weil ich den Verdacht hatte, dass es nicht auslöst, weil sich der Status nicht geändert hat... hat aber nichts gebracht  :(

Mit do always löst es unendlich aus, da die Taste im Status dimupdown stehen bleibt bis man was anderes drückt.

Danke für die prompten ersten Reaktionen!!!

KernSani

naja, fast so...

list mc_kueche_3_lang

wäre besser.

ZitatMit do always löst es unendlich aus, da die Taste im Status dimupdown stehen bleibt bis man was anderes drückt.
Glaube ich nicht... das würde ja heißen, dass der Taster auch laufend events produziert, ich würde mal annehmen er bleibt im state "dimupdown", sendet aber nix.
Ich würde das nochmal überprüfen.
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

RockThisParty

Nun nochmal als list- Danke für die Aufklärung  :)

Internals:
   DEF        ([mc_kueche_taste_3:"dimupdown"] and [MC_Kueche:state] eq "on")
(set MC_Kueche power standby,{Log3 "MC_Kueche",3,"Kurz warten nach Ausschalten"})
(attr MC_Kueche FavoriteNetRadioChannel 2, set MC_Kueche TurnFavNetRadioChannelOn, {Log3 "MC_Kueche",3,"DOIF Umschalten auf NDR Info"})
DOELSEIF([mc_kueche_taste_3:"dimupdown"] and [MC_Kueche:state] eq "off")
(attr MC_Kueche FavoriteNetRadioChannel 2, set MC_Kueche TurnFavNetRadioChannelOn, {Log3 "MC_Kueche",3,"DOIF Einschalten mit NDR Info"})
   NAME       mc_kueche_3_lang
   NR         338
   NTFY_ORDER 50-mc_kueche_3_lang
   STATE      initialized
   TYPE       DOIF
   READINGS:
     2018-01-10 09:04:44   Device          MC_Kueche
     2018-01-10 09:02:39   cmd             0
     2018-01-10 09:04:44   e_MC_Kueche_events FirmwareAvailable: 0
     2018-01-10 09:04:44   e_MC_Kueche_state off
     2018-01-10 09:02:39   mode            enabled
     2018-01-10 09:02:39   state           initialized
   Regex:
   condition:
     0          EventDoIf('mc_kueche_taste_3',$hash,'dimupdown',1) and ReadingValDoIf($hash,'MC_Kueche','state') eq "on"
     1          EventDoIf('mc_kueche_taste_3',$hash,'dimupdown',1) and ReadingValDoIf($hash,'MC_Kueche','state') eq "off"
   devices:
     0           mc_kueche_taste_3 MC_Kueche
     1           mc_kueche_taste_3 MC_Kueche
     all         mc_kueche_taste_3 MC_Kueche
   do:
     0:
       0          set MC_Kueche power standby,{Log3 "MC_Kueche",3,"Kurz warten nach Ausschalten"}
       1          attr MC_Kueche FavoriteNetRadioChannel 2, set MC_Kueche TurnFavNetRadioChannelOn, {Log3 "MC_Kueche",3,"DOIF Umschalten auf NDR Info"}
     1:
       0          attr MC_Kueche FavoriteNetRadioChannel 2, set MC_Kueche TurnFavNetRadioChannelOn, {Log3 "MC_Kueche",3,"DOIF Einschalten mit NDR Info"}
     2:
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      FirmwareAvailable: 0
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev MC_Kueche
     triggerEvents:
       FirmwareAvailable: 0
     triggerEventsState:
       FirmwareAvailable: 0
   internals:
   itimer:
   readings:
     0           MC_Kueche:state
     1           MC_Kueche:state
     all         MC_Kueche:state
   trigger:
     all         mc_kueche_taste_3
   uiState:
   uiTable:
Attributes:
   room       DOIF,Kueche
   wait       0,1


Dass do always zu einer Dauerauslösung geführt hat, habe ich auch nicht verstanden. Der Taster sendet natürlich nicht dauernd und im Eventmonitor sehe ich auch nur ein Event.

Beim List oben nicht wundern. Das set ... dimup habe ich wieder entfernt, hat ja eh nicht geholfen 7nd war nur gedacht um eine erneute Statusänderung für das DOIF zu erzwingen.

Vielleicht hilft es: Ziemlich reproduzierbar löst der DOELSEIF-Zweig gar nicht aus.

automatisierer

Am besten gibst du uns noch die Events die der Taster erszeugt mit.

dimupdown stellt doch gewiss einen langen Tastendruck dar, oder? Könnte mir somit vorstellen, dass dieses Event so lange wiederholt gesendet wird, bis der Taster los gelassen wird. Daher wird das DOIF dann auch so oft getriggert, wie das Taster Device das Event raus haut.

Hat dieses Reading 'MC_Kueche:state' nur die beiden Werte 'on' und 'off' oder können da noch andere Werte drin stehen? z.B. 'standby'


RockThisParty

Ja, dimupdown ist ein langer Tastendruck, somit wird das ggf. auch mehrfach gesendet.
Als ich do always gesetzt hatte, wurde das DOIF aber endlos oft ausgeführt  :(

state von mc_kueche ist - soweit ich das bisher gesehen habe - nur on / off


Per

Statt die Hälfte des Codes doppelt zu schreiben kannst du auch den zweiten Teil doppelt aufrufen: set $SELF cmd_2

[mc_kueche_taste_3:"dimupdown"] and [MC_Kueche:state] eq "on")
(set MC_Kueche power standby,{Log3 "MC_Kueche",3,"Kurz warten nach Ausschalten"})
(set $SELF cmd_2)
DOELSEIF ([mc_kueche_taste_3:"dimupdown"] and [MC_Kueche:state] eq "off")
(attr MC_Kueche FavoriteNetRadioChannel 2, set MC_Kueche TurnFavNetRadioChannelOn, {Log3 "MC_Kueche",3,"DOIF Einschalten mit NDR Info"},set mc_kueche_taste_3 dimup)


Natürlich zzgl. der hier im Thread gefundenen Fehlerbehebung ;).

do always ist natürlich notwendig, aber vllt. hilft dir cmdpause.

automatisierer

Zitat von: RockThisParty am 10 Januar 2018, 11:48:01
Als ich do always gesetzt hatte, wurde das DOIF aber endlos oft ausgeführt  :(
das DOIF löst nur aus, wenn das EVENT vom Taster kommt. Und das kommt mit sicherheit nur wenn du selbigen drückst - Endlos kann also nicht sein. Wenn das EVENT oft kommt, dann ballert das DOIF auch oft - das ist klar.
Das kannst du durch cmdpause entprellen. Ich mache das nicht gerne so, nur wenn es nicht anders geht! Poste uns doch mal die Events, die von dem Taster bei langem Tastendruck erzeugt werden, evtl. kannst du auf etwas anderes als dimupdown regexen...

Per

Zitat von: automatisierer am 10 Januar 2018, 13:28:41
das DOIF löst nur aus, wenn das EVENT vom Taster kommt.
Gutes Stichwort: checkReadingEvent dürfte helfen!

RockThisParty

Danke für die diversen Hinweise. Ich werde mal testen und berichten ... braucht aber etwas Zeit.

Feststellen konnte ich schon, dass die Dauerauslösung mit do always wohl eine einmalige Seltsamkeit war. Das ist jedenfalls bei den wenigen Tests, die ich heute machen konnte, nicht wieder aufgetreten.