mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-05-04 22:19:38 +00:00
add RC-4-2, update register handling
git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@3262 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
1c0f032722
commit
a2712427b0
@ -897,7 +897,7 @@ sub CUL_HM_Parse($$) {##############################
|
|||||||
if($chn & 0x40){
|
if($chn & 0x40){
|
||||||
if(!$shash->{BNO} || $shash->{BNO} ne $bno){#bno = event counter
|
if(!$shash->{BNO} || $shash->{BNO} ne $bno){#bno = event counter
|
||||||
$shash->{BNO}=$bno;
|
$shash->{BNO}=$bno;
|
||||||
$shash->{BNOCNT}=1; # message counter reest
|
$shash->{BNOCNT}=0; # message counter reest
|
||||||
}
|
}
|
||||||
$shash->{BNOCNT}+=1;
|
$shash->{BNOCNT}+=1;
|
||||||
$state .= "Long" .($mFlg eq "A0" ? "Release" : "").
|
$state .= "Long" .($mFlg eq "A0" ? "Release" : "").
|
||||||
@ -1778,7 +1778,8 @@ sub CUL_HM_Set($@) {
|
|||||||
return "$cmd requires parameter: $h";
|
return "$cmd requires parameter: $h";
|
||||||
}
|
}
|
||||||
|
|
||||||
#convert 'old' commands to current methodes like regSet...
|
#convert 'old' commands to current methodes like regSet and regBulk...
|
||||||
|
# Unify the interface
|
||||||
if($cmd =~ m/^(displayMode|displayTemp|controlMode|decalcDay|displayTempUnit)$/ ||
|
if($cmd =~ m/^(displayMode|displayTemp|controlMode|decalcDay|displayTempUnit)$/ ||
|
||||||
$cmd =~ m/^(day|night|party)-temp$/){ #
|
$cmd =~ m/^(day|night|party)-temp$/){ #
|
||||||
splice @a,1,0,"regSet";# make hash,regSet,reg,value
|
splice @a,1,0,"regSet";# make hash,regSet,reg,value
|
||||||
@ -1790,6 +1791,35 @@ sub CUL_HM_Set($@) {
|
|||||||
elsif($cmd eq "unpair"){
|
elsif($cmd eq "unpair"){
|
||||||
splice @a,1,3, ("regSet","pairCentral","000000");
|
splice @a,1,3, ("regSet","pairCentral","000000");
|
||||||
}
|
}
|
||||||
|
elsif($cmd eq "ilum") { ################################################# reg
|
||||||
|
return "$a[2] not specified. choose 0-15 for brightness" if ($a[2]>15);
|
||||||
|
return "$a[3] not specified. choose 0-127 for duration" if ($a[3]>127);
|
||||||
|
return "unsupported for channel, use $devName" if (!$roleD);
|
||||||
|
splice @a,1,3, ("regBulk","RegL_00:",sprintf(" 04:%02X",$a[2]),sprintf(" 08:%02X",$a[3]*2));
|
||||||
|
}
|
||||||
|
elsif($cmd eq "text") { ################################################# reg
|
||||||
|
my ($bn,$l1, $l2) = ($chn,$a[2],$a[3]); # Create CONFIG_WRITE_INDEX string
|
||||||
|
if (!$roleC){# if used on device.
|
||||||
|
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)$/);
|
||||||
|
$bn = $a[2]*2-($a[3] eq "on" ? 0 : 1);
|
||||||
|
($l1, $l2) = ($a[4],$a[5]);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return "to many parameter. Try set $a[0] text $a[2] $a[3]" if($a[4]);
|
||||||
|
}
|
||||||
|
|
||||||
|
my $s = 54;
|
||||||
|
$l1 = substr($l1."\x00", 0, 13);
|
||||||
|
$l1 =~ s/(.)/sprintf(" %02X:%02X",$s++,ord($1))/ge;
|
||||||
|
|
||||||
|
$s = 70;
|
||||||
|
$l2 = substr($l2."\x00", 0, 13);
|
||||||
|
$l2 =~ s/(.)/sprintf(" %02X:%02X",$s++,ord($1))/ge;
|
||||||
|
|
||||||
|
@a = ($a[0],"regBulk","RegL_00:",split(" ",$l1.$l2));
|
||||||
|
}
|
||||||
|
|
||||||
$cmd = $a[1];# get converted command
|
$cmd = $a[1];# get converted command
|
||||||
|
|
||||||
#if chn cmd is executed on device but refers to a channel?
|
#if chn cmd is executed on device but refers to a channel?
|
||||||
@ -1888,7 +1918,7 @@ sub CUL_HM_Set($@) {
|
|||||||
my ($list,$addr,$data,$peerID);
|
my ($list,$addr,$data,$peerID);
|
||||||
$state = "";
|
$state = "";
|
||||||
if ($cmd eq "regBulk"){
|
if ($cmd eq "regBulk"){
|
||||||
($list) = ($a[2]);
|
$list = $a[2];
|
||||||
$list =~ s/[\.]?RegL_//;
|
$list =~ s/[\.]?RegL_//;
|
||||||
($list,$peerID) = split(":",$list);
|
($list,$peerID) = split(":",$list);
|
||||||
return "unknown list Number:".$list if(hex($list)>6);
|
return "unknown list Number:".$list if(hex($list)>6);
|
||||||
@ -2107,30 +2137,6 @@ sub CUL_HM_Set($@) {
|
|||||||
elsif($cmd eq "stop") { #####################################################
|
elsif($cmd eq "stop") { #####################################################
|
||||||
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.'03'.$chn);
|
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.'03'.$chn);
|
||||||
}
|
}
|
||||||
elsif($cmd eq "text") { ################################################# reg
|
|
||||||
$state = "";
|
|
||||||
my ($bn,$l1, $l2, $s) = ($chn,$a[2],$a[3],54); # Create CONFIG_WRITE_INDEX string
|
|
||||||
if (!$roleC){# if used on device.
|
|
||||||
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)$/);
|
|
||||||
$bn = $a[2]*2-($a[3] eq "on" ? 0 : 1);
|
|
||||||
($l1, $l2) = ($a[4],$a[5]);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
return "to many parameter. Try set $a[0] text $a[2] $a[3]" if($a[4]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$l1 = substr($l1."\x00", 0, 13);
|
|
||||||
$s = 54;
|
|
||||||
$l1 =~ s/(.)/sprintf("%02X%02X",$s++,ord($1))/ge;
|
|
||||||
|
|
||||||
$l2 = substr($l2."\x00", 0, 13);
|
|
||||||
$s = 70;
|
|
||||||
$l2 =~ s/(.)/sprintf("%02X%02X",$s++,ord($1))/ge;
|
|
||||||
$l1 .= $l2;
|
|
||||||
|
|
||||||
CUL_HM_pushConfig($hash, $id, $dst, $bn,0,0,1, $l1);
|
|
||||||
}
|
|
||||||
elsif($cmd eq "setRepeat") { ################################################
|
elsif($cmd eq "setRepeat") { ################################################
|
||||||
# setRepeat => "[no1..36] <sendName> <recName> [bdcast-yes|no]"}
|
# setRepeat => "[no1..36] <sendName> <recName> [bdcast-yes|no]"}
|
||||||
$state = "";
|
$state = "";
|
||||||
@ -2298,15 +2304,6 @@ sub CUL_HM_Set($@) {
|
|||||||
}
|
}
|
||||||
CUL_HM_PushCmdStack($hash,$msg) if ($msg);
|
CUL_HM_PushCmdStack($hash,$msg) if ($msg);
|
||||||
}
|
}
|
||||||
elsif($cmd eq "ilum") { ################################################# reg
|
|
||||||
return "$a[2] not specified. choose 0-15 for brightness" if ($a[2]>15);
|
|
||||||
return "$a[3] not specified. choose 0-127 for duration" if ($a[3]>127);
|
|
||||||
return "unsupported for HMid:".$hash->{DEF}.", use HMId:".substr($hash->{DEF},0,6)
|
|
||||||
if (length($hash->{DEF}) != 6);
|
|
||||||
my $addrData = sprintf("04%02X08%02X",$a[2],$a[3]*2);
|
|
||||||
# write list0,
|
|
||||||
CUL_HM_pushConfig($hash,$id,$dst,0,0,0,0,$addrData);
|
|
||||||
}
|
|
||||||
elsif($cmd eq "desired-temp") { #############################################
|
elsif($cmd eq "desired-temp") { #############################################
|
||||||
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.'0202'.
|
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.'0202'.
|
||||||
CUL_HM_convTemp($a[2]));
|
CUL_HM_convTemp($a[2]));
|
||||||
@ -2458,11 +2455,11 @@ sub CUL_HM_Set($@) {
|
|||||||
$pressCnt));
|
$pressCnt));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif($cmd eq "peerChan") { #################################################
|
elsif($cmd eq "peerChan") { ############################################# reg
|
||||||
#peerChan <btnN> <device> ... [single|dual] [set|unset] [actor|remote|both]
|
#peerChan <btnN> <device> ... [single|dual] [set|unset] [actor|remote|both]
|
||||||
my ($bNo,$peerN,$single,$set,$target) = ($a[2],$a[3],$a[4],$a[5],$a[6]);
|
my ($bNo,$peerN,$single,$set,$target) = ($a[2],$a[3],$a[4],$a[5],$a[6]);
|
||||||
$state = "";
|
$state = "";
|
||||||
return "$bNo is not a button number" if(($bNo < 1) && !$chn);
|
return "$bNo is not a button number" if(($bNo < 1) && $roleD);
|
||||||
my $peerDst = CUL_HM_name2Id($peerN);
|
my $peerDst = CUL_HM_name2Id($peerN);
|
||||||
$peerDst .= "01" if( length($peerDst)==6);
|
$peerDst .= "01" if( length($peerDst)==6);
|
||||||
return "please enter peer" if(!$peerDst);
|
return "please enter peer" if(!$peerDst);
|
||||||
@ -2484,8 +2481,7 @@ sub CUL_HM_Set($@) {
|
|||||||
$set = ($set eq "unset")?0:1;
|
$set = ($set eq "unset")?0:1;
|
||||||
|
|
||||||
my ($b1,$b2,$nrCh2Pair);
|
my ($b1,$b2,$nrCh2Pair);
|
||||||
$b1 = ($isChannel) ? hex($chn):(!$bNo?"01":$bNo);
|
$b1 = (!$roleD) ? hex($chn) : ($single?$bNo : ($bNo*2 - 1));
|
||||||
$b1 = $b1*2 - 1 if(!$single && !$isChannel);
|
|
||||||
if ($single){
|
if ($single){
|
||||||
$b2 = $b1;
|
$b2 = $b1;
|
||||||
$b1 = 0 if ($st eq "smokeDetector");
|
$b1 = 0 if ($st eq "smokeDetector");
|
||||||
@ -2498,7 +2494,7 @@ sub CUL_HM_Set($@) {
|
|||||||
my $cmdB = ($set)?"01":"02";# do we set or remove?
|
my $cmdB = ($set)?"01":"02";# do we set or remove?
|
||||||
|
|
||||||
# First the remote (one loop for on, one for off)
|
# First the remote (one loop for on, one for off)
|
||||||
my $pSt = AttrVal( CUL_HM_id2Name($peerDst), "subType", "");#peer SubType
|
my $pSt = AttrVal( CUL_HM_hash2Name($peerHash), "subType", "");#peer SubType
|
||||||
if (!$target || $target =~ m/^(remote|both)$/){
|
if (!$target || $target =~ m/^(remote|both)$/){
|
||||||
my $burst = ($pSt eq "thermostat"?"0101":"0100");#set burst for target
|
my $burst = ($pSt eq "thermostat"?"0101":"0100");#set burst for target
|
||||||
for(my $i = 1; $i <= $nrCh2Pair; $i++) {
|
for(my $i = 1; $i <= $nrCh2Pair; $i++) {
|
||||||
@ -3129,7 +3125,7 @@ sub CUL_HM_name2Id(@) { #in: name or HMid ==>out: HMid, "" if no match
|
|||||||
}
|
}
|
||||||
sub CUL_HM_id2Name($) { #in: name or HMid out: name
|
sub CUL_HM_id2Name($) { #in: name or HMid out: name
|
||||||
my ($p) = @_;
|
my ($p) = @_;
|
||||||
return $p if($attr{$p}); # is already name
|
return $p if($defs{$p}); # is already name
|
||||||
return $p if ($p =~ m/_chn:/);
|
return $p if ($p =~ m/_chn:/);
|
||||||
my $devId= substr($p, 0, 6);
|
my $devId= substr($p, 0, 6);
|
||||||
return "broadcast" if($devId eq "000000");
|
return "broadcast" if($devId eq "000000");
|
||||||
@ -3818,7 +3814,8 @@ sub CUL_HM_storeRssi(@){
|
|||||||
my $hash = CUL_HM_name2Hash($name);
|
my $hash = CUL_HM_name2Hash($name);
|
||||||
my $rssi;
|
my $rssi;
|
||||||
foreach (keys %{$rssiP}){
|
foreach (keys %{$rssiP}){
|
||||||
$rssi .= $_.":".(int($rssiP->{$_}*100)/100)." ";
|
my $val = $rssiP->{$_}?$rssiP->{$_}:0;
|
||||||
|
$rssi .= $_.":".(int($val*100)/100)." ";
|
||||||
}
|
}
|
||||||
$hash->{"rssi_".$peerName} = $rssi;
|
$hash->{"rssi_".$peerName} = $rssi;
|
||||||
return ;
|
return ;
|
||||||
@ -4709,6 +4706,7 @@ sub CUL_HM_putHash($) {# provide data for HMinfo
|
|||||||
<ul>
|
<ul>
|
||||||
<li>HM-CC-TC:<br>
|
<li>HM-CC-TC:<br>
|
||||||
T: $t H: $h<br>
|
T: $t H: $h<br>
|
||||||
|
battery:[low|ok]<br>
|
||||||
measured-temp $t<br>
|
measured-temp $t<br>
|
||||||
humidity $h<br>
|
humidity $h<br>
|
||||||
actuator $vp %<br>
|
actuator $vp %<br>
|
||||||
|
@ -165,7 +165,7 @@ my %culHmModel=(
|
|||||||
"0080" => {name=>"ROTO_ZEL-STG-RM-HS-4" ,st=>'remote' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"",}, # HM Remote 4 buttons
|
"0080" => {name=>"ROTO_ZEL-STG-RM-HS-4" ,st=>'remote' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"",}, # HM Remote 4 buttons
|
||||||
"0081" => {name=>"ROTO_ZEL-STG-RM-FDK" ,st=>'threeStateSensor' ,cyc=>'28:00' ,rxt=>'c:w' ,lst=>'1,3' ,chn=>"",}, # HM Rotary Handle Sensor
|
"0081" => {name=>"ROTO_ZEL-STG-RM-FDK" ,st=>'threeStateSensor' ,cyc=>'28:00' ,rxt=>'c:w' ,lst=>'1,3' ,chn=>"",}, # HM Rotary Handle Sensor
|
||||||
"0082" => {name=>"Roto_ZEL-STG-RM-FFK" ,st=>'threeStateSensor' ,cyc=>'28:00' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",}, # HM Shutter Contact
|
"0082" => {name=>"Roto_ZEL-STG-RM-FFK" ,st=>'threeStateSensor' ,cyc=>'28:00' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",}, # HM Shutter Contact
|
||||||
"0083" => {name=>"Roto_ZEL-STG-RM-FSS-UP3" ,st=>'switch' ,cyc=>'' ,rxt=>'c' ,lst=>'4' ,chn=>"",}, # HM Switch Interface 3 switches
|
"0083" => {name=>"Roto_ZEL-STG-RM-FSS-UP3" ,st=>'swi' ,cyc=>'' ,rxt=>'c' ,lst=>'4' ,chn=>"",}, # HM Switch Interface 3 switches
|
||||||
"0084" => {name=>"Schueco_263-160" ,st=>'smokeDetector' ,cyc=>'' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",}, # HM SENSOR_FOR_CARBON_DIOXIDE
|
"0084" => {name=>"Schueco_263-160" ,st=>'smokeDetector' ,cyc=>'' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",}, # HM SENSOR_FOR_CARBON_DIOXIDE
|
||||||
"0086" => {name=>"Schueco_263-146" ,st=>'blindActuator' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",}, # radio-controlled blind actuator 1-channel (flush-mount)
|
"0086" => {name=>"Schueco_263-146" ,st=>'blindActuator' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",}, # radio-controlled blind actuator 1-channel (flush-mount)
|
||||||
"0087" => {name=>"Schueco_263-147" ,st=>'blindActuator' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",}, # radio-controlled blind actuator 1-channel (flush-mount)
|
"0087" => {name=>"Schueco_263-147" ,st=>'blindActuator' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",}, # radio-controlled blind actuator 1-channel (flush-mount)
|
||||||
@ -182,6 +182,7 @@ my %culHmModel=(
|
|||||||
"0093" => {name=>"Schueco_263-158" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'p' ,chn=>"",}, #
|
"0093" => {name=>"Schueco_263-158" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'p' ,chn=>"",}, #
|
||||||
"0094" => {name=>"Schueco_263-157" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'p' ,chn=>"",}, #
|
"0094" => {name=>"Schueco_263-157" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'p' ,chn=>"",}, #
|
||||||
"009F" => {name=>"HM-Sen-Wa-Od" ,st=>'sensor' ,cyc=>'28:00' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",}, #capacitive filling level sensor
|
"009F" => {name=>"HM-Sen-Wa-Od" ,st=>'sensor' ,cyc=>'28:00' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",}, #capacitive filling level sensor
|
||||||
|
"00A0" => {name=>"HM-RC-4-2" ,st=>'remote' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:4",},
|
||||||
"00A1" => {name=>"HM-LC-SW1-PL2" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'3' ,chn=>"",}, #
|
"00A1" => {name=>"HM-LC-SW1-PL2" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'3' ,chn=>"",}, #
|
||||||
"00A2" => {name=>"ROTO_ZEL-STG-RM-FZS-2" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",}, #radio-controlled socket adapter switch actuator 1-channel
|
"00A2" => {name=>"ROTO_ZEL-STG-RM-FZS-2" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",}, #radio-controlled socket adapter switch actuator 1-channel
|
||||||
"00A3" => {name=>"HM-LC-Dim1L-Pl-2" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
"00A3" => {name=>"HM-LC-Dim1L-Pl-2" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
||||||
@ -189,6 +190,9 @@ my %culHmModel=(
|
|||||||
"00A7" => {name=>"HM-Sen-RD-O" ,st=>'' ,cyc=>'' ,rxt=>'' ,lst=>'1:1,4:1' ,chn=>"Rain:1:1,Sw:2:2",},
|
"00A7" => {name=>"HM-Sen-RD-O" ,st=>'' ,cyc=>'' ,rxt=>'' ,lst=>'1:1,4:1' ,chn=>"Rain:1:1,Sw:2:2",},
|
||||||
"00A9" => {name=>"HM-PB-6-WM55" ,st=>'remote' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:6",},
|
"00A9" => {name=>"HM-PB-6-WM55" ,st=>'remote' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:6",},
|
||||||
#263 167 HM Smoke Detector Schueco
|
#263 167 HM Smoke Detector Schueco
|
||||||
|
#"HM-RC-Key4-2"
|
||||||
|
#"HM-RC-Sec4-2"
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@ -345,6 +349,7 @@ my %culHmRegDefine = (
|
|||||||
# Blind 9:00 10:00 20:00
|
# Blind 9:00 10:00 20:00
|
||||||
# BL1TPBU 02:01 21:FF
|
# BL1TPBU 02:01 21:FF
|
||||||
# Dim1TPBU 02:01 21:FF 22:00
|
# Dim1TPBU 02:01 21:FF 22:00
|
||||||
|
#Keymatic 3.3 unknown, seen 1 here
|
||||||
|
|
||||||
#--- list 1, Channel level------------------
|
#--- list 1, Channel level------------------
|
||||||
#blindActuator mainly
|
#blindActuator mainly
|
||||||
@ -500,6 +505,7 @@ my %culHmRegGeneral = (
|
|||||||
intKeyVisib=>1,pairCentral=>1,
|
intKeyVisib=>1,pairCentral=>1,
|
||||||
);
|
);
|
||||||
my %culHmRegType = (
|
my %culHmRegType = (
|
||||||
|
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,
|
||||||
},
|
},
|
||||||
@ -781,6 +787,7 @@ my %culHmSubTypeSets = (# channels of this subtype
|
|||||||
);
|
);
|
||||||
# clones- - - - - - - - - - - - - - - - -
|
# clones- - - - - - - - - - - - - - - - -
|
||||||
$culHmSubTypeSets{pushButton} = $culHmSubTypeSets{remote};
|
$culHmSubTypeSets{pushButton} = $culHmSubTypeSets{remote};
|
||||||
|
$culHmSubTypeSets{swi} = $culHmSubTypeSets{remote};
|
||||||
$culHmSubTypeSets{motionDetector} = $culHmSubTypeSets{threeStateSensor};
|
$culHmSubTypeSets{motionDetector} = $culHmSubTypeSets{threeStateSensor};
|
||||||
|
|
||||||
my %culHmModelSets = (# channels of this subtype-------------
|
my %culHmModelSets = (# channels of this subtype-------------
|
||||||
|
Loading…
x
Reference in New Issue
Block a user