diff --git a/fhem/FHEM/10_CUL_HM.pm b/fhem/FHEM/10_CUL_HM.pm index fa44652cb..71c33c6d9 100755 --- a/fhem/FHEM/10_CUL_HM.pm +++ b/fhem/FHEM/10_CUL_HM.pm @@ -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. - 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: , 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"); diff --git a/fhem/FHEM/98_HMinfo.pm b/fhem/FHEM/98_HMinfo.pm index 5a3e87577..99f4a78e2 100644 --- a/fhem/FHEM/98_HMinfo.pm +++ b/fhem/FHEM/98_HMinfo.pm @@ -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} diff --git a/fhem/FHEM/HMConfig.pm b/fhem/FHEM/HMConfig.pm index b4b68e1bb..0cf3be6a0 100644 --- a/fhem/FHEM/HMConfig.pm +++ b/fhem/FHEM/HMConfig.pm @@ -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 => "" }