FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: dwi am 15 Januar 2019, 21:11:42

Titel: Homematic Schalter HmIP-BRC2 und notify mit Long Press
Beitrag von: dwi am 15 Januar 2019, 21:11:42
Moin,

ich habe mir jetzt einen HmIP-BRC2 gekauft und in Homematic an meiner CCU3 angelernt.
Dann habe ich ein Homematic Programm gemacht, dass auf die Buttons reagiert.

Nach dem Setzen von Attributes bekam ich auch Readings:
Internals:
   DEF        WZSchalter1
   IODev      hmccu
   NAME       WZSchalter1
   NR         223
   STATE      Initialized
   TYPE       HMCCUDEV
   ccuaddr    0019D8A99628A8
   ccudevstate active
   ccuif      HmIP-RF
   ccuname    WZSchalter1
   ccutype    HmIP-BRC2
   channels   3
   firmware   1.8.8
   statevals  devstate
   READINGS:
     2019-01-15 21:03:51   1.PRESS_LONG    1
     2019-01-15 21:03:04   1.PRESS_SHORT   1
     2019-01-15 21:03:33   2.PRESS_LONG    1
     2019-01-15 21:02:55   2.PRESS_SHORT   1
     2019-01-15 21:03:51   hmstate         Initialized
     2019-01-15 20:49:06   state           Initialized
   hmccu:
     devspec    WZSchalter1
     dp:
       0.CONFIG_PENDING:
         OVAL       0
         VAL        0
       0.DUTY_CYCLE:
         OVAL       false
         VAL        false
       0.INSTALL_TEST:
         OVAL       true
         VAL        true
       0.OPERATING_VOLTAGE:
         OVAL       0.000000
         VAL        0.000000
       0.OPERATING_VOLTAGE_STATUS:
         OVAL       0
         VAL        0
       0.RSSI_DEVICE:
         OVAL       -86
         VAL        -89
       0.RSSI_PEER:
         OVAL       0
         VAL        0
       0.UNREACH:
         OVAL       0
         VAL        0
       0.UPDATE_PENDING:
         OVAL       false
         VAL        false
       1.PRESS_LONG:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       1.PRESS_SHORT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       2.PRESS_LONG:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       2.PRESS_SHORT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
Attributes:
   IODev      hmccu
   ccureadingfilter PRESS
   event-on-change-reading .*
   event-on-update-reading ^[1-9]\.PRESS.*
   icon       ios-off
   room       Wohnzimmer


Jetzt wollte ich ein Notify machen, dass auf Drücken reagiert.
Für die PRESS_SHORT war das gar kein Problem. Für die PRESS_LONG klappt es leider nicht so einfach.
Mein Problem ist, dass es jede Sekunde ein Event PRESS_LONG gibt, wenn ich den Schalter gedrückt halte. Wie kann ich nur auf das erste Event reagieren?
Ich habe hier im Forum oft von LONGRELEASE gelesen, aber das taucht bei mir im Event Monitor nicht auf, wenn ich loslasse. Und eigentlich wäre es auch schöner, dass ich direkt beim ersten PRESS_LONG eine Aktion starten kann und ich nicht auf das Loslassen warten muss.
Hat hier jemand eine Idee, wie ich das machen kann?

Viele Grüße
dwi
Titel: Antw:Homematic Schalter HmIP-BRC2 und notify mit Long Press
Beitrag von: zap am 16 Januar 2019, 17:56:08
Offensichtlich gibt es keinen Datenpunkt für RELEASE. Kannst Du aber gerne nochmal per "get deviceinfo" prüfen.

Leider werden die PRESS_xxx Datenpunkte niemals 0. Sonst könnte man mit event-on-change-reading arbeiten.

Titel: Antw:Homematic Schalter HmIP-BRC2 und notify mit Long Press
Beitrag von: dwi am 17 Januar 2019, 00:41:11
Ich habe "get deviceinfo" geprüft:
CHN 0019D8A99628A8:0 WZSchalter1:0
  DPT {b} HmIP-RF.0019D8A99628A8:0.CONFIG_PENDING = false [RE]
  DPT {b} HmIP-RF.0019D8A99628A8:0.DUTY_CYCLE = false [RE]
  DPT {b} HmIP-RF.0019D8A99628A8:0.INSTALL_TEST = true [RW]
  DPT {f} HmIP-RF.0019D8A99628A8:0.OPERATING_VOLTAGE = 0.000000 [RE]
  DPT {i} HmIP-RF.0019D8A99628A8:0.OPERATING_VOLTAGE_STATUS = 0 [RE]
  DPT {n} HmIP-RF.0019D8A99628A8:0.RSSI_DEVICE = 165 [RE]
  DPT {n} HmIP-RF.0019D8A99628A8:0.RSSI_PEER = 0 [RE]
  DPT {b} HmIP-RF.0019D8A99628A8:0.UNREACH = false [RE]
  DPT {b} HmIP-RF.0019D8A99628A8:0.UPDATE_PENDING = false [RE]
CHN 0019D8A99628A8:1 HmIP-BRC2 0019D8A99628A8:1
  DPT {b} HmIP-RF.0019D8A99628A8:1.PRESS_LONG = false [E]
  DPT {b} HmIP-RF.0019D8A99628A8:1.PRESS_SHORT = false [E]
CHN 0019D8A99628A8:2 HmIP-BRC2 0019D8A99628A8:2
  DPT {b} HmIP-RF.0019D8A99628A8:2.PRESS_LONG = false [E]
  DPT {b} HmIP-RF.0019D8A99628A8:2.PRESS_SHORT = false [E]


Leider wie erwartet kein RELEASE.

Ich habe mir jetzt ein wenig dreckig beholfen mittels eines Hilfsreading "laststate" und dem Setzen dieses beim Drücken und löschen des Wertes per "at" nach 5 Sekunden.
Drückt man also lange (bis zu 5sec) funktioniert das Ganze ganz gut.
Für mich ist das so okay:
WZSchalter1 {
  my $laststate = ReadingsVal("WZSchalter1", "laststate", undef);
  if ("$EVTPART0" eq "2.PRESS_SHORT:") {
    fhem("setreading WZSchalter1 laststate $EVTPART0 ; set WZScenes scene Hell")
  } elsif ("$EVTPART0" eq "1.PRESS_SHORT:") {
    fhem("setreading WZSchalter1 laststate $EVTPART0 ; set WZScenes scene Aus")
  } elsif ("$EVTPART0" eq "1.PRESS_LONG:" && "$laststate" ne "$EVTPART0") {
    fhem("setreading WZSchalter1 laststate $EVTPART0 ; set WZScenes scene Nacht ; define resetState".time*int(rand(600))." at +00:00:05 setreading WZSchalter1 laststate 0")
  } elsif ("$EVTPART0" eq "2.PRESS_LONG:" && "$laststate" ne "$EVTPART0") {
    fhem("setreading WZSchalter1 laststate $EVTPART0 ; set WZScenes scene Gedimmt ; define resetState".time*int(rand(600))." at +00:00:05 setreading WZSchalter1 laststate 0")
  }
}

Die Mindestdauer für einen "Langdruck" ist bei mir 0,5s. Das Licht reagiert also relativ direkt bei 0,5s und wer dann noch 4,5s auf der Taste bleibt, würde halt den gleichen Befehl nochmal senden.. damit kann ich aber leben.

Nicht schön, aber selten ;)
Titel: Antw:Homematic Schalter HmIP-BRC2 und notify mit Long Press
Beitrag von: zap am 17 Januar 2019, 07:38:41
das ist echt blöd bei HmIP. Bei den HM Fernbedienungen gibt es mW immer ein RELEASE. Vielleicht kommt das ja mal mit einem Firmware Update.

Ich nabe schonmal darüber nachgedacht, ein Attribut einzuführen, das den Reset des Readings automatksch nach einer definierten Zeit macht und bis dahkn alle wiederholten PRESS_LONG ignoriert. Wäre halt ne Sonderlocke für wenige Devices.
Mal überlegen, ob das Nachteile hätte ....
Titel: Antw:Homematic Schalter HmIP-BRC2 und notify mit Long Press
Beitrag von: dwi am 17 Januar 2019, 19:18:32
Ich habe mein notify nochmal angepasst, dass ich nicht so viele ATs habe:
WZSchalter1 {
  my $laststate = ReadingsVal("WZSchalter1", "laststate", undef);
  if ("$EVTPART0" eq "2.PRESS_SHORT:") {
    fhem("setreading WZSchalter1 laststate $EVTPART0 ; set WZScenes scene Hell")
  } elsif ("$EVTPART0" eq "1.PRESS_SHORT:") {
    fhem("setreading WZSchalter1 laststate $EVTPART0 ; set WZScenes scene Aus")
  } elsif ("$EVTPART0" eq "1.PRESS_LONG:" && "$laststate" ne "1.PRESS_LONG:" && !defined($defs{'resetState1.PRESS_LONG'})) {
    fhem("setreading WZSchalter1 laststate $EVTPART0 ; set WZScenes scene Nacht ; define resetState1.PRESS_LONG at +00:00:10 setreading WZSchalter1 laststate 0");
    if (defined($defs{'resetState2.PRESS_LONG'})) {
      fhem("delete resetState2.PRESS_LONG")
    }
  } elsif ("$EVTPART0" eq "2.PRESS_LONG:" && "$laststate" ne "2.PRESS_LONG:" && !defined($defs{'resetState2.PRESS_LONG'})) {
    fhem("setreading WZSchalter1 laststate $EVTPART0 ; set WZScenes scene Gedimmt ; define resetState2.PRESS_LONG at +00:00:10 setreading WZSchalter1 laststate 0");
    if (defined($defs{'resetState1.PRESS_LONG'})) {
      fhem("delete resetState1.PRESS_LONG")
    }
  }
}


Werde ich jetzt für meine anderen Schalter ähnlich machen. Klappt eigentlich ganz gut. Die Regierung im Hause hat sich auf jeden Fall bisher begeistert gezeigt (ne Menge begeisterter, als bei den hue zigbee Schalter :) ).
Titel: Antw:Homematic Schalter HmIP-BRC2 und notify mit Long Press
Beitrag von: zap am 25 Januar 2019, 12:22:45
Die Sache ist eigentlich viel (viel) einfacher lösbar. Mit dem Attribut event-min-interval.

z.B. event-min-interval PRESS_LONG:3

schickt nur alle 3 Sekunden ein PRESS_LONG event. FHEM Standard Attribut, siehe Commandref.
Titel: Antw:Homematic Schalter HmIP-BRC2 und notify mit Long Press
Beitrag von: dwi am 25 Januar 2019, 17:30:23
Ach du. Es gibt so viele Standard Attribute :)
Aber vielen Dank für den Hinweis. Ich werde das bei mir anpassen.
Titel: Antw:Homematic Schalter HmIP-BRC2 und notify mit Long Press
Beitrag von: zap am 25 Januar 2019, 17:41:16
To be honest: Ich kannte es auch nicht und hatte schon überlegt, sowas in HMCCU einzubauen. Man lernt eben nie aus.
Trotzdem hoffe ich, dass EQ-3 mit einem Firmware Update PRESS_LONG_RELEASE implementiert. Wäre einfacher.