message statistics, bug fixes, restrict statusRequest command, fix text for device

git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@4218 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
martinp876 2013-11-14 16:08:43 +00:00
parent 11b0644cf1
commit 980e10b55b
3 changed files with 319 additions and 203 deletions

View File

@ -165,6 +165,11 @@ sub CUL_HM_Initialize($) {
$hash->{helper}{qReqStatWu} = \@statQWuArr; $hash->{helper}{qReqStatWu} = \@statQWuArr;
$hash->{helper}{qReqConf} = \@confQArr; $hash->{helper}{qReqConf} = \@confQArr;
$hash->{helper}{qReqConfWu} = \@confQWuArr; $hash->{helper}{qReqConfWu} = \@confQWuArr;
#statistics
$hash->{stat}{s}{dummy}=0;
$hash->{stat}{r}{dummy}=0;
InternalTimer(gettimeofday()+3600*20,"CUL_HM_statCntRfresh","StatCntRfresh", 0);
CUL_HM_initRegHash(); CUL_HM_initRegHash();
$hash->{hmIoMaxDly} = 60;# poll timeout - stop poll and discard $hash->{hmIoMaxDly} = 60;# poll timeout - stop poll and discard
$hash->{hmAutoReadScan} = 4; # delay autoConf readings $hash->{hmAutoReadScan} = 4; # delay autoConf readings
@ -189,8 +194,7 @@ sub CUL_HM_updateConfig($){
if ( $hash->{helper}{role}{dev} if ( $hash->{helper}{role}{dev}
&& AttrVal($name,"subType","") ne "virtual"){ && AttrVal($name,"subType","") ne "virtual"){
$attr{$name}{expert} = AttrVal($name,"expert" ,"2_full"); $attr{$name}{expert} = AttrVal($name,"expert" ,"2_full");
$attr{$name}{autoReadReg}= AttrVal($name,"autoReadReg","4_reqStatus") $attr{$name}{autoReadReg}= AttrVal($name,"autoReadReg","4_reqStatus");
if(CUL_HM_getRxType($hash)&0xEB);
} }
CUL_HM_Attr("attr",$name,"expert",$attr{$name}{expert});#need update after readings are available CUL_HM_Attr("attr",$name,"expert",$attr{$name}{expert});#need update after readings are available
} }
@ -529,6 +533,7 @@ sub CUL_HM_Parse($$) {##############################
# $shash will be replaced for multichannel commands # $shash will be replaced for multichannel commands
my $shash = $modules{CUL_HM}{defptr}{$src}; my $shash = $modules{CUL_HM}{defptr}{$src};
my $dhash = $modules{CUL_HM}{defptr}{$dst}; my $dhash = $modules{CUL_HM}{defptr}{$dst};
CUL_HM_statCnt($ioName,"r");
$respRemoved = 0; #set to 'no response in this message' at start $respRemoved = 0; #set to 'no response in this message' at start
if(!$shash) { # Unknown source if(!$shash) { # Unknown source
@ -1066,12 +1071,14 @@ sub CUL_HM_Parse($$) {##############################
push @event, "timedOn:".(($err&0x40)?"running":"off"); push @event, "timedOn:".(($err&0x40)?"running":"off");
if ($st ne "switch"){ if ($st ne "switch"){
push @event, "$eventName:up:$vs" if(($err&0x30) == 0x10); my $dir = $err&0x30;
push @event, "$eventName:down:$vs" if(($err&0x30) == 0x20); if ($dir == 0x10){push @event, "$eventName:up:$vs" ;}
push @event, "$eventName:stop:$vs" if(($err&0x30) == 0x00); elsif($dir == 0x20){push @event, "$eventName:down:$vs";}
elsif($dir == 0x00){push @event, "$eventName:stop:$vs";}
elsif($dir == 0x30){push @event, "$eventName:err:$vs";}
if (!$rSUpdt){#dont touch if necessary for dimmer if (!$rSUpdt){#dont touch if necessary for dimmer
if(($err&0x30) != 0x00){CUL_HM_stateUpdatDly($shash->{NAME},120);} if($dir != 0x00){CUL_HM_stateUpdatDly($shash->{NAME},120);}
else {CUL_HM_unQEntity($shash->{NAME},"qReqStat");} else {CUL_HM_unQEntity($shash->{NAME},"qReqStat");}
} }
} }
if ($st eq "dimmer"){ if ($st eq "dimmer"){
@ -1576,6 +1583,7 @@ sub CUL_HM_parseCommon(@){#####################################################
foreach (keys%{$shash->{helper}{prt}{rspWaitSec}}); #back to original message foreach (keys%{$shash->{helper}{prt}{rspWaitSec}}); #back to original message
delete $shash->{helper}{prt}{rspWaitSec}; delete $shash->{helper}{prt}{rspWaitSec};
IOWrite($shash, "", $shash->{helper}{prt}{rspWait}{cmd}); # and send IOWrite($shash, "", $shash->{helper}{prt}{rspWait}{cmd}); # and send
CUL_HM_statCnt($shash->{IODev}{NAME},"s");
#General set timer #General set timer
return "done" return "done"
} }
@ -1675,10 +1683,11 @@ sub CUL_HM_parseCommon(@){#####################################################
$idstr =~ s/(..)/sprintf("%02X%s",$s++,$1)/ge; $idstr =~ s/(..)/sprintf("%02X%s",$s++,$1)/ge;
CUL_HM_pushConfig($shash, $id, $src,0,0,0,0, "0201$idstr"); CUL_HM_pushConfig($shash, $id, $src,0,0,0,0, "0201$idstr");
CUL_HM_ProcessCmdStack($shash); # start processing immediately CUL_HM_ProcessCmdStack($shash); # start processing immediately
CUL_HM_qAutoRead($shash->{NAME},0);
CUL_HM_appFromQ($shash->{NAME},"cf");# stack cmds if waiting CUL_HM_appFromQ($shash->{NAME},"cf");# stack cmds if waiting
} }
elsif(CUL_HM_getRxType($shash) & 0x04){# nothing to pair - maybe send config elsif(CUL_HM_getRxType($shash) & 0x04){# nothing to pair - maybe send config
CUL_HM_qAutoRead($shash->{NAME},0);
CUL_HM_appFromQ($shash->{NAME},"cf"); # stack cmds if waiting CUL_HM_appFromQ($shash->{NAME},"cf"); # stack cmds if waiting
if (hex($mFlg)&0x20){CUL_HM_SndCmd($shash,$mNo."8002".$id.$src."00");} if (hex($mFlg)&0x20){CUL_HM_SndCmd($shash,$mNo."8002".$id.$src."00");}
else{ CUL_HM_ProcessCmdStack($shash);} ;#config else{ CUL_HM_ProcessCmdStack($shash);} ;#config
@ -2215,7 +2224,7 @@ sub CUL_HM_Set($@) {
elsif($cmd eq "text") { ################################################# reg elsif($cmd eq "text") { ################################################# reg
my ($bn,$l1, $l2) = ($chn,$a[2],$a[3]); # Create CONFIG_WRITE_INDEX string my ($bn,$l1, $l2) = ($chn,$a[2],$a[3]); # Create CONFIG_WRITE_INDEX string
if (!$roleC){# if used on device. if (!$roleC){# if used on device.
return "$a[2] is not a button number" if($a[2] !~ m/^\d$/ || $a[2] < 1); return "$a[2] is not a button number" if($a[2] !~ m/^\d*$/ || $a[2] < 1);
return "$a[3] is not on or off" if($a[3] !~ m/^(on|off)$/); return "$a[3] is not on or off" if($a[3] !~ m/^(on|off)$/);
$bn = $a[2]*2-($a[3] eq "on" ? 0 : 1); $bn = $a[2]*2-($a[3] eq "on" ? 0 : 1);
($l1, $l2) = ($a[4],$a[5]); ($l1, $l2) = ($a[4],$a[5]);
@ -3690,11 +3699,58 @@ sub CUL_HM_SndCmd($$) {
} }
$cmd = sprintf("As%02X%02X%s", length($cmd2)/2+1, $mn, $cmd2); $cmd = sprintf("As%02X%02X%s", length($cmd2)/2+1, $mn, $cmd2);
IOWrite($hash, "", $cmd); IOWrite($hash, "", $cmd);
CUL_HM_statCnt($ioName,"s");
CUL_HM_eventP($hash,"Snd"); CUL_HM_eventP($hash,"Snd");
CUL_HM_responseSetup($hash,$cmd); CUL_HM_responseSetup($hash,$cmd);
$cmd =~ m/As(..)(..)(..)(..)(......)(......)(.*)/; $cmd =~ m/As(..)(..)(..)(..)(......)(......)(.*)/;
CUL_HM_DumpProtocol("SND", $io, ($1,$2,$3,$4,$5,$6,$7)); CUL_HM_DumpProtocol("SND", $io, ($1,$2,$3,$4,$5,$6,$7));
} }
sub CUL_HM_statCnt($$) {# set msg statistics for (r)ecive (s)end or (u)pdate
my ($ioName,$dir) = @_;
my $stat = $modules{CUL_HM}{stat};
if (!$stat->{$ioName}){
$stat->{r}{$ioName}{h}{$_} = 0 foreach(0..23);
$stat->{r}{$ioName}{d}{$_} = 0 foreach(0..6);
$stat->{s}{$ioName}{h}{$_} = 0 foreach(0..23);
$stat->{s}{$ioName}{d}{$_} = 0 foreach(0..6);
$stat->{$ioName}{last} = 0;
}
my @l = localtime(gettimeofday());
if ($l[2] != $stat->{$ioName}{last}){#next field
my $end = $l[2];
if ($l[2] < $stat->{$ioName}{last}){#next day
$end += 24;
my $recentD = ($l[6]+6)%7;
foreach my $ud ("r","s"){
$stat->{$ud}{$ioName}{d}{$recentD} = 0;
$stat->{$ud}{$ioName}{d}{$recentD} += $stat->{$ud}{$ioName}{h}{$_}
foreach (0..23);
}
}
foreach (($stat->{$ioName}{last}+1)..$end){
$stat->{r}{$ioName}{h}{$_%24} = 0;
$stat->{s}{$ioName}{h}{$_%24} = 0;
}
$stat->{$ioName}{last} = $l[2];
}
$stat->{$dir}{$ioName}{h}{$l[2]}++ if ($dir ne "u");
}
sub CUL_HM_statCntRfresh($) {# update statistic once a day
my ($ioName,$dir) = @_;
foreach (keys %{$modules{CUL_HM}{stat}{r}}){
if (!$defs{$ioName}){#IO device is deleted, clear counts
delete $modules{CUL_HM}{stat}{$ioName};
delete $modules{CUL_HM}{stat}{r}{$ioName}{h};
delete $modules{CUL_HM}{stat}{r}{$ioName}{d};
delete $modules{CUL_HM}{stat}{s}{$ioName}{h};
delete $modules{CUL_HM}{stat}{s}{$ioName}{d};
next;
}
CUL_HM_statCnt($_,"u") if ($_ ne "dummy");
}
InternalTimer(gettimeofday()+3600*20,"CUL_HM_statCntRfresh","StatCntRfrh",0);
}
sub CUL_HM_respPendRm($) {#del response related entries in messageing entity sub CUL_HM_respPendRm($) {#del response related entries in messageing entity
my ($hash) = @_; my ($hash) = @_;
@ -3757,6 +3813,7 @@ sub CUL_HM_respPendTout($) {
else{# normal device resend else{# normal device resend
CUL_HM_eventP($hash,"Resnd"); CUL_HM_eventP($hash,"Resnd");
IOWrite($hash, "", $pHash->{rspWait}{cmd}); IOWrite($hash, "", $pHash->{rspWait}{cmd});
CUL_HM_statCnt($hash->{IODev}{NAME},"s");
$pHash->{rspWait}{reSent}++; $pHash->{rspWait}{reSent}++;
Log GetLogLevel($name,4),"CUL_HM_Resend: ".$name. " nr ".$pHash->{rspWait}{reSent}; Log GetLogLevel($name,4),"CUL_HM_Resend: ".$name. " nr ".$pHash->{rspWait}{reSent};
InternalTimer(gettimeofday()+rand(20)/10+4,"CUL_HM_respPendTout","respPend:$hash->{DEF}", 0); InternalTimer(gettimeofday()+rand(20)/10+4,"CUL_HM_respPendTout","respPend:$hash->{DEF}", 0);

View File

@ -249,6 +249,44 @@ use warnings;
return sort(@names); return sort(@names);
} }
sub HMinfo_getMsgStat() { #####################################################
my ($hr,$dr,$hs,$ds);
$hr = sprintf("\n %-14s:","receive hour");
$hs = sprintf("\n %-14s:","send hour");
$dr = sprintf("\n %-14s:","receive day");
$ds = sprintf("\n %-14s:","send day");
$hr .= sprintf("| %02d",$_) foreach (0..23);
$hs .= sprintf("| %02d",$_) foreach (0..23);
$dr .= sprintf("|%4s",$_) foreach ("Mon","Tue","Wed","Thu","Fri","Sat","Sun","# tdy");
$ds .= sprintf("|%4s",$_) foreach ("Mon","Tue","Wed","Thu","Fri","Sat","Sun","# tdy");
foreach my $ioD(keys %{$modules{CUL_HM}{stat}{r}}){
next if ($ioD eq "dummy");
$hr .= sprintf("\n %-10s:",$ioD);
$hs .= sprintf("\n %-10s:",$ioD);
$dr .= sprintf("\n %-10s:",$ioD);
$ds .= sprintf("\n %-10s:",$ioD);
$hr .= sprintf("|%3d",$modules{CUL_HM}{stat}{r}{$ioD}{h}{$_}) foreach (0..23);
$hs .= sprintf("|%3d",$modules{CUL_HM}{stat}{s}{$ioD}{h}{$_}) foreach (0..23);
$dr .= sprintf("|%4d",$modules{CUL_HM}{stat}{r}{$ioD}{d}{$_}) foreach (0..6);
$ds .= sprintf("|%4d",$modules{CUL_HM}{stat}{s}{$ioD}{d}{$_}) foreach (0..6);
my ($tdr,$tds);
$tdr += $modules{CUL_HM}{stat}{r}{$ioD}{h}{$_} foreach (0..23);
$tds += $modules{CUL_HM}{stat}{s}{$ioD}{h}{$_} foreach (0..23);
$dr .= sprintf("|#%4d",$tdr);
$ds .= sprintf("|#%4d",$tds);
}
my @l = localtime(gettimeofday());
my $tsts = "\n |";
$tsts .= "----" foreach (1..$l[2]);
$tsts .= ">*" ;
return "msg statistics\n"
.$tsts
.$hr.$hs
.$tsts
.$dr.$ds
;
}
sub HMinfo_SetFn($@) {######################################################### sub HMinfo_SetFn($@) {#########################################################
my ($hash,$name,$cmd,@a) = @_; my ($hash,$name,$cmd,@a) = @_;
my ($opt,$optEmpty,$filter) = ("",1,""); my ($opt,$optEmpty,$filter) = ("",1,"");
@ -274,17 +312,28 @@ sub HMinfo_SetFn($@) {#########################################################
} }
elsif($cmd eq "clear" ) {##actionImmediate: clear parameter-------------- elsif($cmd eq "clear" ) {##actionImmediate: clear parameter--------------
my ($type) = @a; my ($type) = @a;
$opt .= "d" if ($type !~ m/(readings|register)/);# readings apply to all, others device only if ($type eq "msgStat"){
my @entities; foreach (keys %{$modules{CUL_HM}{stat}{r}}){
return "unknown parameter - use Protocol, readings, register or rssi" next if ($_ ne "dummy");
if ($type !~ m/^(Protocol|readings|register|rssi)$/); delete $modules{CUL_HM}{stat}{$_};
$type = "msgEvents" if ($type eq "Protocol");# translate parameter delete $modules{CUL_HM}{stat}{r}{$_};
foreach my $dName (HMinfo_getEntities($opt."v",$filter)){ delete $modules{CUL_HM}{stat}{s}{$_};
push @entities,$dName; }
CUL_HM_Set($defs{$dName},$dName,"clear",$type); return;
}
else{
return "unknown parameter - use Protocol, readings, msgStat, register or rssi"
if ($type !~ m/^(Protocol|readings|register|rssi)$/);
$opt .= "d" if ($type !~ m/(readings|register)/);# readings apply to all, others device only
my @entities;
$type = "msgEvents" if ($type eq "Protocol");# translate parameter
foreach my $dName (HMinfo_getEntities($opt."v",$filter)){
push @entities,$dName;
CUL_HM_Set($defs{$dName},$dName,"clear",$type);
}
return $cmd.$type." done:" ."\n cleared" ."\n ".(join "\n ",sort @entities)
;
} }
return $cmd.$type." done:" ."\n cleared" ."\n ".(join "\n ",sort @entities)
;
} }
elsif($cmd eq "autoReadReg"){##actionImmediate: re-issue register Read------- elsif($cmd eq "autoReadReg"){##actionImmediate: re-issue register Read-------
my @entities; my @entities;
@ -357,6 +406,9 @@ sub HMinfo_SetFn($@) {#########################################################
} }
$ret .= "\n IODevs:".(join"\n ",HMinfo_noDup(@IOlist)); $ret .= "\n IODevs:".(join"\n ",HMinfo_noDup(@IOlist));
} }
elsif($cmd eq "msgStat") {##print message statistics----------------------
$ret = HMinfo_getMsgStat();
}
elsif($cmd eq "rssi") {##print RSSI protocol-events-------------------- elsif($cmd eq "rssi") {##print RSSI protocol-events--------------------
my @rssiList; my @rssiList;
foreach my $dName (HMinfo_getEntities($opt."dv",$filter)){ foreach my $dName (HMinfo_getEntities($opt."dv",$filter)){
@ -551,6 +603,7 @@ sub HMinfo_SetFn($@) {#########################################################
."\n peerXref [<typeFilter>] # peer cross-reference" ."\n peerXref [<typeFilter>] # peer cross-reference"
."\n models [<typeFilter>] # list of models incl native parameter" ."\n models [<typeFilter>] # list of models incl native parameter"
."\n protoEvents [<typeFilter>] [short|long] # protocol status - names can be filtered" ."\n protoEvents [<typeFilter>] [short|long] # protocol status - names can be filtered"
."\n msgStat # view message statistic"
."\n param [<typeFilter>] [<param1>] [<param2>] ... # displays params for all entities as table" ."\n param [<typeFilter>] [<param1>] [<param2>] ... # displays params for all entities as table"
."\n rssi [<typeFilter>] # displays receive level of the HM devices" ."\n rssi [<typeFilter>] # displays receive level of the HM devices"
."\n last: most recent" ."\n last: most recent"
@ -558,11 +611,12 @@ sub HMinfo_SetFn($@) {#########################################################
."\n range: min to max value" ."\n range: min to max value"
."\n count: number of events in calculation" ."\n count: number of events in calculation"
."\n ---clear status---" ."\n ---clear status---"
."\n clear [<typeFilter>] [Protocol|Readings|Rssi]" ."\n clear [<typeFilter>] [Protocol|readings|msgStat|register|rssi]"
."\n Protocol # delete all protocol-events" ."\n Protocol # delete all protocol-events"
."\n readings # delete all readings" ."\n readings # delete all readings"
."\n register # delete all register-readings" ."\n register # delete all register-readings"
."\n rssi # delete all rssi data" ."\n rssi # delete all rssi data"
."\n msgStat # delete message statistics"
."\n ---help---" ."\n ---help---"
."\n help #" ."\n help #"
."\n ***footnote***" ."\n ***footnote***"
@ -627,7 +681,7 @@ sub HMinfo_SetFnDly($) {#######################################################
else{ else{
return "autoReadReg clear " return "autoReadReg clear "
."configCheck param peerCheck peerXref " ."configCheck param peerCheck peerXref "
."protoEvents models regCheck register rssi saveConfig update " ."protoEvents msgStat:view,clear models regCheck register rssi saveConfig update "
."cpRegs templateChk templateDef templateList templateSet"; ."cpRegs templateChk templateDef templateList templateSet";
} }
return $ret; return $ret;
@ -1230,12 +1284,14 @@ sub HMinfo_noDup(@) {#return list with no duplicates
<li><a name="#HMinfoautoReadReg">autoReadReg</a> <a href="HMinfoFilter">[filter]</a><br> <li><a name="#HMinfoautoReadReg">autoReadReg</a> <a href="HMinfoFilter">[filter]</a><br>
schedules a read of the configuration for the CUL_HM devices with attribut autoReadReg set to 1 or higher. schedules a read of the configuration for the CUL_HM devices with attribut autoReadReg set to 1 or higher.
</li> </li>
<li><a name="#HMinfoclear">clear [Protocol|Readings|Rssi]</a> <a href="HMinfoFilter">[filter]</a><br> <li><a name="#HMinfoclear">clear [Protocol|readings|msgStat|register|rssi]</a> <a href="HMinfoFilter">[filter]</a><br>
executes a set clear ... on all HM entities<br> executes a set clear ... on all HM entities<br>
<ul> <ul>
<li>Protocol relates to set clear msgEvents</li> <li>Protocol relates to set clear msgEvents</li>
<li>Readings relates to set clear readings</li> <li>readings relates to set clear readings</li>
<li>Rssi clears all rssi counters </li> <li>rssi clears all rssi counters </li>
<li>msgStat clear HM general message statistics</li>
<li>register clears all register-entries in readings</li>
</ul> </ul>
</li> </li>
<li><a name="#HMinfosaveConfig">saveConfig</a> <a href="HMinfoFilter">[filter]</a><br> <li><a name="#HMinfosaveConfig">saveConfig</a> <a href="HMinfoFilter">[filter]</a><br>

View File

@ -520,9 +520,10 @@ my %culHmRegDefine = (
# SEC-WM55 08:01 (AES on?) # SEC-WM55 08:01 (AES on?)
# SEC-WDS 34:0x64 ? # SEC-WDS 34:0x64 ?
# SEC-SC 08:00 ? # SEC-SC 08:00 ?
# RC19 08:00 ? # RC19 08:00 ? RC19 Button 08:08
# Bl1PBU 08:00 09:00 10:00 # Bl1PBU 08:00 09:00 10:00
# logicCombination=>{a=> 89.0,s=>0.5,l=>1,min=>0 ,max=>16 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"". # logicCombination=>{a=> 89.0,s=>0.5,l=>1,min=>0 ,max=>16 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"".
# "inactive=>unused\n". # "inactive=>unused\n".
# "or =>max(state,chan)\n". # "or =>max(state,chan)\n".
@ -551,8 +552,8 @@ my %culHmRegDefine = (
#--- list 4, link level for Button ------------------ #--- list 4, link level for Button ------------------
peerNeedsBurst =>{a=> 1.0,s=>0.1,l=>4,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"peer expects burst",lit=>{off=>0,on=>1}}, peerNeedsBurst =>{a=> 1.0,s=>0.1,l=>4,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"peer expects burst",lit=>{off=>0,on=>1}},
expectAES =>{a=> 1.7,s=>0.1,l=>4,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"expect AES" ,lit=>{off=>0,on=>1}}, expectAES =>{a=> 1.7,s=>0.1,l=>4,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"expect AES" ,lit=>{off=>0,on=>1}},
lcdSymb =>{a=> 2.0,s=>0.1,l=>4,min=>0 ,max=>255 ,c=>'hex' ,f=>'' ,u=>'' ,d=>0,t=>"bitmask which symbol to display on message"}, lcdSymb =>{a=> 2.0,s=>0.1,l=>4,min=>0 ,max=>8 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"symbol to display on message",lit=>{"none"=>0,"bulb"=>1,"switch"=>2,"window"=>3,"door"=>4,"blind"=>5,"scene"=>6,"phone"=>7,"bell"=>8}},
lcdLvlInterp =>{a=> 3.0,s=>0.1,l=>4,min=>0 ,max=>255 ,c=>'hex' ,f=>'' ,u=>'' ,d=>0,t=>"bitmask for symbols"}, lcdLvlInterp =>{a=> 3.0,s=>0.1,l=>4,min=>0 ,max=>5 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"bitmask for symbols",lit=>{"none"=>0,"light"=>1,"blind"=>2,"marquee"=>3,"door"=>4,"window"=>5}},
fillLvlUpThr =>{a=> 4.0,s=>1 ,l=>4,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"fill level upper threshold"}, fillLvlUpThr =>{a=> 4.0,s=>1 ,l=>4,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"fill level upper threshold"},
fillLvlLoThr =>{a=> 5.0,s=>1 ,l=>4,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"fill level lower threshold"}, fillLvlLoThr =>{a=> 5.0,s=>1 ,l=>4,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"fill level lower threshold"},
@ -640,182 +641,182 @@ my %culHmRegGeneral = (
pairCentral=>1, pairCentral=>1,
); );
my %culHmRegType = ( my %culHmRegType = (
swi =>{peerNeedsBurst =>1,expectAES =>1}, swi =>{ peerNeedsBurst =>1,expectAES =>1},
remote =>{peerNeedsBurst =>1,expectAES =>1,dblPress =>1,longPress =>1, remote =>{ peerNeedsBurst =>1,expectAES =>1,dblPress =>1,longPress =>1
sign =>1 ,sign =>1
}, },
blindActuator =>{intKeyVisib =>1, blindActuator =>{ intKeyVisib =>1
driveUp =>1,driveDown =>1,driveTurn =>1,refRunCounter =>1, ,driveUp =>1,driveDown =>1,driveTurn =>1,refRunCounter =>1
sign =>1, ,sign =>1
MaxTimeF =>1, ,MaxTimeF =>1
OnDly =>1,OnTime =>1,OffDly =>1,OffTime =>1, ,OnDly =>1,OnTime =>1,OffDly =>1,OffTime =>1
OffLevel =>1,OnLevel =>1, ,OffLevel =>1,OnLevel =>1
ActionType =>1,OnTimeMode =>1,OffTimeMode =>1,DriveMode =>1, ,ActionType =>1,OnTimeMode =>1,OffTimeMode =>1,DriveMode =>1
BlJtOn =>1,BlJtOff =>1,BlJtDlyOn =>1,BlJtDlyOff =>1, ,BlJtOn =>1,BlJtOff =>1,BlJtDlyOn =>1,BlJtDlyOff =>1
BlJtRampOn =>1,BlJtRampOff =>1,BlJtRefOn =>1,BlJtRefOff =>1, ,BlJtRampOn =>1,BlJtRampOff =>1,BlJtRefOn =>1,BlJtRefOff =>1
CtValLo =>1,CtValHi =>1, ,CtValLo =>1,CtValHi =>1
CtOn =>1,CtDlyOn =>1,CtRampOn =>1,CtRefOn =>1, ,CtOn =>1,CtDlyOn =>1,CtRampOn =>1,CtRefOn =>1
CtOff =>1,CtDlyOff =>1,CtRampOff =>1,CtRefOff =>1, ,CtOff =>1,CtDlyOff =>1,CtRampOff =>1,CtRefOff =>1
lgMultiExec =>1 ,lgMultiExec =>1
}, },
dimmer =>{intKeyVisib =>1, dimmer =>{ intKeyVisib =>1
transmitTryMax =>1,statusInfoMinDly=>1,statusInfoRandom=>1,powerUpAction =>1, ,transmitTryMax =>1,statusInfoMinDly=>1,statusInfoRandom=>1,powerUpAction =>1
OnDly =>1,OnTime =>1,OffDly =>1,OffTime =>1, ,OnDly =>1,OnTime =>1,OffDly =>1,OffTime =>1
OffDlyBlink =>1,OnLvlPrio =>1,OnDlyMode =>1, ,OffDlyBlink =>1,OnLvlPrio =>1,OnDlyMode =>1
ActionTypeDim =>1,OnTimeMode =>1,OffTimeMode =>1, ,ActionTypeDim =>1,OnTimeMode =>1,OffTimeMode =>1
OffLevel =>1,OnMinLevel =>1,OnLevel =>1, ,OffLevel =>1,OnMinLevel =>1,OnLevel =>1
RampSstep =>1,RampOnTime =>1,RampOffTime =>1, ,RampSstep =>1,RampOnTime =>1,RampOffTime =>1
DimMinLvl =>1,DimMaxLvl =>1,DimStep =>1, ,DimMinLvl =>1,DimMaxLvl =>1,DimStep =>1
DimJtOn =>1,DimJtOff =>1,DimJtDlyOn =>1, ,DimJtOn =>1,DimJtOff =>1,DimJtDlyOn =>1
DimJtDlyOff =>1,DimJtRampOn =>1,DimJtRampOff =>1, ,DimJtDlyOff =>1,DimJtRampOn =>1,DimJtRampOff =>1
CtValLo =>1,CtValHi =>1, ,CtValLo =>1,CtValHi =>1
CtOn =>1,CtDlyOn =>1,CtRampOn =>1, ,CtOn =>1,CtDlyOn =>1,CtRampOn =>1
CtOff =>1,CtDlyOff =>1,CtRampOff =>1, ,CtOff =>1,CtDlyOff =>1,CtRampOff =>1
OffDlyNewTime =>1,OffDlyOldTime =>1, ,OffDlyNewTime =>1,OffDlyOldTime =>1
lgMultiExec =>1 ,lgMultiExec =>1
}, },
switch =>{intKeyVisib =>1,sign =>1, switch =>{ intKeyVisib =>1,sign =>1
OnTime =>1,OffTime =>1,OnDly =>1,OffDly =>1, ,OnTime =>1,OffTime =>1,OnDly =>1,OffDly =>1
SwJtOn =>1,SwJtOff =>1,SwJtDlyOn =>1,SwJtDlyOff =>1, ,SwJtOn =>1,SwJtOff =>1,SwJtDlyOn =>1,SwJtDlyOff =>1
CtValLo =>1,CtValHi =>1, ,CtValLo =>1,CtValHi =>1
CtOn =>1,CtDlyOn =>1,CtOff =>1,CtDlyOff =>1, ,CtOn =>1,CtDlyOn =>1,CtOff =>1,CtDlyOff =>1
ActionType =>1,OnTimeMode =>1,OffTimeMode =>1, ,ActionType =>1,OnTimeMode =>1,OffTimeMode =>1
lgMultiExec =>1 ,lgMultiExec =>1
}, },
winMatic =>{signal =>1,signalTone =>1,keypressSignal =>1}, winMatic =>{ signal =>1,signalTone =>1,keypressSignal =>1},
keyMatic =>{signal =>1,signalTone =>1,keypressSignal =>1, keyMatic =>{ signal =>1,signalTone =>1,keypressSignal =>1
holdTime =>1,holdPWM =>1,setupDir =>1,setupPosition =>1, ,holdTime =>1,holdPWM =>1,setupDir =>1,setupPosition =>1
angelOpen =>1,angelMax =>1,angelLocked =>1, ,angelOpen =>1,angelMax =>1,angelLocked =>1
ledFlashUnlocked=>1,ledFlashLocked =>1, ,ledFlashUnlocked=>1,ledFlashLocked =>1
CtValLo =>1,CtValHi =>1, ,CtValLo =>1,CtValHi =>1
CtOn =>1,CtOff =>1, ,CtOn =>1,CtOff =>1
KeyJtOn =>1,KeyJtOff =>1, ,KeyJtOn =>1,KeyJtOff =>1
OnTime =>1 ,OnTime =>1
}, },
motionDetector =>{evtFltrPeriod =>1,evtFltrNum =>1,minInterval =>1, motionDetector =>{ evtFltrPeriod =>1,evtFltrNum =>1,minInterval =>1
captInInterval =>1,brightFilter =>1,ledOnTime =>1, ,captInInterval =>1,brightFilter =>1,ledOnTime =>1
peerNeedsBurst =>1 ,peerNeedsBurst =>1
}, },
threeStateSensor =>{cyclicInfoMsg =>1, transmDevTryMax =>1, threeStateSensor =>{ cyclicInfoMsg =>1, transmDevTryMax =>1
transmitTryMax =>1, , transmitTryMax =>1
peerNeedsBurst =>1,expectAES =>1 ,peerNeedsBurst =>1,expectAES =>1
}, },
sensRain =>{transmDevTryMax =>1,localResDis =>1}, sensRain =>{ transmDevTryMax =>1,localResDis =>1},
tipTronic =>{cyclicInfoMsg =>1,cyclicInfoMsgDis=>1,localResDis =>1,RS485IdleTime =>1}, tipTronic =>{ cyclicInfoMsg =>1,cyclicInfoMsgDis=>1,localResDis =>1,RS485IdleTime =>1},
powerMeter =>{intKeyVisib =>1}, powerMeter =>{ intKeyVisib =>1},
); );
#clones - - - - - - - - - - - - - - - #clones - - - - - - - - - - - - - - -
$culHmRegType{pushButton} = $culHmRegType{remote}; $culHmRegType{pushButton} = $culHmRegType{remote};
my %culHmRegModel = ( my %culHmRegModel = (
"HM-RC-12" =>{backAtKey =>1, backAtMotion =>1, backOnTime =>1}, "HM-RC-12" =>{ backAtKey =>1, backAtMotion =>1, backOnTime =>1},
"HM-RC-19" =>{backAtKey =>1, backAtMotion =>1, backOnTime =>1,backAtCharge =>1,language =>1}, "HM-RC-19" =>{ backAtKey =>1, backAtMotion =>1, backOnTime =>1,backAtCharge =>1,language =>1
"HM-RC-4-2" =>{localResDis =>1}, ,lcdSymb =>1, lcdLvlInterp =>1
},
"HM-RC-4-2" =>{ localResDis =>1},
"HM-LC-Bl1PBU-FM" =>{transmitTryMax =>1,statusInfoMinDly=>1,statusInfoRandom=>1,localResDis =>1}, "HM-LC-Bl1PBU-FM" =>{ transmitTryMax =>1,statusInfoMinDly=>1,statusInfoRandom=>1,localResDis =>1},
"HM-LC-Dim1L-Pl" =>{confBtnTime =>1,loadAppearBehav =>1,loadErrCalib =>1 "HM-LC-Dim1L-Pl" =>{ confBtnTime =>1,loadAppearBehav =>1,loadErrCalib =>1},
}, "HM-LC-Dim1L-CV-2" =>{ confBtnTime =>1,loadAppearBehav =>1,loadErrCalib =>1
"HM-LC-Dim1L-CV-2"=>{confBtnTime =>1,loadAppearBehav =>1,loadErrCalib =>1, ,logicCombination=>1
logicCombination=>1, ,DimElsOffTimeMd =>1,DimElsOnTimeMd =>1
DimElsOffTimeMd =>1,DimElsOnTimeMd =>1, ,DimElsActionType=>1
DimElsActionType=>1, ,DimElsJtOn =>1,DimElsJtOff =>1,DimElsJtDlyOn =>1
DimElsJtOn =>1,DimElsJtOff =>1,DimElsJtDlyOn =>1, ,DimElsJtDlyOff =>1,DimElsJtRampOn =>1,DimElsJtRampOff =>1
DimElsJtDlyOff =>1,DimElsJtRampOn =>1,DimElsJtRampOff =>1 },
}, "HM-LC-Dim1PWM-CV" =>{ confBtnTime =>1,ovrTempLvl =>1,redTempLvl =>1,redLvl =>1
"HM-LC-Dim1PWM-CV"=>{confBtnTime =>1,ovrTempLvl =>1,redTempLvl =>1,redLvl =>1, ,characteristic =>1,localResDis =>1
characteristic =>1,localResDis =>1, ,logicCombination=>1
logicCombination=>1, ,DimElsOffTimeMd =>1,DimElsOnTimeMd =>1
DimElsOffTimeMd =>1,DimElsOnTimeMd =>1, ,DimElsActionType=>1
DimElsActionType=>1, ,DimElsJtOn =>1,DimElsJtOff =>1,DimElsJtDlyOn =>1
DimElsJtOn =>1,DimElsJtOff =>1,DimElsJtDlyOn =>1, ,DimElsJtDlyOff =>1,DimElsJtRampOn =>1,DimElsJtRampOff =>1
DimElsJtDlyOff =>1,DimElsJtRampOn =>1,DimElsJtRampOff =>1 },
}, "HM-LC-Dim1T-Pl" =>{ confBtnTime =>1,ovrTempLvl =>1,redTempLvl =>1,redLvl =>1
"HM-LC-Dim1T-Pl" =>{confBtnTime =>1,ovrTempLvl =>1,redTempLvl =>1,redLvl =>1, ,fuseDelay =>1
fuseDelay =>1 },
}, "HM-LC-Dim1TPBU-FM" =>{ ovrTempLvl =>1,redTempLvl =>1,redLvl =>1
"HM-LC-Dim1TPBU-FM"=>{ ovrTempLvl =>1,redTempLvl =>1,redLvl =>1, ,fuseDelay =>1,localResDis =>1
fuseDelay =>1,localResDis =>1, ,logicCombination=>1
logicCombination=>1, ,DimElsOffTimeMd =>1,DimElsOnTimeMd =>1
DimElsOffTimeMd =>1,DimElsOnTimeMd =>1, ,DimElsActionType=>1
DimElsActionType=>1, ,DimElsJtOn =>1,DimElsJtOff =>1,DimElsJtDlyOn =>1
DimElsJtOn =>1,DimElsJtOff =>1,DimElsJtDlyOn =>1, ,DimElsJtDlyOff =>1,DimElsJtRampOn =>1,DimElsJtRampOff =>1
DimElsJtDlyOff =>1,DimElsJtRampOn =>1,DimElsJtRampOff =>1 },
},
"HM-CC-VD" =>{valveOffset =>1,valveErrorPos =>1}, "HM-CC-VD" =>{ valveOffset =>1,valveErrorPos =>1},
"HM-CC-TC" =>{burstRx =>1,backlOnTime =>1,backlOnMode =>1,btnLock =>1}, "HM-CC-TC" =>{ burstRx =>1,backlOnTime =>1,backlOnMode =>1,btnLock =>1},
"HM-CC-RT-DN" =>{btnLock =>1,localResDis =>1,globalBtnLock =>1,modusBtnLock =>1, "HM-CC-RT-DN" =>{ btnLock =>1,localResDis =>1,globalBtnLock =>1,modusBtnLock =>1
cyclicInfoMsg =>1,cyclicInfoMsgDis=>1, ,cyclicInfoMsg =>1,cyclicInfoMsgDis=>1
burstRx =>1,lowBatLimitRT =>1,backOnTime =>1, ,burstRx =>1,lowBatLimitRT =>1,backOnTime =>1
sign =>1 ,sign =>1
}, },
"HM-PB-4DIS-WM" =>{peerNeedsBurst =>1,expectAES =>1,language =>1,stbyTime =>1},
"HM-WDS100-C6-O" =>{burstRx =>1,sunThresh =>1,stormUpThresh =>1,stormLowThresh =>1},
"KS550" =>{stormUpThresh =>1,stormLowThresh =>1},
"HM-OU-LED16" =>{brightness =>1,energyOpt =>1,localResDis =>1},
"HM-OU-CFM-PL" =>{localResetDis =>1,
OnTime =>1,OffTime =>1,OnDly =>1,OffDly =>1,
OnTimeMode =>1,OffTimeMode =>1,
SwJtOn =>1,SwJtOff =>1,SwJtDlyOn =>1,SwJtDlyOff =>1,
CtValLo =>1,CtValHi =>1,
CtOn =>1,CtDlyOn =>1,CtOff =>1,CtDlyOff =>1,
ActionType =>1,ActNum =>1,lgMultiExec =>1},
"HM-OU-CF-PL" =>{ActTypeOuCf =>1,ActNum =>1},
"HM-OU-CM-PCB" =>{localResetDis =>1,
OnTime =>1,OffTime =>1,OnDly =>1,OffDly =>1,
OnTimeMode =>1,OffTimeMode =>1,
SwJtOn =>1,SwJtOff =>1,SwJtDlyOn =>1,SwJtDlyOff =>1,
CtValLo =>1,CtValHi =>1,
CtOn =>1,CtDlyOn =>1,CtOff =>1,CtDlyOff =>1,
ActionType =>1,
ActTypeMp3 =>1,ActNum =>1,Intense =>1,lgMultiExec =>1},
"HM-SEC-MDIR" =>{ sabotageMsg =>1},
"HM-CC-SCD" =>{peerNeedsBurst =>1,expectAES =>1,
transmitTryMax =>1,evtFltrTime =>1,
msgScdPosA =>1,msgScdPosB =>1,msgScdPosC =>1,msgScdPosD =>1},
"HM-SEC-RHS" =>{msgRhsPosA =>1,msgRhsPosB =>1,msgRhsPosC =>1,
ledOnTime =>1,eventDlyTime =>1},
"HM-SEC-SC" =>{ sabotageMsg =>1,
msgScPosA =>1,msgScPosB =>1,
ledOnTime =>1,eventDlyTime =>1},
"HM-SCI-3-FM" =>{msgScPosA =>1,msgScPosB =>1,
eventDlyTime =>1},
"HM-SEC-TIS" =>{ sabotageMsg =>1,
msgScPosA =>1,msgScPosB =>1,
ledOnTime =>1,eventFilterTime =>1},
"HM-SEC-WDS" =>{msgWdsPosA =>1,msgWdsPosB =>1,msgWdsPosC =>1,
eventFilterTimeB=>1},
"HM-SEC-SFA-SM" =>{cyclicInfoMsg =>1,sabotageMsg =>1,transmDevTryMax =>1,
lowBatLimit =>1,batDefectLimit =>1,
transmitTryMax =>1},
"HM-Dis-TD-T" =>{lowBatLimitFS =>1,ledMode =>1},
"HM-LC-SW1-BA-PCB"=>{lowBatLimitBA =>1,ledMode =>1},
"HM-Sys-sRP-Pl" =>{compMode =>1},
"KFM-Display" =>{CtDlyOn =>1,CtDlyOff =>1,
CtOn =>1,CtOff =>1,CtRampOn =>1,CtRampOff =>1,
CtValLo =>1,CtValHi =>1,
ActionType =>1,OffTimeMode =>1,OnTimeMode =>1,
DimJtOn =>1,DimJtOff =>1,DimJtDlyOn =>1,DimJtDlyOff =>1,
DimJtRampOn =>1,DimJtRampOff =>1,
lgMultiExec =>1
},
"HM-Sen-Wa-Od" =>{cyclicInfoMsgDis=>1, transmDevTryMax =>1,localResDis =>1,
ledOnTime =>1,transmitTryMax =>1,
waterUppThr =>1,waterlowThr =>1,caseDesign =>1,caseHigh =>1,
fillLevel =>1,caseWidth =>1,caseLength =>1,meaLength =>1,
useCustom =>1,
fillLvlUpThr =>1,fillLvlLoThr =>1,
expectAES =>1,peerNeedsBurst =>1},
"HM-WDS10-TH-O" =>{burstRx =>1},
"HM-WDS30-OT2-SM" =>{burstRx =>1,cyclicInfoMsgDis=>1,localResDis =>1,paramSel =>1},
"HM-TC-IT-WM-W-EU"=>{burstRx =>1,cyclicInfoMsgDis=>1,localResDis =>1,cyclicInfoMsg =>1,
btnLock =>1,globalBtnLock =>1,modusBtnLock =>1,lowBatLimitRT =>1,
},
"HM-ES-PMSw1-Pl" =>{localResDis =>1,},
"HM-PB-4DIS-WM" =>{ peerNeedsBurst =>1,expectAES =>1,language =>1,stbyTime =>1},
"HM-WDS100-C6-O" =>{ burstRx =>1,sunThresh =>1,stormUpThresh =>1,stormLowThresh =>1},
"KS550" =>{ stormUpThresh =>1,stormLowThresh =>1},
"HM-OU-LED16" =>{ brightness =>1,energyOpt =>1,localResDis =>1},
"HM-OU-CFM-PL" =>{ localResetDis =>1
,OnTime =>1,OffTime =>1,OnDly =>1,OffDly =>1
,OnTimeMode =>1,OffTimeMode =>1,
,SwJtOn =>1,SwJtOff =>1,SwJtDlyOn =>1,SwJtDlyOff =>1
,CtValLo =>1,CtValHi =>1
,CtOn =>1,CtDlyOn =>1,CtOff =>1,CtDlyOff =>1
,ActionType =>1,ActNum =>1,lgMultiExec =>1},
"HM-OU-CF-PL" =>{ ActTypeOuCf =>1,ActNum =>1},
"HM-OU-CM-PCB" =>{ localResetDis =>1,
,OnTime =>1,OffTime =>1,OnDly =>1,OffDly =>1
,OnTimeMode =>1,OffTimeMode =>1,
,SwJtOn =>1,SwJtOff =>1,SwJtDlyOn =>1,SwJtDlyOff =>1
,CtValLo =>1,CtValHi =>1
,CtOn =>1,CtDlyOn =>1,CtOff =>1,CtDlyOff =>1
,ActionType =>1
,ActTypeMp3 =>1,ActNum =>1,Intense =>1,lgMultiExec =>1},
"HM-SEC-MDIR" =>{ sabotageMsg =>1},
"HM-CC-SCD" =>{ peerNeedsBurst =>1,expectAES =>1
, transmitTryMax =>1,evtFltrTime =>1
,msgScdPosA =>1,msgScdPosB =>1,msgScdPosC =>1,msgScdPosD =>1},
"HM-SEC-RHS" =>{ msgRhsPosA =>1,msgRhsPosB =>1,msgRhsPosC =>1
, ledOnTime =>1,eventDlyTime =>1},
"HM-SEC-SC" =>{ sabotageMsg =>1
,msgScPosA =>1,msgScPosB =>1
, ledOnTime =>1,eventDlyTime =>1},
"HM-SCI-3-FM" =>{ msgScPosA =>1,msgScPosB =>1
, eventDlyTime =>1},
"HM-SEC-TIS" =>{ sabotageMsg =>1
,msgScPosA =>1,msgScPosB =>1
, ledOnTime =>1,eventFilterTime =>1},
"HM-SEC-WDS" =>{ msgWdsPosA =>1,msgWdsPosB =>1,msgWdsPosC =>1
, eventFilterTimeB=>1},
"HM-SEC-SFA-SM" =>{ cyclicInfoMsg =>1,sabotageMsg =>1,transmDevTryMax =>1
,lowBatLimit =>1,batDefectLimit =>1
, transmitTryMax =>1},
"HM-Dis-TD-T" =>{ lowBatLimitFS =>1,ledMode =>1},
"HM-LC-SW1-BA-PCB" =>{ lowBatLimitBA =>1,ledMode =>1},
"HM-Sys-sRP-Pl" =>{ compMode =>1},
"KFM-Display" =>{ CtDlyOn =>1,CtDlyOff =>1
,CtOn =>1,CtOff =>1,CtRampOn =>1,CtRampOff =>1
,CtValLo =>1,CtValHi =>1
,ActionType =>1,OffTimeMode =>1,OnTimeMode =>1
,DimJtOn =>1,DimJtOff =>1,DimJtDlyOn =>1,DimJtDlyOff =>1
,DimJtRampOn =>1,DimJtRampOff =>1
,lgMultiExec =>1
},
"HM-Sen-Wa-Od" =>{ cyclicInfoMsgDis=>1, transmDevTryMax =>1,localResDis =>1
, ledOnTime =>1,transmitTryMax =>1
,waterUppThr =>1,waterlowThr =>1,caseDesign =>1,caseHigh =>1
,fillLevel =>1,caseWidth =>1,caseLength =>1,meaLength =>1
,useCustom =>1,
,fillLvlUpThr =>1,fillLvlLoThr =>1
,expectAES =>1,peerNeedsBurst =>1},
"HM-WDS10-TH-O" =>{ burstRx =>1},
"HM-WDS30-OT2-SM" =>{ burstRx =>1,cyclicInfoMsgDis=>1,localResDis =>1,paramSel =>1},
"HM-TC-IT-WM-W-EU" =>{ burstRx =>1,cyclicInfoMsgDis=>1,localResDis =>1,cyclicInfoMsg =>1
,btnLock =>1,globalBtnLock =>1,modusBtnLock =>1,lowBatLimitRT =>1
},
"HM-ES-PMSw1-Pl" =>{ localResDis =>1},
); );
#clones - - - - - - - - - - - - - - - #clones - - - - - - - - - - - - - - -
@ -882,7 +883,6 @@ my %culHmRegChan = (# if channelspecific then enter them here
"HM-CC-TC03" =>{ tempWinOpen =>1 }, #window channel "HM-CC-TC03" =>{ tempWinOpen =>1 }, #window channel
"HM-RC-1912" =>{ msgShowTime =>1, beepAtAlarm =>1, beepAtService =>1,beepAtInfo =>1 "HM-RC-1912" =>{ msgShowTime =>1, beepAtAlarm =>1, beepAtService =>1,beepAtInfo =>1
,backlAtAlarm =>1, backlAtService =>1, backlAtInfo =>1 ,backlAtAlarm =>1, backlAtService =>1, backlAtInfo =>1
,lcdSymb =>1, lcdLvlInterp =>1
}, },
"HM-OU-CFM-PL01" =>{ ActTypeLed =>1}, "HM-OU-CFM-PL01" =>{ ActTypeLed =>1},
"HM-OU-CFM-PL02" =>{ ActTypeMp3 =>1,Intense =>1}, "HM-OU-CFM-PL02" =>{ ActTypeMp3 =>1,Intense =>1},
@ -1027,15 +1027,15 @@ my %culHmSubTypeDevSets = (# device of this subtype
blindActuator =>{ statusRequest => "", blindActuator =>{ statusRequest => "",
getSerial => ""}, getSerial => ""},
# remote =>{ }, # remote =>{ },
threeStateSensor =>{ statusRequest =>""}, # threeStateSensor =>{ statusRequest =>""},
# THSensor =>{ statusRequest =>""}, at least OT/OT2 do not support this # THSensor =>{ statusRequest =>""}, at least OT/OT2 do not support this
# virtual =>{ }, # virtual =>{ },
# smokeDetector =>{ statusRequest => ""}, # smokeDetector =>{ statusRequest => ""},#not SCD
winMatic =>{ statusRequest => ""}, winMatic =>{ statusRequest => ""},
keyMatic =>{ statusRequest => ""}, keyMatic =>{ statusRequest => ""},
repeater =>{ statusRequest => "", repeater =>{ statusRequest => "",
getSerial => ""}, getSerial => ""},
outputUnit =>{ statusRequest => ""}, outputUnit =>{ statusRequest => ""},# also LED16? proof
); );
my %culHmGlobalSetsChn = (# all channels but virtuals my %culHmGlobalSetsChn = (# all channels but virtuals
@ -1075,17 +1075,18 @@ my %culHmSubTypeSets = (# channels of this subtype
,statusRequest =>""}, ,statusRequest =>""},
remote =>{ peerChan =>"<btnNumber> <actChn> ... [single|dual] [set|unset] [actor|remote|both]"}, remote =>{ peerChan =>"<btnNumber> <actChn> ... [single|dual] [set|unset] [actor|remote|both]"},
threeStateSensor =>{ peerChan =>"<btnNumber> <actChn> ... single [set|unset] [actor|remote|both]" threeStateSensor =>{ peerChan =>"<btnNumber> <actChn> ... single [set|unset] [actor|remote|both]"
,statusRequest =>""}, # ,statusRequest =>""
},
THSensor =>{ peerChan =>"<btnNumber> <actChn> ... single [set|unset] [actor|remote|both]"}, THSensor =>{ peerChan =>"<btnNumber> <actChn> ... single [set|unset] [actor|remote|both]"},
virtual =>{ peerChan =>"<btnNumber> <actChn> ... [single|dual] [set|unset] [actor|remote|both]" virtual =>{ peerChan =>"<btnNumber> <actChn> ... [single|dual] [set|unset] [actor|remote|both]"
,press =>"[long|short]..." ,press =>"[long|short]..."
,postEvent =>"<condition>" ,postEvent =>"<condition>"
,valvePos =>"<position>"},#acting as TC # ,valvePos =>"<position>"
},#acting as TC
smokeDetector =>{ test =>"" smokeDetector =>{ test =>""
,alarmOn =>"" ,alarmOn =>""
,alarmOff =>"" ,alarmOff =>""
,peerChan =>"<btnNumber> <actChn> ... single [set|unset] actor" ,peerChan =>"<btnNumber> <actChn> ... single [set|unset] actor"},
,statusRequest =>""},
winMatic =>{ matic =>"<btn>" winMatic =>{ matic =>"<btn>"
,keydef =>"<btn> <txt1> <txt2>" ,keydef =>"<btn> <txt1> <txt2>"
,create =>"<txt>" ,create =>"<txt>"
@ -1109,6 +1110,7 @@ $culHmSubTypeSets{sensor} = $culHmSubTypeSets{outputUnit};
$culHmSubTypeSets{KFM100} = $culHmSubTypeSets{outputUnit}; $culHmSubTypeSets{KFM100} = $culHmSubTypeSets{outputUnit};
$culHmSubTypeSets{blindActuatorSol}= $culHmSubTypeSets{outputUnit}; $culHmSubTypeSets{blindActuatorSol}= $culHmSubTypeSets{outputUnit};
$culHmSubTypeSets{tipTronic} = $culHmSubTypeSets{outputUnit}; $culHmSubTypeSets{tipTronic} = $culHmSubTypeSets{outputUnit};
$culHmSubTypeSets{powerMeter} = $culHmSubTypeSets{outputUnit};
$culHmSubTypeSets{motionDetector} = $culHmSubTypeSets{threeStateSensor}; $culHmSubTypeSets{motionDetector} = $culHmSubTypeSets{threeStateSensor};
@ -1131,6 +1133,7 @@ my %culHmModelSets = (# channels of this subtype-------------
,inhibit =>"[on|off]"}, ,inhibit =>"[on|off]"},
"HM-CC-TC" =>{ burstXmit =>""}, "HM-CC-TC" =>{ burstXmit =>""},
"HM-CC-RT-DN" =>{ burstXmit =>""}, "HM-CC-RT-DN" =>{ burstXmit =>""},
"HM-CC-RT-DN-BoM"=>{ statusRequest =>""},
); );
# clones- - - - - - - - - - - - - - - - - # clones- - - - - - - - - - - - - - - - -
$culHmModelSets{"HM-RC-19-B"} = $culHmModelSets{"HM-RC-19"}; $culHmModelSets{"HM-RC-19-B"} = $culHmModelSets{"HM-RC-19"};