[Patch] Bessere HomeKit Kompatibilität für WinMatic

Begonnen von Markus M., 19 November 2016, 19:47:36

Vorheriges Thema - Nächstes Thema

Markus M.

Aktuell lassen sich die WinMatic leider nur suboptimal in HomeKit einbinden, da alles im state Reading landet.

Die Lösung sind 2 neue Readings in denen level und locked getrennt werden und die nur an der Endposition gesetzt werden.
Das ganze ist 100% abwärtskompatibel, bitte bei Gelegenheit einbauen damit es auch andere nutzen können.

Code (PATCH) Auswählen
Index: FHEM/10_CUL_HM.pm
===================================================================
--- FHEM/10_CUL_HM.pm (revision 12601)
+++ FHEM/10_CUL_HM.pm (working copy)
@@ -2638,6 +2638,7 @@
   }
   elsif($mh{st} eq "winMatic") {  #############################################
     my($sType,$chn,$lvl,$stat) = @mI;
+    my $dir = 0;
     if(($mh{mTp} eq "10" && $sType eq "06") ||
        ($mh{mTp} eq "02" && $sType eq "01")){
       $mh{shash} = $modules{CUL_HM}{defptr}{"$mh{src}$chn"}
@@ -2649,11 +2650,14 @@
         my %dir = (0=>"no",1=>"up",2=>"down",3=>"undefined");
         push @evtEt,[$mh{shash},1,"motorErr:"  .$err{(hex($stat)>>1)&0x03}];
         push @evtEt,[$mh{shash},1,"direction:" .$dir{(hex($stat)>>4)&0x03}];
+        $dir = (hex($stat)>>4)&0x03;
       }
       else{ #should be akku
-        my %statF = (0=>"trickleCharge",1=>"charge",2=>"dischange",3=>"unknown");
+        my %statF = (0=>"trickleCharge",1=>"charge",2=>"discharge",3=>"unknown");
         push @evtEt,[$mh{shash},1,"charge:".$statF{(hex($stat)>>4)&0x03}];
       }
+      push @evtEt,[$mh{shash},1,"level:".(($lvl eq "FF")?"0":((hex($lvl)/2)))] if($dir==0);
+      push @evtEt,[$mh{shash},1,"lock:".(($lvl eq "FF")?"locked":"unlocked")];
     }
   }
   elsif($mh{st} eq "keyMatic") {  #############################################


Viele Grüsse,
Markus
Aktuell weder Smarthome noch FHEM vorhanden

martinp876


Markus M.

Danke!
Fast perfekt, aber noch nicht ganz richtig ;)
Und besser doch mal noch den Tippfehler aus, das verwendet sowieso niemand.

ZitatIndex: FHEM/10_CUL_HM.pm
===================================================================
--- FHEM/10_CUL_HM.pm   (revision 12603)
+++ FHEM/10_CUL_HM.pm   (working copy)
@@ -2654,11 +2654,11 @@
         push @evtEt,[$mh{shash},1,"direction:" .$dir{$move}];
       }
       else{ #should be akku
-        my %statF = (0=>"trickleCharge",1=>"charge",2=>"dischange",3=>"unknown");
+        my %statF = (0=>"trickleCharge",1=>"charge",2=>"discharge",3=>"unknown");
         push @evtEt,[$mh{shash},1,"charge:"    .$statF{($stat >> 4) & 0x03}];
       }
       # stateflag meaning unknown
-      my $lvlS = $lvl eq "FF" ? 0:1;
+      my $lvlS = $lvl eq "FF" ? 1:0;
       $lvl = hex($lvl)/2;
       push @evtEt,[$mh{shash},1,"state:".($lvlS ? "locked" : $lvl)      ];
       push @evtEt,[$mh{shash},1,"level:".($lvlS ? "0"      : $lvl)      ] if($move==0);
Aktuell weder Smarthome noch FHEM vorhanden

volschin

Hi zusammen,
kann es sein, dass Eure Änderungen ein paar unschöne Nebeneffekte haben?

Seit meinem letzten Update zeigen meine zwei Winmatic anstatt dem Akku-Stand nur noch locked und statt Level lock jetzt 127.5

Irgendwas läuft da schief.

Gruß
Veit
Intel NUC+Ubuntu 24.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7690, Echo Dots+Show8, HomeBridge

Markus M.

Jepp, gerade auch gemerkt - leider ist der Fehler von oben noch nicht raus.
Hier nochmal der komplette Block wie er sein muss:

  elsif($mh{st} eq "winMatic") {  #############################################
    my($sType,$chn,$lvl,$stat) = @mI;
    if(($mh{mTp} eq "10" && $sType eq "06") ||
       ($mh{mTp} eq "02" && $sType eq "01")){
      my $move = 0;
      $stat = hex($stat);
      $mh{shash} = $modules{CUL_HM}{defptr}{"$mh{src}$chn"}
                             if($modules{CUL_HM}{defptr}{"$mh{src}$chn"});
      my $lvlS = $lvl eq "FF" ? 1:0;
      $lvl = hex($lvl)/2;
      if ($chn eq "01"){
        my %err = (0=>"ok",1=>"TurnError",2=>"TiltError");
        my %dir = (0=>"no",1=>"up",2=>"down",3=>"undefined");
        $move = ($stat >> 4) & 0x03;
        push @evtEt,[$mh{shash},1,"motorErr:"  .$err{($stat >> 1) & 0x03}];
        push @evtEt,[$mh{shash},1,"direction:" .$dir{$move}];
        push @evtEt,[$mh{shash},1,"level:".($lvlS ? "0"      : $lvl)      ] if($move==0);
        push @evtEt,[$mh{shash},1,"lock:" .($lvlS ? "locked" : "unlocked")];
      }
      else{ #should be akku
        my %statF = (0=>"trickleCharge",1=>"charge",2=>"discharge",3=>"unknown");
        push @evtEt,[$mh{shash},1,"charge:"    .$statF{($stat >> 4) & 0x03}];
      }
      # stateflag meaning unknown
      push @evtEt,[$mh{shash},1,"state:".($lvlS ? "locked" : $lvl)      ];
    }
  }
Aktuell weder Smarthome noch FHEM vorhanden

martinp876