2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-01 07:19:24 +00:00

CUL_HM: update SD2

git-svn-id: https://svn.fhem.de/fhem/trunk@11345 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
martinp876 2016-04-30 06:42:49 +00:00
parent bd1fa90ef4
commit 0854901c62
3 changed files with 169 additions and 46 deletions

View File

@ -2437,20 +2437,32 @@ sub CUL_HM_Parse($$) {#########################################################
push @evtEt,[$mh{cHash},1,"level:" .hex($state)];
$state = (($state < 2)?"off":"smoke-Alarm");
push @evtEt,[$mh{cHash},1,"state:$state"];
if($mh{devH}->{helper}{PONtest} &&(length($mh{p}) == 8 && $mh{mNo} eq "00")){
push @evtEt,[$mh{devH},1,"powerOn:$tn",] ;
$mh{devH}->{helper}{PONtest} = 0;
}
if ($mh{md} eq "HM-SEC-SD-2"){
push @evtEt,[$mh{cHash},1,"alarmTest:" .(($err&0x02)?"failed" :"ok")];
push @evtEt,[$mh{cHash},1,"smokeChamber:".(($err&0x04)?"degraded":"ok")];
if(length($mh{p}) == 8 && $mh{mNo} eq "80"){
push @evtEt,[$mh{devH},1,"powerOn:$tn",] ;
}
}
else{
if($mh{devH}->{helper}{PONtest} &&(length($mh{p}) == 8 && $mh{mNo} eq "00")){
push @evtEt,[$mh{devH},1,"powerOn:$tn",] ;
$mh{devH}->{helper}{PONtest} = 0;
}
}
my $tName = ReadingsVal($mh{cName},"peerList","");#inform team
$tName =~ s/,.*//;
CUL_HM_updtSDTeam($tName,$mh{cName},$state);
}
elsif ($mh{mTp} =~ m /^4[01]/){ #autonomous event
CUL_HM_parseSDteam($mh{mTp},$mh{src},$mh{dst},$mh{p});
#01 1441 44E347 44E347 0101960000048BAF3B0E
#02 1441 44E347 44E347 01020000000445C4A14C
if ($mh{md} eq "HM-SEC-SD-2"){
CUL_HM_parseSDteam_2($mh{mTp},$mh{src},$mh{dst},$mh{p});
}
else{
CUL_HM_parseSDteam($mh{mTp},$mh{src},$mh{dst},$mh{p});
}
}
elsif ($mh{mTp} eq "01"){ #Configs
my $sType = substr($mh{p},0,2);
@ -2975,7 +2987,7 @@ sub CUL_HM_parseCommon(@){#####################################################
}
$_ = '00000000' foreach (grep /^000000/,@peers);#correct bad term(6 chars) from rain sens)
$_ .= 'xx' foreach (grep /^......$/,@peers);
$_ .= '0x' foreach (grep /^......$/,@peers); #if channel is unknown we assume at least a device
$chnhash->{helper}{peerIDsRaw}.= ",".join",",@peers;
CUL_HM_ID2PeerList ($chnName,$_,1) foreach (@peers);
@ -2990,6 +3002,7 @@ sub CUL_HM_parseCommon(@){#####################################################
next if (!$l);
my $listNo = "0".$l;
foreach my $peer (grep (!/00000000/,@peerID)){
next if ($peer =~ m/0x$/);
$peer .="01" if (length($peer) == 6); # add the default
if ($peer &&($peer eq $reqPeer || $reqPeer eq "all")){
CUL_HM_PushCmdStack($mhp->{devH},sprintf("++%s01%s%s%s04%s%s",
@ -3060,9 +3073,7 @@ sub CUL_HM_parseCommon(@){#####################################################
CUL_HM_respPendRm($mhp->{devH});
delete $mhp->{cHash}{helper}{shadowReg}{$regLNp}; #rm shadow
# peerChannel name from/for user entry. <IDorName> <deviceID> <ioID>
CUL_HM_updtRegDisp($mhp->{cHash},$list,
CUL_HM_peerChId($peer,
substr($mhp->{cHash}{DEF},0,6)));
CUL_HM_updtRegDisp($mhp->{cHash},$list,$peer);
$ret = "done";
}
else{
@ -3167,7 +3178,7 @@ sub CUL_HM_parseCommon(@){#####################################################
next if (!$pName || !$defs{$pName});
push @evtEt,[$defs{$pName},1,"trig_$mhp->{cName}:$level"];
push @evtEt,[$defs{$pName},1,"trigLast:$mhp->{cName}".(($level ne "-")?":$level":"")];
CUL_HM_stateUpdatDly($pName,10) if ($mhp->{mTp} eq "40");#conditional request may not deliver state-req
}
}
@ -3281,6 +3292,72 @@ sub CUL_HM_parseSDteam(@){#handle SD team events
}
return @entities;
}
sub CUL_HM_parseSDteam_2(@){#handle SD team events
my ($mTp,$sId,$dId,$p) = @_;
my @entities;
my $dHash = CUL_HM_id2Hash($dId);
my $dName = CUL_HM_id2Name($dId);
my $sHash = CUL_HM_id2Hash($sId);
my $sName = CUL_HM_hash2Name($sHash);
if (AttrVal($sName,"subType","") eq "virtual"){
foreach my $cId (CUL_HM_getAssChnIds($sName)){
my $cHash = CUL_HM_id2Hash($cId);
next if (!$cHash->{sdTeam} || $cHash->{sdTeam} ne "sdLead");
my $cName = CUL_HM_id2Name($cId);
$sHash = $cHash;
$sName = CUL_HM_id2Name($cId);
last;
}
}
return () if (!$sHash->{sdTeam} || $sHash->{sdTeam} ne "sdLead");
if ($mTp eq "41"){ #Alarm detected
#01 1441 44E347 44E347 0101960000048BAF3B0E
#02 1441 44E347 44E347 01020000000445C4A14C
#C8: Smoke Alarm
#C7: tone off
#01: no alarm
my ($chn,$No,$state,$null,$aesKNo,$aesStr) = unpack 'A2A2A2A4A2A8',$p;
if(($dHash) && # update source(ID reported in $dst)
(!$dHash->{helper}{alarmNo} || $dHash->{helper}{alarmNo} ne $No)){
$dHash->{helper}{alarmNo} = $No;
}
else{
return ();# duplicate alarm
}
my ($sVal,$sProsa,$smokeSrc) = (hex($state),"off","none");
my @tHash = ((map{CUL_HM_id2Hash($_)} grep !/00000000/, split ",",$attr{$sName}{peerIDs})
,$sHash);
if ($sVal > 179 ||$sVal <51 ){# need to raise alarm
if ($sVal > 179){# need to raise alarm
#"SHORT_COND_VALUE_LO" value="50"/>
#"SHORT_COND_VALUE_HI" value="180"/>
$sProsa = "smoke-Alarm_".$No;
$smokeSrc = $dName;
push @evtEt,[$sHash,1,"recentAlarm:$smokeSrc"] if($sVal == 200);
}
elsif($sVal <51){#alarm inactive
#$sProsa = "off_".$No;
$smokeSrc = $dName;
}
push @evtEt,[$sHash,1,'level:'.$sVal];
foreach (@tHash){
push @evtEt,[$_,1,"state:$sProsa"];
push @evtEt,[$_,1,"smoke_detect:$smokeSrc"];
}
}
elsif($sVal == 150){#alarm teamcall
foreach (@tHash){
push @evtEt,[$_,1,"teamCall:from $dName:$No"];
}
}
push @evtEt,[$dHash,1,"battery:" .((hex($chn)&0x80) ? "low":"ok")];
push @evtEt,[$sHash,1,"eventNo:".$No];
}
return @entities;
}
sub CUL_HM_updtSDTeam(@){#in: TeamName, optional caller name and its new state
# update team status if virtual team lead
# check all member state
@ -4128,6 +4205,10 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
return "Peer not specified" if ($peerChnIn eq "");
$peerId = CUL_HM_peerChId($peerChnIn,$dst);
($peerId,$peerChn) = unpack 'A6A2',$peerId.'01';
if ($list == 4 &&
AttrVal($name,"peerIDs",undef)){##########################
$peerChn = "00";
}
return "Peer not valid" if (length ($peerId) < 6);
}
elsif($list == 0){
@ -4143,10 +4224,10 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
$rName =~ s/_chn-\d\d$//;
my $curVal = CUL_HM_getRegFromStore($rName,$addr,$list,$peerId.$peerChn);
if ($curVal !~ m/^(set_|)(\d+)$/){
return "peer required for $regName" if ($curVal =~ m/peer/);
return "cannot calculate value. Please issue set $name getConfig first - $curVal";
return "peer required for $regName" if ($curVal =~ m/peer/);
return "cannot calculate value. Please issue set $name getConfig first - $curVal"
if ($curVal !~ m/^(set_|)(\d+)$/);
}
;
$curVal = $2; # we expect one byte in int, strap 'set_' possibly
$data = ($curVal & (~($mask<<$bit)))|($data<<$bit);
$addrData.=sprintf("%02X%02X",$addr,$data);
@ -4157,8 +4238,6 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
}
}
# $lChn = "00" if($list == 7 && (!$peerChnIn ||$peerChnIn eq ""));#face to send
my $cHash = CUL_HM_id2Hash($dst.($lChn eq '00'?"":$lChn));
$cHash = $hash if (!$cHash);
CUL_HM_pushConfig($cHash,$id,$dst,hex($lChn),$peerId,hex($peerChn),$list
@ -4999,12 +5078,27 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
}
elsif($cmd eq "teamCall") { #################################################
$state = "";
my $testnr = $hash->{TESTNR} ? ($hash->{TESTNR} +1) : 1;
$hash->{TESTNR} = $testnr;
my $tstNo = sprintf("%02X",$testnr);
my $msg = "++9440".$dst.$dst."00".$tstNo;
CUL_HM_PushCmdStack($hash, $msg);
CUL_HM_parseSDteam("40",$dst,$dst,"00".$tstNo);
if ($md eq "HM-CC-SCD"){
my $testnr = $hash->{TESTNR} ? ($hash->{TESTNR} +1) : 1;
$hash->{TESTNR} = $testnr;
my $tstNo = sprintf("%02X",$testnr);
my $msg = "++9440".$dst.$dst."00".$tstNo;
CUL_HM_PushCmdStack($hash, $msg);
CUL_HM_parseSDteam("40",$dst,$dst,"00".$tstNo);
}
elsif ("HM-SEC-SD-2"){
#1441 44E347 44E347 0102 960000 039190BDC8
my $testnr = $hash->{TESTNR} ? ($hash->{TESTNR} +1) : 1;
$hash->{TESTNR} = $testnr;
my $tstNo = sprintf("%02X",$testnr);
my $msg = "++1441".$dst.$dst."01".$tstNo."960000039190BDC8"; # 96 switch on - other numbers are unknown
# should be AES....
CUL_HM_PushCmdStack($hash, $msg);
CUL_HM_PushCmdStack($hash, $msg);
CUL_HM_PushCmdStack($hash, $msg);
CUL_HM_PushCmdStack($hash, $msg);
}
}
elsif($cmd =~ m/alarm(.*)/) { ###############################################
$state = "";
@ -5522,6 +5616,20 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
elsif($devHash->{cmdStack} &&
$devHash->{helper}{prt}{sProc} != 1 # not processing
){
# if($rxType & 0x02){# prepare tripple burst devices
# #General we test here
# my ($mn,$tp,$tail) = unpack 'A2A2A*',$devHash->{cmdStack}[0];
# Log 1,"General burst $name:".${$devHash->{cmdStack}}[0];
# if($mn eq "++") {
# $mn = ($devHash->{helper}{HM_CMDNR} + 1) & 0xff;
# $devHash->{helper}{HM_CMDNR} = $mn;
# }
# $devHash->{cmdStack}[0] = sprintf("%02X%02X%s",$mn,(hex($tp)|0x10),$tail);
# CUL_HM_SndCmd($devHash,"$devHash->{cmdStack}[0]");
# select(undef, undef, undef, 0.3);
# CUL_HM_SndCmd($devHash,"$devHash->{cmdStack}[0]");
# CUL_HM_ProcessCmdStack($devHash);
# }
if($rxType & 0x02){# handle burst Access devices - add burst Bit
if($st eq "thermostat"){ # others do not support B112
CUL_HM_SndCmd($devHash,"++B112$id$dst");
@ -5761,7 +5869,6 @@ sub CUL_HM_getConfig($){
}
}
sub CUL_HM_calcDisWmSet($){
my $dh = shift;
my ($txt,$col,$icon) = eval $dh->{exe};
@ -5890,11 +5997,14 @@ sub CUL_HM_pushConfig($$$$$$$$@) {#generate messages to config data to register
next if (!$change);#no changes
$change =~ s/00:00//;
$change =~ s/(\ |:)//g;
my $peerN;
my $pN;
$changed = 1;# yes, we did
($list,$peerN) = ($1,$2) if($nrn =~ m/RegL_(..)\.(.*)/);
if ($peerN){($peerAddr,$peerChn) = unpack('A6A2', CUL_HM_name2Id($peerN,$hash));}
($list,$pN) = ($1,$2) if($nrn =~ m/RegL_(..)\.(.*)/);
if ($pN){($peerAddr,$peerChn) = unpack('A6A2', CUL_HM_name2Id($pN,$hash));}
else {($peerAddr,$peerChn) = ('000000','00');}
if (AttrVal($chnhash->{NAME},"peerIDs",0) =~ m/${peerAddr}00/){$peerChn = "00"}# if device we are not sure about device or channel. Check peers
CUL_HM_updtRegDisp($hash,$list,$peerAddr.$peerChn);
############partition
# my @chSplit = unpack('(A28)*',$change);
@ -6590,7 +6700,7 @@ sub CUL_HM_ID2PeerList ($$$) {
my $peerIDs = AttrVal($name,"peerIDs","");
return if (!$peerID && !$peerIDs);
my $hash = $defs{$name};
$peerIDs =~ s/$peerID//g; #avoid duplicate, support unset
$peerIDs =~ s/$peerID//g; #avoid duplicate, support unset
$peerID =~ s/^000000../00000000/; #correct end detector
$peerIDs.= $peerID."," if($set);
my %tmpHash = map { $_ => 1 } split(",",$peerIDs);#remove duplicates
@ -6598,7 +6708,7 @@ sub CUL_HM_ID2PeerList ($$$) {
my $peerNames = ""; #prepare names
my $dId = substr(CUL_HM_name2Id($name),0,6); #get own device ID
foreach my $pId (sort(keys %tmpHash)){
next if ($pId !~ m/^[0-9A-F]{8}$/); #ignore non-channel IDs
next if ($pId !~ m/^[0-9A-Fx]{8}$/); #ignore non-channel IDs
$peerIDs .= $pId.","; #append ID
next if ($pId eq "00000000"); # and end detection
$peerNames .= CUL_HM_peerChName($pId,$dId).",";
@ -6610,6 +6720,7 @@ sub CUL_HM_ID2PeerList ($$$) {
my $md = AttrVal($dHash->{NAME},"model","");
my $chn = InternalVal($name,"chanNo","");
if ($peerNames){
$peerNames =~ s/_chn-01//g; # channel 01 is part of device
$peerNames =~ s/_chn-01//g; # channel 01 is part of device
CUL_HM_UpdtReadSingle($hash,"peerList",$peerNames,0);
$hash->{peerList} = $peerNames;
@ -6699,6 +6810,7 @@ sub CUL_HM_peerChName($$) {#in:<IDorName> <deviceID>, out:name
my($pDev,$pChn) = unpack'A6A2',$pId;
return 'self'.$pChn if ($pDev eq $dId);
return 'fhem'.$pChn if ($pDev eq $iId && !defined $modules{CUL_HM}{defptr}{$pDev});
$pId = $pDev if($pChn =~ m/0[0x]/); # both means device directly. This may be used by remotes and pusdbuttons
return CUL_HM_id2Name($pId);
}
sub CUL_HM_getMId($) {#in: hash(chn or dev) out:model key (key for %culHmModel)
@ -6866,13 +6978,13 @@ sub CUL_HM_id2Name($) { #in: name or HMid out: name
$p = "" if (!defined $p);
return $p if($defs{$p}||$p =~ m/_chn-\d\d$/
|| $p !~ m/^[A-F0-9]{6,8}$/i);
my $devId= substr($p, 0, 6);
my ($devId,$chn) = unpack 'A6A2',$p;
return "broadcast" if($devId eq "000000");
my $defPtr = $modules{CUL_HM}{defptr};
if (length($p) == 8){
if (length($p) == 8 && $chn ne "00"){
return $defPtr->{$p}{NAME} if(defined $defPtr->{$p});#channel
return $defPtr->{$devId}{NAME}."_chn-".substr($p,6,2)
return $defPtr->{$devId}{NAME}."_chn-$chn"
if($defPtr->{$devId});#dev, add chn
return $p; #not defined, return ID only
}
@ -7131,7 +7243,6 @@ sub CUL_HM_updtRegDisp($$$) {
my $regLN = ($hash->{helper}{expert}{raw}?"":".")
.sprintf("RegL_%02X.",$listNo)
.($peerId?CUL_HM_peerChName($peerId,$devId):"");
if (($md eq "HM-MOD-Re-8") && $listNo == 0){#handle Fw bug
CUL_HM_ModRe8($hash,$regLN);
}
@ -7531,7 +7642,7 @@ sub CUL_HM_TCITRTtempReadings($$@) {# parse RT - TC-IT temperature readings
push @time,$h;
}
for (my $idx = 0;$idx<13;$idx++){
my $entry = sprintf(" %s %3.01f",$time[$idx],$temp[$idx]);
my $entry = sprintf(" %s %04.01f",$time[$idx],$temp[$idx]);
$setting .= "Temp set $idxN{$lst}: ${day}_".$days[$day].$entry." C\n";
$dayRead .= $entry;
last if ($time[$idx] eq "24:00");

View File

@ -254,7 +254,7 @@ sub HMinfo_status($){##########################################################
foreach (keys %{$ehash->{helper}{rssi}}){
next if($_ !~ m /at_.*$ehash->{IODev}->{NAME}/ );#ignore unused IODev
$rssiMin{$eName} = $ehash->{helper}{rssi}{$_}{min}
if ($rssiMin{$eName} > $ehash->{helper}{rssi}{$_}{min});
if ($rssiMin{$eName} < $ehash->{helper}{rssi}{$_}{min});
}
}
}
@ -478,18 +478,29 @@ sub HMinfo_peerCheck(@) { #####################################################
if (!$modules{CUL_HM}{defptr}{$pId} &&
(!$pDid || !$modules{CUL_HM}{defptr}{$pDid})){
next if($pDid && CUL_HM_id2IoId($id) eq $pDid);
push @peerIDnotDef,$eName." id:".$pId;
push @peerIDnotDef,"$eName id:$pId";
next;
}
my $pName = CUL_HM_id2Name($pId);
$pName =~s/_chn-01//; #chan 01 could be covered by device
$pName =~s/_chn-0[10]//; #chan 01 could be covered by device
my $pPlist = AttrVal($pName,"peerIDs","");
my $pDName = CUL_HM_id2Name($pDid);
my $pSt = AttrVal($pDName,"subType","");
my $pMd = AttrVal($pDName,"model","");
push @peerIDsNoPeer,$eName." p:".$pName
if ((!$pPlist || $pPlist !~ m/$id/) && $pSt ne "smokeDetector");
my $idc = $id;
if($st =~ m/(pushButton|remote)/){ # type of primary device
$idc = $devId;
if($pChn eq "00"){
foreach (CUL_HM_getAssChnNames($pDName)){
$pPlist .= AttrVal($_,"peerIDs","");
}
}
}
push @peerIDsNoPeer,"$eName p:$pName"
if ( (!$pPlist || $pPlist !~ m/$idc/)
&& $pSt ne "smokeDetector"
&& $pChn eq "00"
);
if ($pSt eq "virtual"){
if (AttrVal($devN,"aesCommReq",0) != 0){
push @peerIDsAES,$eName." p:".$pName
@ -576,8 +587,8 @@ sub HMinfo_burstCheck(@) { ####################################################
next if (!($prxt & 0x82)); # not a burst peer
my $pnb = ReadingsVal($eName,"R-$pn-peerNeedsBurst",ReadingsVal($eName,".R-$pn-peerNeedsBurst",undef));
if (!$pnb) {push @needBurstMiss, $eName;}
elsif($pnb !~ m /on/){push @needBurstFail, $eName;}
if (!$pnb) {push @needBurstMiss, "$eName:$pn";}
elsif($pnb !~ m /on/){push @needBurstFail, "$eName:$pn";}
if ($prxt & 0x80){# conditional burst - is it on?
my $pDevN = CUL_HM_getDeviceName($pn);
@ -2427,7 +2438,7 @@ sub HMinfo_templateWriteDef($){################################################
foreach (keys%{$HMConfig::culHmTpl{$tpl}{reg}}){
push @reg,$_.":".$HMConfig::culHmTpl{$tpl}{reg}{$_};
}
push @tmpl,sprintf("templateDef =>%s=>%s=>%s=>%s"
push @tmpl,sprintf("templateDef =>%s=>%s=>\"%s\"=>%s"
,$tpl
,($HMConfig::culHmTpl{$tpl}{p}?join(":",split(" ",$HMConfig::culHmTpl{$tpl}{p})):"0")
,$HMConfig::culHmTpl{$tpl}{t}

View File

@ -209,7 +209,7 @@ my $K_actDetID = '000000'; # id of actionDetector
,"008A" => {name=>"Schueco_263-133" ,alias=>"HM-LC-Dim1TPBU-FM"} # 1 channel dimmer TPBU (flush mount)
,"008B" => {name=>"Schueco_263-130" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",} # radio-controlled switch actuator 1-channel (flush-mount)
,"008C" => {name=>"Schueco_263-131" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",} # radio-controlled switch actuator 1-channel (flush-mount)
,"008D" => {name=>"Schueco_263-135" ,st=>'pushButton' ,cyc=>'' ,rxt=>'c:w:l' ,lst=>'1,3' ,chn=>"",} # HM Push Button 2
,"008D" => {name=>"Schueco_263-135" ,st=>'pushButton' ,cyc=>'' ,rxt=>'c:w:l' ,lst=>'1,4' ,chn=>"",} # HM Push Button 2
,"008E" => {name=>"Schueco_263-155" ,st=>'remote' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"",} # HM Remote Display 4 buttons
,"008F" => {name=>"Schueco_263-145" ,st=>'pushButton' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"",} # HM Push Button Interface
,"0090" => {name=>"Schueco_263-162" ,st=>'motionDetector' ,cyc=>'00:30' ,rxt=>'c:w:l' ,lst=>'1,3' ,chn=>"",} # HM radio-controlled motion detector
@ -507,7 +507,7 @@ foreach my $al (keys %culHmModel){ # duplicate entries for alias devices
paramSel =>{a=> 27.0,s=>1.0,l=>0,min=>0 ,max=>4 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"data transfered to peer" ,lit=>{off=>0,T1=>1,T2=>2,T1_T2=>3,T2_T1=>4}},
RS485IdleTime =>{a=> 29.0,s=>1.0,l=>0,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>'s' ,d=>0,t=>"Idle Time"},
speedMultiply =>{a=> 30.0,s=>1.0,l=>0,min=>1 ,max=>5 ,c=>'' ,f=>'' ,u=>'x200Hz',d=>0,t=>"speed multiply"},
devRepeatCntMax =>{a=> 31.0,s=>1.0,l=>0,min=>0 ,max=>1 ,c=>'' ,f=>'' ,u=>'' ,d=>0,t=>"Device max retry"},
devRepeatCntMax =>{a=> 31.0,s=>1.0,l=>0,min=>0 ,max=>1 ,c=>'' ,f=>'' ,u=>'' ,d=>0,t=>"act as repeater"},
wakeupDefChan =>{a=> 32.0,s=>1.0,l=>0,min=>0 ,max=>20 ,c=>'' ,f=>'' ,u=>'' ,d=>0,t=>"wakeup default channel"},
wakeupBehavior =>{a=> 33.0,s=>0.1,l=>0,min=>0 ,max=>20 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"wakeup behavior" ,lit=>{off=>0,on=>1}},
alarmTimeMax =>{a=> 34.0,s=>1.0,l=>0,min=>1 ,max=>900 ,c=>'' ,f=>1.6 ,u=>'s' ,d=>0,t=>"maximum Alarm time" ,lit=>{unused=>0}},
@ -644,9 +644,9 @@ foreach my $al (keys %culHmModel){ # duplicate entries for alias devices
evtFltrPeriod =>{a=> 1.0,s=>0.4,l=>1,min=>0.5 ,max=>7.5 ,c=>'' ,f=>2 ,u=>'s' ,d=>1,t=>"event filter period"},
evtFltrNum =>{a=> 1.4,s=>0.4,l=>1,min=>1 ,max=>15 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"sensitivity - read each n-th puls"},
minInterval =>{a=> 2.0,s=>0.3,l=>1,min=>0 ,max=>4 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"minimum interval in sec" ,lit=>{15=>0,30=>1,60=>2,120=>3,240=>4}},
captInInterval =>{a=> 2.3,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"capture within interval" ,lit=>{off=>0,on=>1}},
brightFilter =>{a=> 2.4,s=>0.4,l=>1,min=>0 ,max=>7 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"brightness filter - ignore light at night"},
minInterval =>{a=> 2.0,s=>0.3,l=>1,min=>0 ,max=>4 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"interval in sec" ,lit=>{15=>0,30=>1,60=>2,120=>3,240=>4}},
captInInterval =>{a=> 2.3,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"capture motion in interval, send result in next trigger" ,lit=>{off=>0,on=>1}},
brightFilter =>{a=> 2.4,s=>0.4,l=>1,min=>0 ,max=>7 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"7: filter fast changes to 0: no filter of light changes"},
eventDlyTime =>{a=> 33 ,s=>1 ,l=>1,min=>0 ,max=>7620 ,c=>'fltCvT60' ,f=>'' ,u=>'s' ,d=>1,t=>"filters short events, causes reporting delay"},
ledOnTime =>{a=> 34 ,s=>1 ,l=>1,min=>0 ,max=>1.275 ,c=>'' ,f=>200 ,u=>'s' ,d=>0,t=>"LED ontime"},
eventFilterTime =>{a=> 35 ,s=>1 ,l=>1,min=>0 ,max=>7620 ,c=>'fltCvT60' ,f=>'' ,u=>'s' ,d=>0,t=>"event filter time"},
@ -1652,6 +1652,7 @@ $culHmSubTypeSets{motionAndBtn} = $culHmSubTypeSets{threeStateSensor};
}
,"HM-TC-IT-WM-W-EU" =>{ inhibit =>"[on|off]"}
,"HM-SEC-SD" =>{ statusRequest =>""}
,"HM-SEC-SD-2" =>{ statusRequest =>""}
,"ActionDetector" =>{ clear => "[readings|all]"
,update => ""
}