Vermutlich DOIF / Homematic Dimmer / Mehrfaches Betätigen erkennen

Begonnen von BenGeee, 12 März 2015, 13:13:59

Vorheriges Thema - Nächstes Thema

BenGeee

Hallo zusammen,
ich verzweifle ein wenig an folgendem Szenario:


  • Im Einsatz der übliche Dimmer HM-LC-Dim1TPBU-FM für die Wand
  • Jetzt möchte ich das zweimalige hintereinander ausgeführte kurze Drücken des Dimmer in die gleiche Richtung erkennen und dann ein weiteres Gerät Schalten
  • Hauptproblem ist, dass einmaliges Drücken anscheinend schon mehrfache Events auslöst

Probiert habe ich schon mehrere Konstrukte, aber immer scheitere ich daran, dass ich nicht eindeutig bestimmen kann, dass der Schalter wirklich zweimal gedrückt wurde.

Aktuell habe ich folgendes implementiert. Ziel des Codes ist eigentlich das zweimalige "off"-Event innerhalb von 2 Sek. zu tracken und dann ein bestimmtes Device abzuschalten. Eigentlich ist eine Zeitabhängigkeit aber gar nicht das wichtig, aber einge der wenigen Möglichkeiten, die ich noch sah. Wie gesagt es geht darum das zweimalige Drücken zu erkennen.

Wichtig: bei der Lösung kommt es mit nicht auf die Zeit an. Am Liebsten wäre mir eine rein Status-basierte Lösung. Der Code funktioniert nicht, da auch hier durch die Geschwätzigkeit (vermutlich des Schalters) immer direkt zwei Gleiche "Commands" erkannt werden.

define Wohnzimmer_Light_ShutOffHue_P1 DOIF ([Wohnzimmer_Licht_Original:?off])(set HUEDevice1 off)
attr Wohnzimmer_Light_ShutOffHue_P1 waitsame 2
attr Wohnzimmer_Light_ShutOffHue_P1 do always


Über ein wenig Hilfe würde ich mich freuen.

Gruß, Ben

rudolfkoenig

Mehrfaches druecken klingt nach Einsatz des sequence Moduls.

Otto123

Zitat von: BenGeee am 12 März 2015, 13:13:59
Hauptproblem ist, dass einmaliges Drücken anscheinend schon mehrfache Events auslöst
Es gibt da in FHEM so tolle Dinge wie den Event Monitor, linke Seite - ganz unten :)
Bei mir liefert der einmalige Druck auf den Dimmer genau eine (komplexe) Aktion:

2015-03-12 14:08:31 CUL_HM LichtWzR CMDs_done
2015-03-12 14:08:31 CUL_HM LichtWzR_Sw phyLevel: 100
2015-03-12 14:08:31 CUL_HM LichtWzR_Sw level: 100
2015-03-12 14:08:31 CUL_HM LichtWzR_Sw pct: 100
2015-03-12 14:08:31 CUL_HM LichtWzR_Sw deviceMsg: on (to vccu1)
2015-03-12 14:08:31 CUL_HM LichtWzR_Sw on
2015-03-12 14:08:31 CUL_HM LichtWzR_Sw timedOn: off
2015-03-12 14:08:31 CUL_HM LichtWzR_Sw dim: stop:on
2015-03-12 14:08:31 CUL_HM LichtWzR_Sw overload: off
2015-03-12 14:08:31 CUL_HM LichtWzR_Sw overheat: off
2015-03-12 14:08:31 CUL_HM LichtWzR_Sw reduced: off
2015-03-12 14:08:31 CUL_HM LichtWzR_Sw1_V_01 chn:off phys:100
2015-03-12 14:08:31 CUL_HM LichtWzR_Sw1_V_01 phyLevel: 100
2015-03-12 14:08:31 CUL_HM LichtWzR_Sw1_V_02 chn:off phys:100
2015-03-12 14:08:31 CUL_HM LichtWzR_Sw1_V_02 phyLevel: 100

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rudolfkoenig

Ja, das CUL_HM Modul uebertreibt es mit den Events zunehmend. Vielleicht ist Martin nicht bewusst, dass man Readings setzen kann, ohne Events zu generieren. Aber man koennte sequence auf LichtWzR_Sw:on triggern lassen, das gibts nur einmal.

betateilchen

Zitat von: rudolfkoenig am 12 März 2015, 14:26:23
Vielleicht ist Martin nicht bewusst, dass man Readings setzen kann, ohne Events zu generieren.

Doch, das weiß er sehr wohl. Aber an dieser Stelle habe ich den Kampf gegen die Windmühlen längst aufgegeben.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

BenGeee

Hi, danke schon mal für den Input. Ich schau mir das sequence-Modul mal an.

Aber generell habe ich das Problem, dass bei mir auch der Event-Monitor mehrfach Events schmeisst:


2015-03-12 16:17:17 CUL_HM Unterputz_Schaltaktor_Wohnzimmer_Licht CMDs_pending
2015-03-12 16:17:17 structure AllLights undefined
2015-03-12 16:17:17 CUL_HM Wohnzimmer_Licht_Original set_off
2015-03-12 16:17:17 CUL_HM Unterputz_Schaltaktor_Wohnzimmer_Licht CMDs_done
2015-03-12 16:17:17 CUL_HM Wohnzimmer_Licht_Original level: 0
2015-03-12 16:17:17 CUL_HM Wohnzimmer_Licht_Original pct: 0
2015-03-12 16:17:17 CUL_HM Wohnzimmer_Licht_Original deviceMsg: off (to HMLAN1)
2015-03-12 16:17:17 CUL_HM Wohnzimmer_Licht_Original off
2015-03-12 16:17:17 CUL_HM Wohnzimmer_Licht_Original timedOn: off
2015-03-12 16:17:17 CUL_HM Wohnzimmer_Licht_Original dim: stop:off
2015-03-12 16:17:17 CUL_HM Wohnzimmer_Licht_Original overload: off
2015-03-12 16:17:17 CUL_HM Wohnzimmer_Licht_Original overheat: off
2015-03-12 16:17:17 CUL_HM Wohnzimmer_Licht_Original reduced: off
2015-03-12 16:17:23 CUL_HM Unterputz_Schaltaktor_Wohnzimmer_Licht CMDs_pending
2015-03-12 16:17:23 CUL_HM CUL_HM_HM_LC_Dim1TPBU_FM_1A70AC_Sw1_V_01 off
2015-03-12 16:17:23 CUL_HM CUL_HM_HM_LC_Dim1TPBU_FM_1A70AC_Sw1_V_01 phyLevel: 0
2015-03-12 16:17:23 CUL_HM CUL_HM_HM_LC_Dim1TPBU_FM_1A70AC_Sw1_V_02 off
2015-03-12 16:17:23 CUL_HM CUL_HM_HM_LC_Dim1TPBU_FM_1A70AC_Sw1_V_02 phyLevel: 0
2015-03-12 16:17:23 CUL_HM Unterputz_Schaltaktor_Wohnzimmer_Licht chn:??? phys:0
2015-03-12 16:17:23 CUL_HM Unterputz_Schaltaktor_Wohnzimmer_Licht phyLevel: 0
2015-03-12 16:17:23 CUL_HM Unterputz_Schaltaktor_Wohnzimmer_Licht CMDs_done
2015-03-12 16:17:23 CUL_HM Wohnzimmer_Licht_Original phyLevel: 0
2015-03-12 16:17:23 CUL_HM Wohnzimmer_Licht_Original level: 0
2015-03-12 16:17:23 CUL_HM Wohnzimmer_Licht_Original pct: 0
2015-03-12 16:17:23 CUL_HM Wohnzimmer_Licht_Original deviceMsg: off (to HMLAN1)
2015-03-12 16:17:23 CUL_HM Wohnzimmer_Licht_Original off
2015-03-12 16:17:23 CUL_HM Wohnzimmer_Licht_Original timedOn: off
2015-03-12 16:17:23 CUL_HM Wohnzimmer_Licht_Original dim: stop:off
2015-03-12 16:17:23 CUL_HM Wohnzimmer_Licht_Original overload: off
2015-03-12 16:17:23 CUL_HM Wohnzimmer_Licht_Original overheat: off
2015-03-12 16:17:23 CUL_HM Wohnzimmer_Licht_Original reduced: off

Wie man oben sieht gibt es nur ein auslösenden "set_off"-Befehl. Dann läuft alles in Sekunde 17 ab und dann 6 Sekunden später nochmal das gleiche. Scheinbar wenn dann der eigentlich Schaltvorgang abgeschlossen ist.

Hmm, so beim Lesen kommt mir, dass ein Trigger auch das "set_off" oder "set_0" sein könnte. Weil das kommt beim diesem zweiten Durchlauf nicht mit.

Viele Grüße, Ben

frank

du musst den physLevel nehmen, da dieser eine verknuepfung von allen 3 channels darstellt. soweit ich mich erinnere, muss cul_hm nach dem manuellen schalten ein statusrequest absettzen, um eine resultierende berechnung durchfuehren zu koennen. daher dann wohl doppelter status. des einen channels.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Otto123

Mich wundert, dass die Abfolge so gänzlich anders ist als bei mir.
Du bist sicher, dass da nicht schon ein Stück Programm mit mischt?
Ein set_on oder set_off gibt es bei  mir nicht.  ::)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

BenGeee

Hi Otto,
sicher bin ich mir nicht, aber spontan wüßte ich nicht woher zusätzliche Event-Ausgaben resultieren sollten.

Gruß, Ben

BenGeee

Also folgendes funktionier jetzt recht gut, aber geht das nicht einfacher? ;)

Bisschen Bistabiles-Kippglied-Like

define Wohnzimmer_Light_State_Dummy dummy
attr Wohnzimmer_Light_State_Dummy room Wohnzimmer
define Wohnzimmer_Light_ShutOffHue_P1 DOIF (([Wohnzimmer_Licht_Original:?set_off] or [Wohnzimmer_Licht_Original:?^set_0]) and [Wohnzimmer_Light_State_Dummy] == 1)((set HUEDevice1,HUEDevice2 off), set Wohnzimmer_Light_State_Dummy 0)\
DOELSEIF (([Wohnzimmer_Licht_Original:?set_off] or [Wohnzimmer_Licht_Original:?^set_0]) and [Wohnzimmer_Light_State_Dummy] == 0)(set Wohnzimmer_Light_State_Dummy 1)
attr Wohnzimmer_Light_ShutOffHue_P1 do always
define Wohnzimmer_Light_ShutOffHue_P2 notify Wohnzimmer_Licht_Original:set_(on|[1-9][0-9]{0,2}) set Wohnzimmer_Light_State_Dummy 0


Gruß, Ben

frank

FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

BenGeee

Ich glaube wir sind up to date. Mir ist jetzt aufgefallen, dass sich der Hand-Schalter und das FHEM-Interface auch nochmals anders verhalten was den Event-Output angeht. Am Handschalter bekomme ich z.B. das set_on/set_off Event nicht. Bin jetzt wie weiter oben empfohlen auf das phyLevel. Das tut jetzt auch soweit und ich konnte meine Anforderungen komplett umsetzen. Nun ist das aber leider alles ziemlich träge. Man muss recht lange warten bis nach dem Schalten die Zustände hergestellt sind und der Handschalter sein phyLevel zurück meldet. Naja......

Hier der Code:

define Wohnzimmer_Light_State_Off dummy
attr Wohnzimmer_Light_State_Off room Wohnzimmer
define Wohnzimmer_Light_ShutOffHue_P1 DOIF ([Unterputz_Schaltaktor_Wohnzimmer_Licht:?phyLevel. 0] and [Wohnzimmer_Light_State_Off] == 1)((set HUEDevice1,HUEDevice2 off), set Wohnzimmer_Light_State_Off 0)\
DOELSEIF ([Unterputz_Schaltaktor_Wohnzimmer_Licht:?phyLevel. 0] and [Wohnzimmer_Light_State_Off] == 0)(set Wohnzimmer_Light_State_Off 1)
attr Wohnzimmer_Light_ShutOffHue_P1 do always
define Wohnzimmer_Light_ShutOffHue_P2 notify Unterputz_Schaltaktor_Wohnzimmer_Licht:phyLevel:.[1-9][0-9]{0,2} set Wohnzimmer_Light_State_Off 0

Otto123

Zitat von: BenGeee am 13 März 2015, 00:36:24
Am Handschalter bekomme ich z.B. das set_on/set_off Event nicht.
Ich hatte es am "Handschalter" probiert. Ich dachte das war dein Ansatz :)
Also ich habe mit Hand gedrückt und bekomme genau eine Abfolge Events. Ich hätte gedacht dann nimmt man den "on" oder "off" event und alles ist gut.
Zitat von: frank am 12 März 2015, 19:06:52
vielleicht ist einer von euch beiden nicht up to date.
Ja ok ich habe seit ein paar Tagen kein update gemacht. Aber warum sollten dann plötzlich mehrfach events gefeuert werden.
Ich habe übrigens den HMLAN.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

frank

ZitatAm Handschalter bekomme ich z.B. das set_on/set_off Event nicht.
der taster gibt ja auch keine informationen von sich. das kann er leider nicht.

ZitatNun ist das aber leider alles ziemlich träge. Man muss recht lange warten bis nach dem Schalten die Zustände hergestellt sind und der Handschalter sein phyLevel zurück meldet. Naja......
du reagierst ja erst auf den status des aktors. dort gibt es noch register, die die statusmeldung verzögern. die könntest du noch reduzieren. zb statusInfoMinDly, statusInfoRandom in allen 3 channels.

mit einem separaten hm-taster, der dann einen dimmer ansteuert, hättest du quasi keine verzögerungen.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html