2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-10 09:16:53 +00:00

10_CUL_HM:unify buttonpress trigger

git-svn-id: https://svn.fhem.de/fhem/trunk@8362 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
martinp876 2015-04-03 15:28:45 +00:00
parent 8fe5dfb0be
commit b72ee1bf91

View File

@ -1105,7 +1105,7 @@ sub CUL_HM_Parse($$) {#########################################################
CUL_HM_DumpProtocol("RCV",$iohash,$len,$mNo,$mFlg,$mTp,$src,$dst,$p);
#----------start valid messages parsing ---------
my $parse = CUL_HM_parseCommon($iohash,$mNo,$mFlg,$mTp,$src,$dst,$p,$st,$md);
my $parse = CUL_HM_parseCommon($iohash,$mNo,$mFlg,$mTp,$src,$dst,$p,$st,$md,$dname);
push @evtEt,[$shash,1,"powerOn:$tn"] if($parse eq "powerOn");
push @evtEt,[$shash,1,""] if($parse eq "parsed"); # msg is parsed but may
# be processed further
@ -1505,11 +1505,9 @@ sub CUL_HM_Parse($$) {#########################################################
push @evtEt,[$shash,1,"state:T: $actTemp desired: $setTemp"];
}
elsif($mTp =~ m/^4./) {
my ($chn, $tCnt,$lvl) = ($mI[0],$mI[1],hex($mI[2])/2);
my ($chn,$lvl) = ($mI[0],hex($mI[2])/2);
my $chnHash = $modules{CUL_HM}{defptr}{$src.$chn};
if ($chnHash){
push @evtEt,[$chnHash,1,"state:Short".$target];
push @evtEt,[$chnHash,1,"trigger:Short_".$tCnt];
push @evtEt,[$chnHash,1,"level:$lvl"];
}
}
@ -1819,47 +1817,27 @@ sub CUL_HM_Parse($$) {#########################################################
elsif($st =~ m /^(remote|pushButton|swi)$/
||$md eq "HM-SEN-EP") { #################################################
if($mTp eq "40") {
my ($chn, $bno) = map{hex($_)} ($mI[0],$mI[1]);# button/event count
my $buttonID = $chn&0x3f;# only 6 bit are valid
my ($chn) = map{hex($_)} ($mI[0]);# button/event count
my $btnName;
my $state = "";
my $chnHash = $modules{CUL_HM}{defptr}{$src.sprintf("%02X",$buttonID)};
my $state = ($chn & 0x40)?"Long":"Short";
my $chnHash = $modules{CUL_HM}{defptr}{$src.sprintf("%02X",$chn&0x3f)};
if ($chnHash){# use userdefined name - ignore irritating on-off naming
$btnName = $chnHash->{NAME};
}
else{# Button not defined, use default naming
$chnHash = $shash;
if ($st eq "swi"){#maintain history for event naming
$btnName = "Btn$chn";
}
else{
$btnName = "Btn".int(($buttonID+1)/2);
$state = ($chn&1 ? "off" : "on")
}
}
my $trigType;
if($chn & 0x40){# long press
if(!$shash->{BNO} || $shash->{BNO} ne $bno){#bno = event counter
$shash->{BNO}=$bno;
$shash->{BNOCNT}=0; # message counter reest
}
$shash->{BNOCNT}+=1;
$state .= "Long" .($mFlgH & 0x20 ? "Release" : "").
" ".$shash->{BNOCNT}."-".$mFlg.$mTp."-";
$trigType = "Long";
}
else{# short press
$state .= ($st eq "swi")?"toggle":"Short";#swi only support toggle
$trigType = "Short";
$state .= ($mFlgH & 0x20 ? "Release" : "");
}
$shash->{helper}{addVal} = $chn; #store to handle changesFread
push @evtEt,[$chnHash,1,"state:".$state.$target] if ($shash ne $chnHash);
push @evtEt,[$chnHash,1,"trigger:".$trigType."_".$bno];
push @evtEt,[$devH,1,"battery:". (($chn&0x80)?"low":"ok")];
push @evtEt,[$devH,1,"state:$btnName $state$target"];
push @evtEt,[$devH,1,"state:$btnName $state"];
if($md eq "HM-Dis-WM55"){
my $type = $trigType eq "Short"?"s":"l";
my $type = ($chn & 0x40)?"l":"s";
if ($devH->{cmdStack}){# there are pending commands. we only send new ones
delete $devH->{cmdStack};
delete $devH->{cmdStacAESPend};
@ -1870,7 +1848,7 @@ sub CUL_HM_Parse($$) {#########################################################
delete $devH->{lastMsg};
}
CUL_HM_calcDisWm($chnHash,$devH->{NAME},($trigType eq "Long"?"l":"s"));
CUL_HM_calcDisWm($chnHash,$devH->{NAME},$type);
if (CUL_HM_getAttrInt($name,"aesCommReq") == 1){
my @arr = ();
$devH->{cmdStacAESPend} = \@arr;
@ -2435,7 +2413,7 @@ sub CUL_HM_Parse($$) {#########################################################
}
sub CUL_HM_parseCommon(@){#####################################################
# parsing commands that are device independent
my ($ioHash,$mNo,$mFlg,$mTp,$src,$dst,$p,$st,$md) = @_;
my ($ioHash,$mNo,$mFlg,$mTp,$src,$dst,$p,$st,$md,$dname) = @_;
my $shash = $modules{CUL_HM}{defptr}{$src};
my $dstH = $modules{CUL_HM}{defptr}{$dst} if (defined $modules{CUL_HM}{defptr}{$dst});
return "" if(!$shash->{DEF});# this should be from ourself
@ -2845,6 +2823,18 @@ sub CUL_HM_parseCommon(@){#####################################################
}
elsif($mTp eq "40"){
$level = $long;
my $state = ucfirst($long);
if($long eq "long"){# long press
if(!$cHash->{BNO} || $cHash->{BNO} ne $cnt){#cnt = event counter
$cHash->{BNO}=$cnt;
$cHash->{BNOCNT}=0; # message counter reset
}
$cHash->{BNOCNT}+=1;
$state .= ($mFlgH & 0x20 ? "Release" : "")." $cHash->{BNOCNT}_$cnt";
}
push @evtEt,[$cHash,1,"trigger:".(ucfirst($long))."_$cnt"];
push @evtEt,[$cHash,1,"state:".$state." (to $dname)"] if ($shash ne $cHash);
}
push @evtEt,[$cHash,1,"trigger_cnt:$cnt"];
@ -9022,8 +9012,8 @@ sub CUL_HM_tempListTmpl(@) { ##################################################
trigger [Long|Short]_$no trigger event from channel<br>
</li>
<li><B>swi</B><br>
Btn$x toggle<br>
Btn$x toggle (to $dest)<br>
Btn$x Short<br>
Btn$x Short (to $dest)<br>
battery: [low|ok]<br>
</li>
<li><B>switch/dimmer/blindActuator</B><br>
@ -10301,8 +10291,8 @@ sub CUL_HM_tempListTmpl(@) { ##################################################
trigger [Long|Short]_$no trigger event from channel<br>
</li>
<li><B>swi</B><br>
Btn$x toggle<br>
Btn$x toggle (to $dest)<br>
Btn$x Short<br>
Btn$x Short (to $dest)<br>
battery: [low|ok]<br>
</li>
<li><B>switch/dimmer/blindActuator</B><br>