FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: Markus M. am 19 November 2016, 19:47:36

Titel: [Patch] Bessere HomeKit Kompatibilität für WinMatic
Beitrag von: Markus M. am 19 November 2016, 19:47:36
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
Titel: Antw:[Patch] Bessere HomeKit Kompatibilität für WinMatic
Beitrag von: martinp876 am 19 November 2016, 20:51:10
eingebaut - sinngemäß
Titel: Antw:[Patch] Bessere HomeKit Kompatibilität für WinMatic
Beitrag von: Markus M. am 19 November 2016, 21:48:56
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);
Titel: Antw:[Patch] Bessere HomeKit Kompatibilität für WinMatic
Beitrag von: volschin am 20 November 2016, 13:07:48
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
Titel: Antw:[Patch] Bessere HomeKit Kompatibilität für WinMatic
Beitrag von: Markus M. am 22 November 2016, 17:42:20
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)      ];
    }
  }
Titel: Antw:[Patch] Bessere HomeKit Kompatibilität für WinMatic
Beitrag von: martinp876 am 23 November 2016, 08:02:04
Done