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.
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
eingebaut - sinngemäß
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);
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
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) ];
}
}
Done