notify mit HomeMaticTaster funktioniert nicht

Begonnen von fox-octi, 28 November 2021, 03:15:19

Vorheriges Thema - Nächstes Thema

fox-octi

Hi,

ich habe den besagten HomeMatic Taster mit 6 Tasten, ich möchte short und Long auswerten und je nach ZielgerätStatus dann aus oder an zuschalten.

Problem ist, das Gerät scheint zwar zu schalten, aber bleibt dann beim Ausgangszustand. Verstehe meinen Fehler nicht :(

   
FunktasterHM1:FunktasterHM1.* {
my $Event1="FunktasterHM1_1 Short";
my $Event2="FunktasterHM1_1 Long";




if ("$EVENT" eq "FunktasterHM1_1 Short" ) {
my $comment="HolzLicht Schuppen";
my $ausgang="WagoGarage_M_Output_O_HolzLicht";
my $sstate = ReadingsVal($ausgang,"state",0);

if ("$sstate" ne "off" and "$sstate" eq "on"){
            fhem("set WagoGarage_M_Output_O_HolzLicht toggle;");

}
  if ("$sstate" ne "on" and "$sstate" eq "off"){
   fhem("set WagoGarage_M_Output_O_HolzLicht on-for-timer 4;");
}

}
if ("$EVENT" eq "FunktasterHM1_1 Long" ) {   fhem("set Wago_SW_M_Output_O_ArbeitLED on-for-timer 5;")}

if ("$EVENT" eq "FunktasterHM1_2 Short" ) {   fhem("set Wago_SW_M_Output_O_ArbeitLicht48 on-for-timer 5;")}
if ("$EVENT" eq "FunktasterHM1_2 Long" ) {   fhem("set Wago_SW_M_Output_O_ArbeitLED on-for-timer 5;")}

if ("$EVENT" eq "FunktasterHM1_3 Short" ) {   fhem("set Wago_SW_M_Output_O_ArbeitLicht48 on-for-timer 5;")}
if ("$EVENT" eq "FunktasterHM1_3 Long" ) {   fhem("set Wago_SW_M_Output_O_ArbeitLED on-for-timer 5;")}

if ("$EVENT" eq "FunktasterHM1_4 Short" ) {   fhem("set Wago_SW_M_Output_O_ArbeitLicht48 on-for-timer 5;")}
if ("$EVENT" eq "FunktasterHM1_4 Long" ) {   fhem("set Wago_SW_M_Output_O_ArbeitLED on-for-timer 5;")}

if ("$EVENT" eq "FunktasterHM1_5 Short" ) {   fhem("set Wago_SW_M_Output_O_ArbeitLicht48 on-for-timer 5;")}
if ("$EVENT" eq "FunktasterHM1_5 Long" ) {   fhem("set Wago_SW_M_Output_O_ArbeitLED on-for-timer 5;")}

if ("$EVENT" eq "FunktasterHM1_6 Short" ) {   fhem("set Wago_SW_M_Output_O_ArbeitLicht48 on-for-timer 5;")}
if ("$EVENT" eq "FunktasterHM1_6 Long" ) {   fhem("set Wago_SW_M_Output_O_ArbeitLED on-for-timer 5;")}

}

frober

Benutze bitte Codetags, die # über dem Eingabefeld und poste die RAW-Def auch vom Device.

Wenn ich das richtig sehe, gibt es in FunktasterHM1 das Reading FunktasterHM1: in dem dann on/off steht. Dann funktioniert $EVENT nicht, da darin daß Reading incl.value enthalten ist. Probiere es mit $EVTPART1.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

Jamo

Hallo fox-octi,
schau mal im Eventmonitor, in der fhem Weboberfläche links in der langen Spalte, da gibt es einen Button "Eventmonitor". Wenn Du darauf klickst erscheint eine Seite, da werden alle Events generiert. Wenn Du nun auf deinen Schalter eine der Tasten klickst, siehst Du im Eventmonitor das z.B. die Long events mehrfach kommen Long 1 / Long1 .... Dein vergleich auf $EVENT" eq "FunktasterHM1_4 Long" kann also meiner Meinung nach nicht funktionieren, weil es das EVENT so wie von die abgefragt, gar nicht gibt. Bei mir sieht das im Eventmonitor z.B. so aus:
2021-11-28 13:38:37.155 CUL_HM HM_Wand_Bett_04 Long 1_19 (to VCCU)
2021-11-28 13:38:37.397 CUL_HM HM_Wand_Bett_04 Long 2_19 (to VCCU)
2021-11-28 13:38:37.664 CUL_HM HM_Wand_Bett_04 Long 3_19 (to VCCU)
2021-11-28 13:38:37.927 CUL_HM HM_Wand_Bett_04 Long 4_19 (to VCCU)
2021-11-28 13:38:38.197 CUL_HM HM_Wand_Bett_04 Long 5_19 (to VCCU)


Deswegen auch der Tip vom Vorredner, mit nur einem Teil des Events zu arbeiten, also EVTPART1. (Ausserdem definierst Du $EVENT1 und $EVENT2, die Du gar nicht benutzt)

Bei mir sieht das so aus für einen Wandschalter, wobei ich das EVENT selber in die Eventparts splitte.
Ausserdem, da long mehrmals hintereinander kommt, musst Du entscheiden, ob Du alle events auswerten willst (z.b. beim Dimmen, damit eine lampe immer heller wird), oder nur das erste long event , z.B. beim schalten eine ein-aus Schalters.
defmod HM_Wand_n notify HMWand_0[1-6]:(Long|Short).1_.* {myHM_Wand($EVENT)} # use only the first long event
sub myHM_Wand {
  my $sub       = 'myHM_Wand';
  my $EVENT     = shift // return "Error, $sub: we need EVENT as parameter!";
  my $Button    = (split('_', $NAME))[1];  # Im Namen wird der Button mit übergeben
  my $Short     = (split(' ', $EVENT))[0] eq 'Short';
    if    ($Button eq '01') {
      if ($Short) {}
      else        {}
    elsif ($Button eq '02') {
      if ($Short) {}
      else { #long
       }
    }
    elsif ..


Ausserdem habe ich nicht verstanden, welches "Gerät" schaltet und dann im Ausganszustand bleibt. Keine Ahnung was Du meinst.

Ein list vom device und Gerät wäre hilfreich.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

fox-octi

Hi,

es lief mit folgenden Zeilen dann wie gewünscht:

FunktasterHM1:FunktasterHM1.* {
my $Event1="FunktasterHM1_1 Short";
my $Event2="FunktasterHM1_1 Long";




if ("$EVENT" eq "FunktasterHM1_1 Short" ) {
my $comment="HolzLicht Schuppen";
my $ausgang="WagoGarage_M_Output_O_HolzLicht";
my $sstate = ReadingsVal($ausgang,"state",0);
  fhem("set $ausgang toggle;");
}
if ("$EVENT" eq "FunktasterHM1_1 Long" ) {
my $comment="TerrassenLicht";
my $ausgang="Wago_SW_M_Output_O_Terasse_L";
my $sstate = ReadingsVal($ausgang,"state",0);
  fhem("set $ausgang toggle;");
}


Im Event von der Haupteinheit steht drin, welcher Taster was ausgelöst hat ohne hochzählende Numer.

Gruß

Chris

Jamo

#4
Zitat von: fox-octi am 29 November 2021, 13:02:30
Hi,
Im Event von der Haupteinheit steht drin, welcher Taster was ausgelöst hat ohne hochzählende Numer.
ja, das sehe ich jetzt auch - interessant.

Was funktioniert dann jetzt genau nicht? Oder funktioniert jetzt alles?
PS: Weiter oben sehe ich noch "if ($sstate ne 'off' and $sstate eq 'on')" => "and" gibt es nicht, das muss ein && sein, also: "if ($sstate ne 'off' && $sstate eq 'on')" heissen, oder "if ($sstate eq 'on')" weil wenn $sstate on ist, ist der state ja nicht off . . .
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack