mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-17 05:16:02 +00:00
fix for RC19, cfm and others
git-svn-id: https://svn.fhem.de/fhem/trunk@3118 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
5fa9696237
commit
4e80cb4525
@ -10,7 +10,7 @@ sub HMLAN_Parse($$);
|
|||||||
sub HMLAN_Read($);
|
sub HMLAN_Read($);
|
||||||
sub HMLAN_Write($$$);
|
sub HMLAN_Write($$$);
|
||||||
sub HMLAN_ReadAnswer($$$);
|
sub HMLAN_ReadAnswer($$$);
|
||||||
sub HMLAN_uptime($);
|
sub HMLAN_uptime($$);
|
||||||
sub HMLAN_secSince2000();
|
sub HMLAN_secSince2000();
|
||||||
|
|
||||||
sub HMLAN_SimpleWrite(@);
|
sub HMLAN_SimpleWrite(@);
|
||||||
@ -149,9 +149,8 @@ sub HMLAN_ReadAnswer($$$) {# This is a direct read for commands like get
|
|||||||
DevIo_Disconnected($hash);
|
DevIo_Disconnected($hash);
|
||||||
return("HMLAN_ReadAnswer $arg: $err", undef);
|
return("HMLAN_ReadAnswer $arg: $err", undef);
|
||||||
}
|
}
|
||||||
return ("Timeout reading answer for get $arg", undef)
|
return ("Timeout reading answer for get $arg", undef) if($nfound == 0);
|
||||||
if($nfound == 0);
|
$buf = DevIo_SimpleRead($hash);# and now read
|
||||||
$buf = DevIo_SimpleRead($hash);
|
|
||||||
return ("No data", undef) if(!defined($buf));
|
return ("No data", undef) if(!defined($buf));
|
||||||
|
|
||||||
if($buf) {
|
if($buf) {
|
||||||
@ -162,7 +161,7 @@ sub HMLAN_ReadAnswer($$$) {# This is a direct read for commands like get
|
|||||||
if($regexp && $mdata !~ m/$regexp/) {
|
if($regexp && $mdata !~ m/$regexp/) {
|
||||||
HMLAN_Parse($hash, $mdata);
|
HMLAN_Parse($hash, $mdata);
|
||||||
} else {
|
} else {
|
||||||
return (undef, $mdata)
|
return (undef, $mdata);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -231,11 +230,42 @@ sub HMLAN_Read($) {############################################################
|
|||||||
}
|
}
|
||||||
$hash->{PARTIAL} = $hmdata;
|
$hash->{PARTIAL} = $hmdata;
|
||||||
}
|
}
|
||||||
sub HMLAN_uptime($) {##########################################################
|
sub HMLAN_uptime($$) {#########################################################
|
||||||
my $msec = shift;
|
my ($hash,$msec) = @_;
|
||||||
|
|
||||||
$msec = hex($msec);
|
$msec = hex($msec);
|
||||||
my $sec = int($msec/1000);
|
my $sec = int($msec/1000);
|
||||||
|
|
||||||
|
# my ($sysec, $syusec) = gettimeofday();
|
||||||
|
# if (!$hash->{helper}{refTime}){ #init referenceTime
|
||||||
|
# $hash->{helper}{refTime} = $syusec/1000;
|
||||||
|
# $hash->{helper}{refTimeS} = $sysec*1000+$syusec/1000;
|
||||||
|
# $hash->{helper}{refTStmp} = $msec;
|
||||||
|
# }
|
||||||
|
# else{
|
||||||
|
# my $dly = ($sysec*1000+$syusec/1000 - $hash->{helper}{refTimeS} ) -
|
||||||
|
# ($msec - $hash->{helper}{refTStmp});
|
||||||
|
# $hash->{helper}{msgdly} = $dly;
|
||||||
|
# $hash->{helper}{msgdlymin} = $dly
|
||||||
|
# if (!$hash->{helper}{msgdlymin} || $hash->{helper}{msgdlymin} > $dly);
|
||||||
|
# $hash->{helper}{msgdlymax} = $dly
|
||||||
|
# if (!$hash->{helper}{msgdlymax} || $hash->{helper}{msgdlymax} < $dly);
|
||||||
|
# readingsSingleUpdate($hash,"msgDly","last:".$hash->{helper}{msgdly}
|
||||||
|
# ." min:".$hash->{helper}{msgdlymin}
|
||||||
|
# ." max:".$hash->{helper}{msgdlymax},0);
|
||||||
|
# Log 1,"General msgDly: ".$hash->{helper}{msgdly}
|
||||||
|
# ." min:".$hash->{helper}{msgdlymin}
|
||||||
|
# ." max:".$hash->{helper}{msgdlymax}
|
||||||
|
# ." syss:".$sysec
|
||||||
|
# ." sysus:".$syusec/1000
|
||||||
|
# ." sysref:".$hash->{helper}{refTime}
|
||||||
|
# ." sysrefS:".$hash->{helper}{refTimeS}
|
||||||
|
# ." sysrefC:".($sysec*1000+$syusec/1000)
|
||||||
|
# ." sysrefSd:".($sysec*1000+$syusec/1000 - $hash->{helper}{refTimeS})
|
||||||
|
# ." lan:".$msec
|
||||||
|
# ." land:".($msec- $hash->{helper}{refTStmp})
|
||||||
|
# ;
|
||||||
|
# }
|
||||||
return sprintf("%03d %02d:%02d:%02d.%03d",
|
return sprintf("%03d %02d:%02d:%02d.%03d",
|
||||||
int($msec/86400000), int($sec/3600),
|
int($msec/86400000), int($sec/3600),
|
||||||
int(($sec%3600)/60), $sec%60, $msec % 1000);
|
int(($sec%3600)/60), $sec%60, $msec % 1000);
|
||||||
@ -301,7 +331,7 @@ sub HMLAN_Parse($$) {##########################################################
|
|||||||
|
|
||||||
# HMLAN sends ACK for flag 'A0' but not for 'A4'(config mode)-
|
# HMLAN sends ACK for flag 'A0' but not for 'A4'(config mode)-
|
||||||
# we ack ourself an long as logic is uncertain - also possible is 'A6' for RHS
|
# we ack ourself an long as logic is uncertain - also possible is 'A6' for RHS
|
||||||
if (hex($flg)&0x4){#General 4 oder 2 ?
|
if (hex($flg)&0x4){#not sure: 4 oder 2 ?
|
||||||
$hash->{helper}{nextSend}{$src} = gettimeofday() + 0.100;
|
$hash->{helper}{nextSend}{$src} = gettimeofday() + 0.100;
|
||||||
}
|
}
|
||||||
if (hex($flg)&0xA4 == 0xA4 && $hash->{owner} eq $dst){
|
if (hex($flg)&0xA4 == 0xA4 && $hash->{owner} eq $dst){
|
||||||
@ -309,11 +339,11 @@ sub HMLAN_Parse($$) {##########################################################
|
|||||||
HMLAN_Write($hash,undef, "As15".$mNo."8002".$dst.$src."00");
|
HMLAN_Write($hash,undef, "As15".$mNo."8002".$dst.$src."00");
|
||||||
}
|
}
|
||||||
#update some User information ------
|
#update some User information ------
|
||||||
$hash->{uptime} = HMLAN_uptime($mFld[2]);
|
$hash->{uptime} = HMLAN_uptime($hash,$mFld[2]);
|
||||||
$hash->{RSSI} = $rssi;
|
$hash->{RSSI} = $rssi;
|
||||||
$hash->{RAWMSG} = $rmsg;
|
$hash->{RAWMSG} = $rmsg;
|
||||||
$hash->{"${name}_MSGCNT"}++;
|
$hash->{"${name}_MSGCNT"}++;
|
||||||
$hash->{"${name}_TIME"} = TimeNow();
|
$hash->{"${name}_TIME"} = TimeNow();
|
||||||
|
|
||||||
if (($hash->{helper}{$src}{flg}) && ($letter eq 'R')){ #HMLAN is done?
|
if (($hash->{helper}{$src}{flg}) && ($letter eq 'R')){ #HMLAN is done?
|
||||||
$hash->{helper}{$src}{flg} = 0; #release send-holdoff
|
$hash->{helper}{$src}{flg} = 0; #release send-holdoff
|
||||||
@ -333,13 +363,13 @@ sub HMLAN_Parse($$) {##########################################################
|
|||||||
$hash->{serialNr} = $mFld[2];
|
$hash->{serialNr} = $mFld[2];
|
||||||
$hash->{firmware} = sprintf("%d.%d", (hex($mFld[1])>>12)&0xf, hex($mFld[1]) & 0xffff);
|
$hash->{firmware} = sprintf("%d.%d", (hex($mFld[1])>>12)&0xf, hex($mFld[1]) & 0xffff);
|
||||||
$hash->{owner} = $mFld[4];
|
$hash->{owner} = $mFld[4];
|
||||||
$hash->{uptime} = HMLAN_uptime($mFld[5]);
|
$hash->{uptime} = HMLAN_uptime($hash,$mFld[5]);
|
||||||
$hash->{assignIDsReport}=$mFld[6];
|
$hash->{assignIDsReport}=$mFld[6];
|
||||||
$hash->{helper}{keepAliveRec} = 1;
|
$hash->{helper}{keepAliveRec} = 1;
|
||||||
$hash->{helper}{keepAliveRpt} = 0;
|
$hash->{helper}{keepAliveRpt} = 0;
|
||||||
Log $ll5, 'HMLAN_Parse: '.$name. ' V:'.$mFld[1]
|
Log $ll5, 'HMLAN_Parse: '.$name. ' V:'.$mFld[1]
|
||||||
.' sNo:'.$mFld[2].' d:'.$mFld[3]
|
.' sNo:'.$mFld[2].' d:'.$mFld[3]
|
||||||
.' O:' .$mFld[4].' m:'.$mFld[5].' IDcnt:'.$mFld[6];
|
.' O:' .$mFld[4].' t:'.$mFld[5].' IDcnt:'.$mFld[6];
|
||||||
my $myId = AttrVal($name, "hmId", $mFld[4]);
|
my $myId = AttrVal($name, "hmId", $mFld[4]);
|
||||||
if(lc($mFld[4]) ne lc($myId) && !AttrVal($name, "dummy", 0)) {
|
if(lc($mFld[4]) ne lc($myId) && !AttrVal($name, "dummy", 0)) {
|
||||||
Log 1, 'HMLAN setting owner to '.$myId.' from '.$mFld[4];
|
Log 1, 'HMLAN setting owner to '.$myId.' from '.$mFld[4];
|
||||||
@ -429,6 +459,8 @@ sub HMLAN_DoInit($) {##########################################################
|
|||||||
HMLAN_SimpleWrite($hash, "Y03,00,");
|
HMLAN_SimpleWrite($hash, "Y03,00,");
|
||||||
HMLAN_SimpleWrite($hash, "Y03,00,");
|
HMLAN_SimpleWrite($hash, "Y03,00,");
|
||||||
HMLAN_SimpleWrite($hash, "T$s2000,04,00,00000000");
|
HMLAN_SimpleWrite($hash, "T$s2000,04,00,00000000");
|
||||||
|
|
||||||
|
$hash->{helper}{refTime}=0;
|
||||||
|
|
||||||
foreach (keys %lhash){delete ($lhash{$_})};# clear IDs - HMLAN might have a reset
|
foreach (keys %lhash){delete ($lhash{$_})};# clear IDs - HMLAN might have a reset
|
||||||
$hash->{helper}{keepAliveRec} = 1; # ok for first time
|
$hash->{helper}{keepAliveRec} = 1; # ok for first time
|
||||||
@ -449,7 +481,7 @@ sub HMLAN_KeepAlive($) {#######################################################
|
|||||||
RemoveInternalTimer( "keepAlive:".$name);# avoid duplicate timer
|
RemoveInternalTimer( "keepAlive:".$name);# avoid duplicate timer
|
||||||
my $rt = AttrVal($name,"respTime",1);
|
my $rt = AttrVal($name,"respTime",1);
|
||||||
InternalTimer(gettimeofday()+$rt,"HMLAN_KeepAliveCheck","keepAliveCk:".$name,1);
|
InternalTimer(gettimeofday()+$rt,"HMLAN_KeepAliveCheck","keepAliveCk:".$name,1);
|
||||||
InternalTimer(gettimeofday()+25, "HMLAN_KeepAlive", "keepAlive:".$name, 1);
|
InternalTimer(gettimeofday()+25 ,"HMLAN_KeepAlive", "keepAlive:".$name, 1);
|
||||||
}
|
}
|
||||||
sub HMLAN_KeepAliveCheck($) {##################################################
|
sub HMLAN_KeepAliveCheck($) {##################################################
|
||||||
my($in ) = shift;
|
my($in ) = shift;
|
||||||
|
@ -124,7 +124,7 @@ sub CUL_HM_autoReadConfig($){
|
|||||||
while(@{$modules{CUL_HM}{helper}{updtCfgLst}}){
|
while(@{$modules{CUL_HM}{helper}{updtCfgLst}}){
|
||||||
my $name = shift(@{$modules{CUL_HM}{helper}{updtCfgLst}});
|
my $name = shift(@{$modules{CUL_HM}{helper}{updtCfgLst}});
|
||||||
my $hash = CUL_HM_name2Hash($name);
|
my $hash = CUL_HM_name2Hash($name);
|
||||||
if (0 != CUL_HM_getARead($name)){
|
if (0 != CUL_HM_getAttrInt($name,"autoReadReg")){
|
||||||
CUL_HM_Set($hash,$name,"getSerial");
|
CUL_HM_Set($hash,$name,"getSerial");
|
||||||
CUL_HM_Set($hash,$name,"getConfig");
|
CUL_HM_Set($hash,$name,"getConfig");
|
||||||
CUL_HM_Set($hash,$name,"statusRequest");
|
CUL_HM_Set($hash,$name,"statusRequest");
|
||||||
@ -144,7 +144,8 @@ sub CUL_HM_updateConfig($){
|
|||||||
my $name = shift(@nameList);
|
my $name = shift(@nameList);
|
||||||
my $hash = CUL_HM_name2Hash($name);
|
my $hash = CUL_HM_name2Hash($name);
|
||||||
my $id = CUL_HM_hash2Id($hash);
|
my $id = CUL_HM_hash2Id($hash);
|
||||||
|
my $chn = substr($id."00",6,2);
|
||||||
|
|
||||||
if ($id ne $K_actDetID){# if not action detector
|
if ($id ne $K_actDetID){# if not action detector
|
||||||
CUL_HM_ID2PeerList($name,"",1); # update peerList out of peerIDs
|
CUL_HM_ID2PeerList($name,"",1); # update peerList out of peerIDs
|
||||||
my $actCycle = AttrVal($name,"actCycle",undef);
|
my $actCycle = AttrVal($name,"actCycle",undef);
|
||||||
@ -211,7 +212,7 @@ sub CUL_HM_updateConfig($){
|
|||||||
$hash->{helper}{role}{vrt} = 1;
|
$hash->{helper}{role}{vrt} = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
# add default web-commands
|
# -+-+-+-+-+ add default web-commands
|
||||||
my $webCmd;
|
my $webCmd;
|
||||||
$webCmd = AttrVal($name,"webCmd",undef);
|
$webCmd = AttrVal($name,"webCmd",undef);
|
||||||
if(!defined $webCmd){
|
if(!defined $webCmd){
|
||||||
@ -224,6 +225,8 @@ sub CUL_HM_updateConfig($){
|
|||||||
}elsif($st eq "switch" ){$webCmd="toggle:on:off:statusRequest";
|
}elsif($st eq "switch" ){$webCmd="toggle:on:off:statusRequest";
|
||||||
}elsif($st eq "smokeDetector"){$webCmd="test:alarmOn:alarmOff";
|
}elsif($st eq "smokeDetector"){$webCmd="test:alarmOn:alarmOff";
|
||||||
}elsif($st eq "keyMatic" ){$webCmd="lock:inhibit on:inhibit off";
|
}elsif($st eq "keyMatic" ){$webCmd="lock:inhibit on:inhibit off";
|
||||||
|
}elsif($md eq "HM-OU-CFM-PL" ){$webCmd="press short:press long"
|
||||||
|
.($chn eq "02"?":playTone replay":"");
|
||||||
}
|
}
|
||||||
if ($webCmd){
|
if ($webCmd){
|
||||||
my $eventMap = AttrVal($name,"eventMap",undef);
|
my $eventMap = AttrVal($name,"eventMap",undef);
|
||||||
@ -234,7 +237,7 @@ sub CUL_HM_updateConfig($){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$attr{$name}{webCmd} = $webCmd if ($webCmd);
|
$attr{$name}{webCmd} = $webCmd if ($webCmd);
|
||||||
push @getConfList,$name if (0 != CUL_HM_getARead($name));
|
push @getConfList,$name if (0 != CUL_HM_getAttrInt($name,"autoReadReg"));
|
||||||
}
|
}
|
||||||
$modules{CUL_HM}{helper}{updtCfgLst} = \@getConfList;
|
$modules{CUL_HM}{helper}{updtCfgLst} = \@getConfList;
|
||||||
CUL_HM_autoReadConfig("updateConfig");
|
CUL_HM_autoReadConfig("updateConfig");
|
||||||
@ -333,7 +336,7 @@ sub CUL_HM_Attr(@) {#################################
|
|||||||
}
|
}
|
||||||
push(@hashL,$eHash);
|
push(@hashL,$eHash);
|
||||||
foreach my $hash (@hashL){
|
foreach my $hash (@hashL){
|
||||||
my $exLvl = CUL_HM_getExpertMode($hash);
|
my $exLvl = CUL_HM_getAttrInt($hash->{NAME},"expert");
|
||||||
if ($exLvl eq "0"){# off
|
if ($exLvl eq "0"){# off
|
||||||
foreach my $rdEntry (keys %{$hash->{READINGS}}){
|
foreach my $rdEntry (keys %{$hash->{READINGS}}){
|
||||||
my $rdEntryNew;
|
my $rdEntryNew;
|
||||||
@ -1430,7 +1433,7 @@ sub CUL_HM_parseCommon(@){#####################################################
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
my $peer = $shash->{helper}{respWait}{forPeer};
|
my $peer = $shash->{helper}{respWait}{forPeer};
|
||||||
my $regLN = ((CUL_HM_getExpertMode($chnHash) eq "2")?"":".")."RegL_".$list.":".$peer;
|
my $regLN = ((CUL_HM_getAttrInt($chnName,"expert") == 2)?"":".")."RegL_".$list.":".$peer;
|
||||||
readingsSingleUpdate($chnHash,$regLN,
|
readingsSingleUpdate($chnHash,$regLN,
|
||||||
ReadingsVal($chnName,$regLN,"")." ".$data,0);
|
ReadingsVal($chnName,$regLN,"")." ".$data,0);
|
||||||
if ($data =~m/00:00$/){ # this was the last message in the block
|
if ($data =~m/00:00$/){ # this was the last message in the block
|
||||||
@ -1456,7 +1459,7 @@ sub CUL_HM_parseCommon(@){#####################################################
|
|||||||
my($chn,$peerID,$list,$data) = ($1,$2,$3,$4) if($p =~ m/^04(..)(........)(..)(.*)/);
|
my($chn,$peerID,$list,$data) = ($1,$2,$3,$4) if($p =~ m/^04(..)(........)(..)(.*)/);
|
||||||
my $chnHash = $modules{CUL_HM}{defptr}{$src.$chn};
|
my $chnHash = $modules{CUL_HM}{defptr}{$src.$chn};
|
||||||
$chnHash = $shash if(!$chnHash); # will add param to dev if no chan
|
$chnHash = $shash if(!$chnHash); # will add param to dev if no chan
|
||||||
my $regLN = ((CUL_HM_getExpertMode($chnHash) eq "2")?"":".")."RegL_".$list.":".CUL_HM_id2Name($peerID);
|
my $regLN = ((CUL_HM_getAttrInt($chnHash->{NAME},"expert") == 2)?"":".")."RegL_".$list.":".CUL_HM_id2Name($peerID);
|
||||||
$regLN =~ s/broadcast//;
|
$regLN =~ s/broadcast//;
|
||||||
$regLN =~ s/ /_/g; #remove blanks
|
$regLN =~ s/ /_/g; #remove blanks
|
||||||
|
|
||||||
@ -1496,7 +1499,7 @@ sub CUL_HM_parseCommon(@){#####################################################
|
|||||||
my ($chn) = ($1) if($p =~ m/^..(..)/);
|
my ($chn) = ($1) if($p =~ m/^..(..)/);
|
||||||
if ($chn eq "00"){
|
if ($chn eq "00"){
|
||||||
CUL_HM_queueAutoRead(CUL_HM_hash2Name($shash))
|
CUL_HM_queueAutoRead(CUL_HM_hash2Name($shash))
|
||||||
if (1 < CUL_HM_getARead($shash->{NAME}));
|
if (1 < CUL_HM_getAttrInt($shash->{NAME},"autoReadReg"));
|
||||||
return "powerOn" ;# check dst eq "000000" as well?
|
return "powerOn" ;# check dst eq "000000" as well?
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2070,7 +2073,7 @@ sub CUL_HM_Set($@) {
|
|||||||
elsif($cmd eq "inhibit") { ##################################################
|
elsif($cmd eq "inhibit") { ##################################################
|
||||||
return "$a[2] is not on or off" if($a[2] !~ m/^(on|off)$/);
|
return "$a[2] is not on or off" if($a[2] !~ m/^(on|off)$/);
|
||||||
my $val = ($a[2] eq "on") ? "01" : "00";
|
my $val = ($a[2] eq "on") ? "01" : "00";
|
||||||
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.$val.'01'); # SET_LOCK
|
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.$val.$chn); # SET_LOCK
|
||||||
}
|
}
|
||||||
elsif($cmd =~ m/^(up|down|pct)$/) { #########################################
|
elsif($cmd =~ m/^(up|down|pct)$/) { #########################################
|
||||||
my ($lvl,$tval,$rval) = ($a[2],"","");
|
my ($lvl,$tval,$rval) = ($a[2],"","");
|
||||||
@ -2095,12 +2098,15 @@ sub CUL_HM_Set($@) {
|
|||||||
elsif($cmd eq "text") { ################################################# reg
|
elsif($cmd eq "text") { ################################################# reg
|
||||||
$state = "";
|
$state = "";
|
||||||
my ($bn,$l1, $l2, $s) = ($chn,$a[2],$a[3],54); # Create CONFIG_WRITE_INDEX string
|
my ($bn,$l1, $l2, $s) = ($chn,$a[2],$a[3],54); # Create CONFIG_WRITE_INDEX string
|
||||||
if (!$roleC){# if used on device. Should be removed :todo
|
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]);
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
return "to many parameter. Try set $a[0] text $a[2] $a[3]" if($a[4]);
|
||||||
|
}
|
||||||
|
|
||||||
$l1 = substr($l1."\x00", 0, 13);
|
$l1 = substr($l1."\x00", 0, 13);
|
||||||
$s = 54;
|
$s = 54;
|
||||||
@ -2259,18 +2265,26 @@ sub CUL_HM_Set($@) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif($cmd eq "playTone") { #################################################
|
elsif($cmd eq "playTone") { #################################################
|
||||||
my @itemList = split(',',$a[2]);
|
my $msg;
|
||||||
my $repeat = (defined $a[3] && $a[3] =~ m/^(\d+)$/)?$a[3]:1;
|
if ($a[2] eq 'replay'){
|
||||||
my $itemCnt = int(@itemList);
|
$msg = ReadingsVal($chnHash->{NAME},".lastTone","");
|
||||||
return "no more then 12 entries please" if ($itemCnt>12);
|
|
||||||
return "repetition $repeat out of range [1..255]"
|
|
||||||
if($repeat < 1 || $repeat > 255);
|
|
||||||
#<entries><multiply><MP3><MP3>
|
|
||||||
my $msgBytes = sprintf("%02X%02X",$itemCnt,$repeat);
|
|
||||||
foreach my $mp3 (@itemList){
|
|
||||||
$msgBytes .= sprintf("%02X",$mp3);
|
|
||||||
}
|
}
|
||||||
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.'80'.$chn.$msgBytes);
|
else{
|
||||||
|
my @itemList = split(',',$a[2]);
|
||||||
|
my $repeat = (defined $a[3] && $a[3] =~ m/^(\d+)$/)?$a[3]:1;
|
||||||
|
my $itemCnt = int(@itemList);
|
||||||
|
return "no more then 12 entries please" if ($itemCnt>12);
|
||||||
|
return "repetition $repeat out of range [1..255]"
|
||||||
|
if($repeat < 1 || $repeat > 255);
|
||||||
|
#<entries><multiply><MP3><MP3>
|
||||||
|
my $msgBytes = sprintf("%02X%02X",$itemCnt,$repeat);
|
||||||
|
foreach my $mp3 (@itemList){
|
||||||
|
$msgBytes .= sprintf("%02X",$mp3);
|
||||||
|
}
|
||||||
|
$msg = '++'.$flag.'11'.$id.$dst.'80'.$chn.$msgBytes;
|
||||||
|
CUL_HM_UpdtReadSingle($chnHash,".lastTone",$msg,0);
|
||||||
|
}
|
||||||
|
CUL_HM_PushCmdStack($hash,$msg) if ($msg);
|
||||||
}
|
}
|
||||||
elsif($cmd eq "ilum") { ################################################# reg
|
elsif($cmd eq "ilum") { ################################################# reg
|
||||||
return "$a[2] not specified. choose 0-15 for brightness" if ($a[2]>15);
|
return "$a[2] not specified. choose 0-15 for brightness" if ($a[2]>15);
|
||||||
@ -2630,34 +2644,39 @@ sub CUL_HM_getConfig($$$$$){
|
|||||||
my ($hash,$chnhash,$id,$dst,$chn) = @_;
|
my ($hash,$chnhash,$id,$dst,$chn) = @_;
|
||||||
my $flag = CUL_HM_getFlag($hash);
|
my $flag = CUL_HM_getFlag($hash);
|
||||||
foreach my $readEntry (keys %{$chnhash->{READINGS}}){
|
foreach my $readEntry (keys %{$chnhash->{READINGS}}){
|
||||||
delete $chnhash->{READINGS}{$readEntry} if ($readEntry =~ m/^[\.]?RegL_/);
|
delete $chnhash->{READINGS}{$readEntry} if ($readEntry =~ m/^[\.]?(RegL_|R-)/);
|
||||||
}
|
}
|
||||||
#get Peer-list in any case - it is part of config
|
|
||||||
CUL_HM_PushCmdStack($hash,sprintf("++%s01%s%s%s03",$flag,$id,$dst,$chn));
|
|
||||||
my $lstAr = $culHmModel{CUL_HM_getMId($hash)}{lst};
|
my $lstAr = $culHmModel{CUL_HM_getMId($hash)}{lst};
|
||||||
if($lstAr){
|
if($lstAr){
|
||||||
my @list = split(",",$lstAr); #get valid lists e.g."1, 5:2:3.p ,6:2"
|
my @list = split(",",$lstAr); #get valid lists e.g."1, 5:2.3p ,6:2"
|
||||||
|
my $pReq = 0; # Peer request not issued, do only once for channel
|
||||||
foreach my$listEntry (@list){# each list that is define for this channel
|
foreach my$listEntry (@list){# each list that is define for this channel
|
||||||
my ($peerReq,$chnValid)= (0,0);
|
my ($peerReq,$chnValid)= (0,0);
|
||||||
my ($listNo,$chnLst1) = split(":",$listEntry);
|
my ($listNo,$chnLst1) = split(":",$listEntry);
|
||||||
if (!$chnLst1){
|
if (!$chnLst1){
|
||||||
$chnValid = 1; #if no entry channel is valid
|
$chnValid = 1; #if no entry go for all channels
|
||||||
$peerReq = 1 if($listNo==3 ||$listNo==4); #default
|
$peerReq = 1 if($listNo eq 'p' || $listNo==3 ||$listNo==4); #default
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
my @chnLst = split('\.',$chnLst1);
|
my @chnLst = split('\.',$chnLst1);
|
||||||
foreach my $lchn (@chnLst){
|
foreach my $lchn (@chnLst){
|
||||||
$peerReq = 1 if ($lchn =~ m/p/);
|
$peerReq = 1 if ($lchn =~ m/p/);
|
||||||
no warnings;#know that lchan may be followed by a 'p' causing a warning
|
no warnings;#know that lchan may be followed by a 'p' causing a warning
|
||||||
$chnValid = 1 if (int($lchn) == hex($chn));
|
$chnValid = 1 if (int($lchn) == hex($chn));
|
||||||
use warnings;
|
use warnings;
|
||||||
last if ($chnValid);
|
last if ($chnValid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($chnValid){# yes, we will go for a list
|
if ($chnValid){# yes, we will go for a list
|
||||||
if ($peerReq){# need to get the peers first
|
if ($peerReq){# need to get the peers first
|
||||||
$chnhash->{helper}{getCfgList} = "all"; # peers first
|
if($listNo ne 'p'){# not if 'only peers'!
|
||||||
$chnhash->{helper}{getCfgListNo} = $listNo;
|
$chnhash->{helper}{getCfgList} = "all";
|
||||||
|
$chnhash->{helper}{getCfgListNo} = $listNo;
|
||||||
|
}
|
||||||
|
if (!$pReq){#get peers first, but only once per channel
|
||||||
|
CUL_HM_PushCmdStack($hash,sprintf("++%s01%s%s%s03",$flag,$id,$dst,$chn));
|
||||||
|
$pReq = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
CUL_HM_PushCmdStack($hash,sprintf("++%s01%s%s%s0400000000%02X",$flag,$id,$dst,$chn,$listNo));
|
CUL_HM_PushCmdStack($hash,sprintf("++%s01%s%s%s0400000000%02X",$flag,$id,$dst,$chn,$listNo));
|
||||||
@ -2665,7 +2684,7 @@ sub CUL_HM_getConfig($$$$$){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#+++++++++++++++++ Protocol stack, sending, repeat+++++++++++++++++++++++++++++
|
#+++++++++++++++++ Protocol stack, sending, repeat+++++++++++++++++++++++++++++
|
||||||
sub CUL_HM_SndCmd($$) {
|
sub CUL_HM_SndCmd($$) {
|
||||||
@ -2737,7 +2756,7 @@ sub CUL_HM_responseSetup($$) {#store all we need to handle the response
|
|||||||
|
|
||||||
$peer ="" if($list !~ m/^0[34]$/);
|
$peer ="" if($list !~ m/^0[34]$/);
|
||||||
#empty val since reading will be cumulative
|
#empty val since reading will be cumulative
|
||||||
my $rlName = ((CUL_HM_getExpertMode($hash) eq "2")?"":".")."RegL_".$list.":".$peer;
|
my $rlName = ((CUL_HM_getAttrInt($hash->{NAME},"expert") == 2)?"":".")."RegL_".$list.":".$peer;
|
||||||
$chnhash->{READINGS}{$rlName}{VAL}="";
|
$chnhash->{READINGS}{$rlName}{VAL}="";
|
||||||
delete ($chnhash->{READINGS}{$rlName}{TIME});
|
delete ($chnhash->{READINGS}{$rlName}{TIME});
|
||||||
return;
|
return;
|
||||||
@ -2898,7 +2917,7 @@ sub CUL_HM_pushConfig($$$$$$$$) {#generate messages to cnfig data to register
|
|||||||
my $peerN = ($peerAddr ne "000000")?CUL_HM_id2Name($peerAddr.$peerChn):"";
|
my $peerN = ($peerAddr ne "000000")?CUL_HM_id2Name($peerAddr.$peerChn):"";
|
||||||
$peerN =~ s/broadcast//;
|
$peerN =~ s/broadcast//;
|
||||||
$peerN =~ s/ /_/g;#remote blanks
|
$peerN =~ s/ /_/g;#remote blanks
|
||||||
my $regLN = ((CUL_HM_getExpertMode($hash) eq "2")?"":".").
|
my $regLN = ((CUL_HM_getAttrInt($hash->{NAME},"expert") == 2)?"":".").
|
||||||
"RegL_".$list.":".$peerN;
|
"RegL_".$list.":".$peerN;
|
||||||
#--- copy data from readings to shadow
|
#--- copy data from readings to shadow
|
||||||
my $chnhash = $modules{CUL_HM}{defptr}{$dst.$chn};
|
my $chnhash = $modules{CUL_HM}{defptr}{$dst.$chn};
|
||||||
@ -2928,7 +2947,7 @@ sub CUL_HM_pushConfig($$$$$$$$) {#generate messages to cnfig data to register
|
|||||||
}
|
}
|
||||||
CUL_HM_PushCmdStack($hash,"++A001".$src.$dst.$chn."06");
|
CUL_HM_PushCmdStack($hash,"++A001".$src.$dst.$chn."06");
|
||||||
CUL_HM_queueAutoRead(CUL_HM_hash2Name($hash))
|
CUL_HM_queueAutoRead(CUL_HM_hash2Name($hash))
|
||||||
if (2 < CUL_HM_getARead($hash->{NAME}));
|
if (2 < CUL_HM_getAttrInt($hash->{NAME},"autoReadReg"));
|
||||||
}
|
}
|
||||||
sub CUL_HM_Resend($) {#resend a message if there is no answer
|
sub CUL_HM_Resend($) {#resend a message if there is no answer
|
||||||
my $hash = shift;
|
my $hash = shift;
|
||||||
@ -3058,15 +3077,6 @@ sub CUL_HM_getAssChnIds($) { #in: name out:ID list of assotiated channels
|
|||||||
push @chnIdList,$dId if (length($dId) == 8);
|
push @chnIdList,$dId if (length($dId) == 8);
|
||||||
return sort(@chnIdList);
|
return sort(@chnIdList);
|
||||||
}
|
}
|
||||||
sub CUL_HM_getExpertMode($) { # get expert level for the entity.
|
|
||||||
# if expert level is not set try to get it for device
|
|
||||||
my ($hash) = @_;
|
|
||||||
my $expLvl = AttrVal($hash->{NAME},"expert","");
|
|
||||||
my $dHash = CUL_HM_getDeviceHash($hash);
|
|
||||||
$expLvl = AttrVal($dHash->{NAME},"expert","0")
|
|
||||||
if ($expLvl eq "");
|
|
||||||
return substr($expLvl,0,1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#+++++++++++++++++ Conversions names, hashes, ids++++++++++++++++++++++++++++++
|
#+++++++++++++++++ Conversions names, hashes, ids++++++++++++++++++++++++++++++
|
||||||
sub CUL_HM_Id($) {#in: ioHash out: ioHMid
|
sub CUL_HM_Id($) {#in: ioHash out: ioHMid
|
||||||
@ -3134,6 +3144,12 @@ sub CUL_HM_getDeviceHash($) {#in: hash out: devicehash
|
|||||||
my $devHash = $modules{CUL_HM}{defptr}{substr($hash->{DEF},0,6)};
|
my $devHash = $modules{CUL_HM}{defptr}{substr($hash->{DEF},0,6)};
|
||||||
return ($devHash)?$devHash:$hash;
|
return ($devHash)?$devHash:$hash;
|
||||||
}
|
}
|
||||||
|
sub CUL_HM_getDeviceName($) {#in: name out: name of device
|
||||||
|
my $name = shift;
|
||||||
|
return $name if(!$defs{$name});#unknown, return input
|
||||||
|
my $devHash = $modules{CUL_HM}{defptr}{substr($defs{$name}{DEF},0,6)};
|
||||||
|
return ($devHash)?$devHash->{NAME}:$name;
|
||||||
|
}
|
||||||
|
|
||||||
#+++++++++++++++++ debug ++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
#+++++++++++++++++ debug ++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
sub CUL_HM_DumpProtocol($$@) {
|
sub CUL_HM_DumpProtocol($$@) {
|
||||||
@ -3207,7 +3223,7 @@ sub CUL_HM_getRegFromStore($$$$) {#read a register from backup data
|
|||||||
}
|
}
|
||||||
$peerId = CUL_HM_peerChId(($peerId?$peerId:"00000000"),$dId,$iId);
|
$peerId = CUL_HM_peerChId(($peerId?$peerId:"00000000"),$dId,$iId);
|
||||||
|
|
||||||
my $regLN = ((CUL_HM_getExpertMode($hash) eq "2")?"":".").
|
my $regLN = ((CUL_HM_getAttrInt($name,"expert") == 2)?"":".").
|
||||||
"RegL_".sprintf("%02X",$list).":".CUL_HM_peerChName($peerId,$dId,$iId);
|
"RegL_".sprintf("%02X",$list).":".CUL_HM_peerChName($peerId,$dId,$iId);
|
||||||
$regLN =~ s/broadcast//;
|
$regLN =~ s/broadcast//;
|
||||||
|
|
||||||
@ -3265,7 +3281,7 @@ sub CUL_HM_updtRegDisp($$$) {
|
|||||||
push @regArr, keys %{$culHmRegModel{$md}} if($culHmRegModel{$md});
|
push @regArr, keys %{$culHmRegModel{$md}} if($culHmRegModel{$md});
|
||||||
push @regArr, keys %{$culHmRegChan{$md.$chn}} if($culHmRegChan{$md.$chn});
|
push @regArr, keys %{$culHmRegChan{$md.$chn}} if($culHmRegChan{$md.$chn});
|
||||||
my @changedRead;
|
my @changedRead;
|
||||||
my $expLvl = (CUL_HM_getExpertMode($hash) ne "0")?1:0;
|
my $expLvl = (CUL_HM_getAttrInt($name,"expert") == 0)?1:0;
|
||||||
foreach my $regName (@regArr){
|
foreach my $regName (@regArr){
|
||||||
next if ($culHmRegDefine{$regName}->{l} ne $listNo);
|
next if ($culHmRegDefine{$regName}->{l} ne $listNo);
|
||||||
my $rgVal = CUL_HM_getRegFromStore($name,$regName,$list,$peerId);
|
my $rgVal = CUL_HM_getRegFromStore($name,$regName,$list,$peerId);
|
||||||
@ -3278,11 +3294,18 @@ sub CUL_HM_updtRegDisp($$$) {
|
|||||||
CUL_HM_UpdtReadBulk($hash,1,@changedRead) if (@changedRead);
|
CUL_HM_UpdtReadBulk($hash,1,@changedRead) if (@changedRead);
|
||||||
|
|
||||||
# --- handle specifics - Devices with abnormal or long register
|
# --- handle specifics - Devices with abnormal or long register
|
||||||
CUL_HM_TCtempReadings($hash) if (($list == 5 ||$list == 6) &&
|
my $md = CUL_HM_Get($hash,$name,"param","model");
|
||||||
substr($hash->{DEF},6,2) eq "02" &&
|
my $st = CUL_HM_Get($hash,$name,"param","subType");
|
||||||
CUL_HM_Get($hash,$name,"param","model") eq "HM-CC-TC");
|
if ($md eq "HM-CC-TC"){#handle temperature readings
|
||||||
CUL_HM_repReadings($hash) if (($list == 2) &&
|
CUL_HM_TCtempReadings($hash) if (($list == 5 ||$list == 6) &&
|
||||||
CUL_HM_Get($hash,$name,"param","subType") eq "repeater");
|
substr($hash->{DEF},6,2) eq "02");
|
||||||
|
}
|
||||||
|
if ($md eq "HM-PB-4DIS-WM"){#add text
|
||||||
|
CUL_HM_4DisText($hash) if ($list == 1) ;
|
||||||
|
}
|
||||||
|
elsif ($st eq "repeater"){
|
||||||
|
CUL_HM_repReadings($hash) if ($list == 2);
|
||||||
|
}
|
||||||
# CUL_HM_dimLog($hash) if(CUL_HM_Get($hash,$name,"param","subType") eq "dimmer");
|
# CUL_HM_dimLog($hash) if(CUL_HM_Get($hash,$name,"param","subType") eq "dimmer");
|
||||||
}
|
}
|
||||||
#############################
|
#############################
|
||||||
@ -3417,10 +3440,34 @@ sub CUL_HM_CvTflt($) { # config time -> float
|
|||||||
return ($inValue & 0x1f)*((sort {$a <=> $b} keys(%fltCvT))[$inValue >> 5]);
|
return ($inValue & 0x1f)*((sort {$a <=> $b} keys(%fltCvT))[$inValue >> 5]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub CUL_HM_4DisText($) {# convert text for 4dis
|
||||||
|
#text1: start at 54 (0x36) length 12 (0x0c)
|
||||||
|
#text2: start at 70 (0x46) length 12 (0x0c)
|
||||||
|
my ($hash)=@_;
|
||||||
|
my $name = $hash->{NAME};
|
||||||
|
my $regLN = ((CUL_HM_getAttrInt($name,"expert") == 2)?"":".")."RegL_";
|
||||||
|
my $reg1 = ReadingsVal($name,$regLN."05:" ,"");
|
||||||
|
my %txt;
|
||||||
|
foreach my $sAddr (54,70){
|
||||||
|
my $txtHex = $reg1; #one row
|
||||||
|
my $sStr = sprintf("%02X:",$sAddr);
|
||||||
|
$txtHex =~ s/.* $sStr//; #remove reg prior to string
|
||||||
|
$sStr = sprintf("%02X:",$sAddr+11);
|
||||||
|
$txtHex =~ s/$sStr(..).*/,$1/; #remove reg after string
|
||||||
|
$txtHex =~ s/ ..:/,/g; #remove addr
|
||||||
|
$txtHex =~ s/,00.*//; #remove trailing string
|
||||||
|
my @ch = split(",",$txtHex,12);
|
||||||
|
foreach (@ch){$txt{$sAddr}.=chr(hex($_))};
|
||||||
|
}
|
||||||
|
CUL_HM_UpdtReadBulk($hash,1,"text1:".$txt{54},
|
||||||
|
"text2:".$txt{70});
|
||||||
|
return "text1:".$txt{54}."\n".
|
||||||
|
"text2:".$txt{70}."\n";
|
||||||
|
}
|
||||||
sub CUL_HM_TCtempReadings($) {# parse TC readings
|
sub CUL_HM_TCtempReadings($) {# parse TC readings
|
||||||
my ($hash)=@_;
|
my ($hash)=@_;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
my $regLN = ((CUL_HM_getExpertMode($hash) eq "2")?"":".")."RegL_";
|
my $regLN = ((CUL_HM_getAttrInt($name,"expert") == 2)?"":".")."RegL_";
|
||||||
my $reg5 = ReadingsVal($name,$regLN."05:" ,"");
|
my $reg5 = ReadingsVal($name,$regLN."05:" ,"");
|
||||||
my $reg6 = ReadingsVal($name,$regLN."06:" ,"");
|
my $reg6 = ReadingsVal($name,$regLN."06:" ,"");
|
||||||
my @days = ("Sat", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri");
|
my @days = ("Sat", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri");
|
||||||
@ -3562,10 +3609,10 @@ sub CUL_HM_ActGetCreateHash() {# get ActionDetector - create if necessary
|
|||||||
sub CUL_HM_time2sec($) {
|
sub CUL_HM_time2sec($) {
|
||||||
my ($timeout) = @_;
|
my ($timeout) = @_;
|
||||||
my ($h,$m) = split(":",$timeout);
|
my ($h,$m) = split(":",$timeout);
|
||||||
no warnings;
|
no warnings 'numeric';
|
||||||
$h = int($h);
|
$h = int($h);
|
||||||
$m = int($m);
|
$m = int($m);
|
||||||
use warnings;
|
use warnings 'numeric';
|
||||||
return ((sprintf("%03s:%02d",$h,$m)),((int($h)*60+int($m))*60));
|
return ((sprintf("%03s:%02d",$h,$m)),((int($h)*60+int($m))*60));
|
||||||
}
|
}
|
||||||
sub CUL_HM_ActAdd($$) {# add an HMid to list for activity supervision
|
sub CUL_HM_ActAdd($$) {# add an HMid to list for activity supervision
|
||||||
@ -3775,7 +3822,7 @@ sub CUL_HM_qStateUpdatIfEnab($){#in:name or id, queue stat-request after 12 sec
|
|||||||
$name = CUL_HM_id2Name($name) if ($name =~ m/^[A-F0-9]{6,8}$/i);
|
$name = CUL_HM_id2Name($name) if ($name =~ m/^[A-F0-9]{6,8}$/i);
|
||||||
$name =~ s /_chn:..$//;
|
$name =~ s /_chn:..$//;
|
||||||
return if (!$defs{$name}); #device unknown, ignore
|
return if (!$defs{$name}); #device unknown, ignore
|
||||||
if (CUL_HM_getARead($name) > 3){
|
if (CUL_HM_getAttrInt($name,"autoReadReg") > 3){
|
||||||
@{$modules{CUL_HM}{helper}{reqStatus}}=
|
@{$modules{CUL_HM}{helper}{reqStatus}}=
|
||||||
CUL_HM_noDup(@{$modules{CUL_HM}{helper}{reqStatus}},$name);
|
CUL_HM_noDup(@{$modules{CUL_HM}{helper}{reqStatus}},$name);
|
||||||
RemoveInternalTimer("CUL_HM_reqStatus");
|
RemoveInternalTimer("CUL_HM_reqStatus");
|
||||||
@ -3792,10 +3839,14 @@ sub CUL_HM_qStateUpdat($){#in:name or id, queue send stat-request after 12 sec
|
|||||||
RemoveInternalTimer("CUL_HM_reqStatus");
|
RemoveInternalTimer("CUL_HM_reqStatus");
|
||||||
InternalTimer(gettimeofday()+120,"CUL_HM_reqStatus","CUL_HM_reqStatus", 0);
|
InternalTimer(gettimeofday()+120,"CUL_HM_reqStatus","CUL_HM_reqStatus", 0);
|
||||||
}
|
}
|
||||||
sub CUL_HM_getARead($){#return valid autoRegRead as integer
|
sub CUL_HM_getAttrInt($$){#return attrValue as integer
|
||||||
my $name = shift;
|
my ($name,$attrName) = @_;
|
||||||
my $aRd = CUL_HM_Get($defs{$name},$name,"param","autoReadReg");
|
my $val = AttrVal($name,$attrName,"");
|
||||||
return ($aRd eq "undefined")?0:int($aRd);
|
no warnings 'numeric';
|
||||||
|
$val = int(AttrVal(CUL_HM_getDeviceName($name),$attrName,0))+0
|
||||||
|
if ($val eq "");
|
||||||
|
use warnings 'numeric';
|
||||||
|
return substr($val,0,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#+++++++++++++++++ external use +++++++++++++++++++++++++++++++++++++++++++++++
|
#+++++++++++++++++ external use +++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
@ -3973,43 +4024,54 @@ sub CUL_HM_putHash($) {# provide data for HMinfo
|
|||||||
data!. It controlls actions taken upon receive of a trigger from the
|
data!. It controlls actions taken upon receive of a trigger from the
|
||||||
peer.<br>
|
peer.<br>
|
||||||
|
|
||||||
List4: settings for channel (button) of a remote<br><br>
|
List4: settings for channel (button) of a remote<br><br>
|
||||||
|
|
||||||
<PeerChannel> paired HMid+ch, i.e. 4 byte (8 digit) value like
|
<PeerChannel> paired HMid+ch, i.e. 4 byte (8 digit) value like
|
||||||
'12345601'. It is mendatory for List 3 and 4 and can be left out for
|
'12345601'. It is mendatory for List 3 and 4 and can be left out for
|
||||||
List 0 and 1. <br>
|
List 0 and 1. <br>
|
||||||
|
|
||||||
'all' can be used to get data of each paired link of the channel. <br>
|
'all' can be used to get data of each paired link of the channel. <br>
|
||||||
|
|
||||||
'selfxx' can be used to address data for internal channels (associated
|
'selfxx' can be used to address data for internal channels (associated
|
||||||
with the build-in switches if any). xx is the number of the channel in
|
with the build-in switches if any). xx is the number of the channel in
|
||||||
decimal.<br>
|
decimal.<br>
|
||||||
|
|
||||||
Note1: execution depends on the entity. If List1 is requested on a
|
Note1: execution depends on the entity. If List1 is requested on a
|
||||||
device rather then a channel the command will retrieve List1 for all
|
device rather then a channel the command will retrieve List1 for all
|
||||||
channels assotiated. List3 with peerChannel = all will get all link
|
channels assotiated. List3 with peerChannel = all will get all link
|
||||||
for all channel if executed on a device.<br>
|
for all channel if executed on a device.<br>
|
||||||
|
|
||||||
Note2: for 'sender' see <a href="#CUL_HMremote">remote</a> <br>
|
Note2: for 'sender' see <a href="#CUL_HMremote">remote</a> <br>
|
||||||
|
|
||||||
Note3: the information retrieval may take a while - especially for
|
Note3: the information retrieval may take a while - especially for
|
||||||
devices with a lot of channels and links. It may be necessary to
|
devices with a lot of channels and links. It may be necessary to
|
||||||
refresh the web interface manually to view the results <br>
|
refresh the web interface manually to view the results <br>
|
||||||
|
|
||||||
Note4: the direct buttons on a HM device are hidden by default.
|
Note4: the direct buttons on a HM device are hidden by default.
|
||||||
Nevertheless those are implemented as links as well. To get access to
|
Nevertheless those are implemented as links as well. To get access to
|
||||||
the 'internal links' it is necessary to issue 'set <name> regSet
|
the 'internal links' it is necessary to issue 'set <name> regSet
|
||||||
intKeyVisib 1' or 'set <name> setRegRaw List0 2 81'. Reset it
|
intKeyVisib 1' or 'set <name> setRegRaw List0 2 81'. Reset it
|
||||||
by replacing '81' with '01'<br> example:<br>
|
by replacing '81' with '01'<br> example:<br>
|
||||||
|
|
||||||
<ul><code>
|
<ul><code>
|
||||||
set mydimmer getRegRaw List1<br>
|
set mydimmer getRegRaw List1<br>
|
||||||
set mydimmer getRegRaw List3 all <br>
|
set mydimmer getRegRaw List3 all <br>
|
||||||
</code></ul>
|
</code></ul>
|
||||||
</li>
|
</li>
|
||||||
<li><B>getSerial</B><a name="CUL_HMgetSerial"></a><br>
|
<li><B>getSerial</B><a name="CUL_HMgetSerial"></a><br>
|
||||||
Read serial number from device and write it to attribute serialNr.
|
Read serial number from device and write it to attribute serialNr.
|
||||||
</li>
|
</li>
|
||||||
|
<li><B>inhibit [on|off]</B><br>
|
||||||
|
Block / unblock all directly peered remotes and the hardware buttons of the
|
||||||
|
device. If inhibit set on, the channel status can be controlled only by
|
||||||
|
FHEM.<br><br>
|
||||||
|
Examples:
|
||||||
|
<ul><code>
|
||||||
|
# Block operation<br>
|
||||||
|
set keymatic inhibit on <br><br>
|
||||||
|
</ul></code>
|
||||||
|
</li>
|
||||||
|
|
||||||
<li><B>pair</B><a name="CUL_HMpair"></a><br>
|
<li><B>pair</B><a name="CUL_HMpair"></a><br>
|
||||||
Pair the device with a known serialNumber (e.g. after a device reset)
|
Pair the device with a known serialNumber (e.g. after a device reset)
|
||||||
to FHEM Central unit. FHEM Central is usualy represented by CUL/CUNO,
|
to FHEM Central unit. FHEM Central is usualy represented by CUL/CUNO,
|
||||||
@ -4341,17 +4403,31 @@ sub CUL_HM_putHash($) {# provide data for HMinfo
|
|||||||
</li>
|
</li>
|
||||||
<li>OutputUnit (HM-OU-CFM-PL)
|
<li>OutputUnit (HM-OU-CFM-PL)
|
||||||
<ul>
|
<ul>
|
||||||
<li><B>led <color>[,<color>..]</B><br>
|
<li><B>led <color>[,<color>..] [<repeat>..]</B><br>
|
||||||
Possible colors are [redL|greenL|yellowL|redS|greenS|yellowS]. A
|
Possible colors are [redL|greenL|yellowL|redS|greenS|yellowS]. A
|
||||||
sequence of colors can be given separating the color entries by ','.
|
sequence of colors can be given separating the color entries by ','.
|
||||||
White spaces must not be used in the list. 'S' indicates short and
|
White spaces must not be used in the list. 'S' indicates short and
|
||||||
'L' long ilumination. <br>
|
'L' long ilumination. <br>
|
||||||
<b>repeat</b> defines how often the sequence shall be executed. Defaults to 1.<br>
|
<b>repeat</b> defines how often the sequence shall be executed. Defaults to 1.<br>
|
||||||
</li>
|
</li>
|
||||||
<li><B>playTone <MP3No>[,<MP3No>..] [,<repeat>..]</B><br>
|
<li><B>playTone <MP3No>[,<MP3No>..] [<repeat>..]</B><br>
|
||||||
Play a series of tones. List is to be entered separated by ','. White
|
Play a series of tones. List is to be entered separated by ','. White
|
||||||
spaces must not be used in the list.<br>
|
spaces must not be used in the list.<br>
|
||||||
|
<b>replay</b> can be entered to repeat the last sound played once more.<br>
|
||||||
<b>repeat</b> defines how often the sequence shall be played. Defaults to 1.<br>
|
<b>repeat</b> defines how often the sequence shall be played. Defaults to 1.<br>
|
||||||
|
Example:
|
||||||
|
<ul><code>
|
||||||
|
# "hello" in display, symb bulb on, backlight, beep<br>
|
||||||
|
set cfm_Mp3 playTone 3 # MP3 title 3 once<br>
|
||||||
|
set cfm_Mp3 playTone 3 3 # MP3 title 3 3 times<br>
|
||||||
|
set cfm_Mp3 playTone 3,6,8,3,4 # MP3 title list 3,6,8,3,4 once<br>
|
||||||
|
set cfm_Mp3 playTone 3,6,8,3,4 255# MP3 title list 3,6,8,3,4 255 times<br>
|
||||||
|
set cfm_Mp3 playTone replay # repeat last sequence<br>
|
||||||
|
<br>
|
||||||
|
set cfm_Led led redL 4 # led red blink 3 times long<br>
|
||||||
|
set cfm_Led led redS,redS,redS,redL,redL,redL,redS,redS,redS 255 # SOS 255 times<br>
|
||||||
|
</ul></code>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
</ul><br>
|
</ul><br>
|
||||||
</li>
|
</li>
|
||||||
@ -4412,18 +4488,7 @@ sub CUL_HM_putHash($) {# provide data for HMinfo
|
|||||||
Unlocked the door so that the door can be opened.<br>
|
Unlocked the door so that the door can be opened.<br>
|
||||||
[sec]: Sets the delay in seconds after the lock automatically locked
|
[sec]: Sets the delay in seconds after the lock automatically locked
|
||||||
again.<br>0 - 65535 seconds</li>
|
again.<br>0 - 65535 seconds</li>
|
||||||
<li><B>inhibit [on|off]</B><br>
|
</li>
|
||||||
Block / unblock all directly peered remotes and the hardware buttons of the
|
|
||||||
keyMatic. If inhibit set on, the door lock drive can be controlled only by
|
|
||||||
FHEM.<br><br>
|
|
||||||
Examples:
|
|
||||||
<ul><code>
|
|
||||||
# Lock the lock<br>
|
|
||||||
set keymatic lock<br><br>
|
|
||||||
# open the door and relock the lock after 60 seconds<br>
|
|
||||||
set keymatic unlock 60
|
|
||||||
</ul></code>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
@ -60,10 +60,10 @@ my %culHmModel=(
|
|||||||
"0008" => {name=>"HM-RC-4" ,st=>'remote' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:4",},
|
"0008" => {name=>"HM-RC-4" ,st=>'remote' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:4",},
|
||||||
"0009" => {name=>"HM-LC-SW2-FM" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:2",},
|
"0009" => {name=>"HM-LC-SW2-FM" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:2",},
|
||||||
"000A" => {name=>"HM-LC-SW2-SM" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:2",},
|
"000A" => {name=>"HM-LC-SW2-SM" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:2",},
|
||||||
"000B" => {name=>"HM-WDC7000" ,st=>'THSensor' ,cyc=>'' ,rxt=>'' ,lst=>'' ,chn=>"",},
|
"000B" => {name=>"HM-WDC7000" ,st=>'THSensor' ,cyc=>'' ,rxt=>'' ,lst=>'p' ,chn=>"",},
|
||||||
"000D" => {name=>"ASH550" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'' ,chn=>"",},
|
"000D" => {name=>"ASH550" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'p' ,chn=>"",},
|
||||||
"000E" => {name=>"ASH550I" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'' ,chn=>"",},
|
"000E" => {name=>"ASH550I" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'p' ,chn=>"",},
|
||||||
"000F" => {name=>"S550IA" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'' ,chn=>"",},
|
"000F" => {name=>"S550IA" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'p' ,chn=>"",},
|
||||||
"0011" => {name=>"HM-LC-SW1-PL" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'3' ,chn=>"",},
|
"0011" => {name=>"HM-LC-SW1-PL" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'3' ,chn=>"",},
|
||||||
"0012" => {name=>"HM-LC-DIM1L-CV" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
"0012" => {name=>"HM-LC-DIM1L-CV" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
||||||
"0013" => {name=>"HM-LC-DIM1L-PL" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
"0013" => {name=>"HM-LC-DIM1L-PL" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
||||||
@ -90,29 +90,33 @@ my %culHmModel=(
|
|||||||
"0034" => {name=>"HM-PBI-4-FM" ,st=>'pushButton' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:4",}, # HM Push Button Interface
|
"0034" => {name=>"HM-PBI-4-FM" ,st=>'pushButton' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:4",}, # HM Push Button Interface
|
||||||
"0035" => {name=>"HM-PB-4-WM" ,st=>'pushButton' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:4",},
|
"0035" => {name=>"HM-PB-4-WM" ,st=>'pushButton' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:4",},
|
||||||
"0036" => {name=>"HM-PB-2-WM" ,st=>'pushButton' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:2",},
|
"0036" => {name=>"HM-PB-2-WM" ,st=>'pushButton' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:2",},
|
||||||
"0037" => {name=>"HM-RC-19" ,st=>'remote' ,cyc=>'' ,rxt=>'c:b' ,lst=>'1,4' ,chn=>"Btn:1:17,Disp:18:18",},
|
|
||||||
"0038" => {name=>"HM-RC-19-B" ,st=>'remote' ,cyc=>'' ,rxt=>'c:b' ,lst=>'1,4' ,chn=>"Btn:1:17,Disp:18:18",},
|
"0037" => {name=>"HM-RC-19" ,st=>'remote' ,cyc=>'' ,rxt=>'c:b' ,lst=>'1,4:1p.2p.3p.4p.5p.6p.7p.8p.9p.10p.11p.12p.13p.14p.15p.16p'
|
||||||
|
,chn=>"Btn:1:17,Disp:18:18",},
|
||||||
|
"0038" => {name=>"HM-RC-19-B" ,st=>'remote' ,cyc=>'' ,rxt=>'c:b' ,lst=>'1,4:1p.2p.3p.4p.5p.6p.7p.8p.9p.10p.11p.12p.13p.14p.15p.16p'
|
||||||
|
,chn=>"Btn:1:17,Disp:18:18",},
|
||||||
"0039" => {name=>"HM-CC-TC" ,st=>'thermostat' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'5:2.3p,6:2' ,chn=>"Weather:1:1,Climate:2:2,WindowRec:3:3",},
|
"0039" => {name=>"HM-CC-TC" ,st=>'thermostat' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'5:2.3p,6:2' ,chn=>"Weather:1:1,Climate:2:2,WindowRec:3:3",},
|
||||||
"003A" => {name=>"HM-CC-VD" ,st=>'thermostat' ,cyc=>'28:00' ,rxt=>'c:w' ,lst=>'5' ,chn=>"",},
|
"003A" => {name=>"HM-CC-VD" ,st=>'thermostat' ,cyc=>'28:00' ,rxt=>'c:w' ,lst=>'p,5' ,chn=>"",},
|
||||||
"003B" => {name=>"HM-RC-4-B" ,st=>'remote' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:4",},
|
"003B" => {name=>"HM-RC-4-B" ,st=>'remote' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:4",},
|
||||||
"003C" => {name=>"HM-WDS20-TH-O" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'' ,chn=>"",},
|
"003C" => {name=>"HM-WDS20-TH-O" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'p' ,chn=>"",},
|
||||||
"003D" => {name=>"HM-WDS10-TH-O" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'' ,chn=>"",},
|
"003D" => {name=>"HM-WDS10-TH-O" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'p' ,chn=>"",},
|
||||||
"003E" => {name=>"HM-WDS30-T-O" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'' ,chn=>"",},
|
"003E" => {name=>"HM-WDS30-T-O" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'p' ,chn=>"",},
|
||||||
"003F" => {name=>"HM-WDS40-TH-I" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'' ,chn=>"",},
|
"003F" => {name=>"HM-WDS40-TH-I" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'p' ,chn=>"",},
|
||||||
"0040" => {name=>"HM-WDS100-C6-O" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'1' ,chn=>"",},
|
"0040" => {name=>"HM-WDS100-C6-O" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'p,1' ,chn=>"",},
|
||||||
"0041" => {name=>"HM-WDC7000" ,st=>'THSensor' ,cyc=>'' ,rxt=>'' ,lst=>'1,4' ,chn=>"",},
|
"0041" => {name=>"HM-WDC7000" ,st=>'THSensor' ,cyc=>'' ,rxt=>'' ,lst=>'1,4' ,chn=>"",},
|
||||||
"0042" => {name=>"HM-SEC-SD" ,st=>'smokeDetector' ,cyc=>'99:00' ,rxt=>'b' ,lst=>'' ,chn=>"",},
|
"0042" => {name=>"HM-SEC-SD" ,st=>'smokeDetector' ,cyc=>'99:00' ,rxt=>'b' ,lst=>'p' ,chn=>"",},
|
||||||
"0043" => {name=>"HM-SEC-TIS" ,st=>'threeStateSensor' ,cyc=>'28:00' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",},
|
"0043" => {name=>"HM-SEC-TIS" ,st=>'threeStateSensor' ,cyc=>'28:00' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",},
|
||||||
"0044" => {name=>"HM-SEN-EP" ,st=>'sensor' ,cyc=>'' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",},
|
"0044" => {name=>"HM-SEN-EP" ,st=>'sensor' ,cyc=>'' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",},
|
||||||
"0045" => {name=>"HM-SEC-WDS" ,st=>'threeStateSensor' ,cyc=>'28:00' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",},
|
"0045" => {name=>"HM-SEC-WDS" ,st=>'threeStateSensor' ,cyc=>'28:00' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",},
|
||||||
"0046" => {name=>"HM-SWI-3-FM" ,st=>'swi' ,cyc=>'' ,rxt=>'c' ,lst=>'4' ,chn=>"Sw:1:3",},
|
"0046" => {name=>"HM-SWI-3-FM" ,st=>'swi' ,cyc=>'' ,rxt=>'c' ,lst=>'4' ,chn=>"Sw:1:3",},
|
||||||
"0047" => {name=>"KFM-Sensor" ,st=>'KFM100' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
"0047" => {name=>"KFM-Sensor" ,st=>'KFM100' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
||||||
"0048" => {name=>"IS-WDS-TH-OD-S-R3" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'' ,chn=>"",},
|
"0048" => {name=>"IS-WDS-TH-OD-S-R3" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'p' ,chn=>"",},
|
||||||
"0049" => {name=>"KFM-Display" ,st=>'KFM100' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
"0049" => {name=>"KFM-Display" ,st=>'KFM100' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
||||||
"004A" => {name=>"HM-SEC-MDIR" ,st=>'motionDetector' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",},
|
"004A" => {name=>"HM-SEC-MDIR" ,st=>'motionDetector' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",},
|
||||||
"004B" => {name=>"HM-Sec-Cen" ,st=>'AlarmControl' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
"004B" => {name=>"HM-Sec-Cen" ,st=>'AlarmControl' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
||||||
"004C" => {name=>"HM-RC-12-SW" ,st=>'remote' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:12",},
|
"004C" => {name=>"HM-RC-12-SW" ,st=>'remote' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:12",},
|
||||||
"004D" => {name=>"HM-RC-19-SW" ,st=>'remote' ,cyc=>'' ,rxt=>'c:b' ,lst=>'1,4' ,chn=>"Btn:1:17,Disp:18:18",},
|
"004D" => {name=>"HM-RC-19-SW" ,st=>'remote' ,cyc=>'' ,rxt=>'c:b' ,lst=>'1,4:1p.2p.3p.4p.5p.6p.7p.8p.9p.10p.11p.12p.13p.14p.15p.16p'
|
||||||
|
,chn=>"Btn:1:17,Disp:18:18",},
|
||||||
"004E" => {name=>"HM-LC-DDC1-PCB" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",}, # door drive controller 1-channel (PCB)
|
"004E" => {name=>"HM-LC-DDC1-PCB" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",}, # door drive controller 1-channel (PCB)
|
||||||
"004F" => {name=>"HM-SEN-MDIR-SM" ,st=>'motionDetector' ,cyc=>'' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",},
|
"004F" => {name=>"HM-SEN-MDIR-SM" ,st=>'motionDetector' ,cyc=>'' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",},
|
||||||
"0050" => {name=>"HM-SEC-SFA-SM" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Siren:1:1,Flash:2:2",},
|
"0050" => {name=>"HM-SEC-SFA-SM" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Siren:1:1,Flash:2:2",},
|
||||||
@ -140,7 +144,7 @@ my %culHmModel=(
|
|||||||
"006A" => {name=>"HM-LC-Bl1PBU-FM" ,st=>'blindActuator' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
"006A" => {name=>"HM-LC-Bl1PBU-FM" ,st=>'blindActuator' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
||||||
"006B" => {name=>"HM-PB-2-WM55" ,st=>'pushButton' ,cyc=>'' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"Btn:1:2",},
|
"006B" => {name=>"HM-PB-2-WM55" ,st=>'pushButton' ,cyc=>'' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"Btn:1:2",},
|
||||||
"006C" => {name=>"HM-LC-SW1-BA-PCB" ,st=>'switch' ,cyc=>'' ,rxt=>'b' ,lst=>'3' ,chn=>"",},
|
"006C" => {name=>"HM-LC-SW1-BA-PCB" ,st=>'switch' ,cyc=>'' ,rxt=>'b' ,lst=>'3' ,chn=>"",},
|
||||||
"006D" => {name=>"HM-OU-LED16" ,st=>'outputUnit' ,cyc=>'' ,rxt=>'' ,lst=>'' ,chn=>"Led:1:16",},
|
"006D" => {name=>"HM-OU-LED16" ,st=>'outputUnit' ,cyc=>'' ,rxt=>'' ,lst=>'p' ,chn=>"Led:1:16",},
|
||||||
"006E" => {name=>"HM-LC-Dim1L-CV" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:1,Sw1_V:2:3",},
|
"006E" => {name=>"HM-LC-Dim1L-CV" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:1,Sw1_V:2:3",},
|
||||||
"006F" => {name=>"HM-LC-Dim1L-Pl" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:1,Sw1_V:2:3",},
|
"006F" => {name=>"HM-LC-Dim1L-Pl" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:1,Sw1_V:2:3",},
|
||||||
"0070" => {name=>"HM-LC-Dim2L-SM" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:2,Sw1_V:3:4,Sw2_V:5:6",},#
|
"0070" => {name=>"HM-LC-Dim2L-SM" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:2,Sw1_V:3:4,Sw2_V:5:6",},#
|
||||||
@ -149,7 +153,7 @@ my %culHmModel=(
|
|||||||
"0073" => {name=>"HM-LC-Dim1T-FM" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:1,Sw1_V:2:3",},
|
"0073" => {name=>"HM-LC-Dim1T-FM" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:1,Sw1_V:2:3",},
|
||||||
"0074" => {name=>"HM-LC-Dim2T-SM" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:2,Sw1_V:3:4,Sw2_V:5:6",},#
|
"0074" => {name=>"HM-LC-Dim2T-SM" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:2,Sw1_V:3:4,Sw2_V:5:6",},#
|
||||||
"0075" => {name=>"HM-OU-CFM-PL" ,st=>'outputUnit' ,cyc=>'' ,rxt=>'' ,lst=>'3' ,chn=>"Led:1:1,Mp3:2:2",},
|
"0075" => {name=>"HM-OU-CFM-PL" ,st=>'outputUnit' ,cyc=>'' ,rxt=>'' ,lst=>'3' ,chn=>"Led:1:1,Mp3:2:2",},
|
||||||
"0076" => {name=>"HM-Sys-sRP-Pl" ,st=>'repeater' ,cyc=>'' ,rxt=>'' ,lst=>'2' ,chn=>"",}, # repeater
|
"0076" => {name=>"HM-Sys-sRP-Pl" ,st=>'repeater' ,cyc=>'' ,rxt=>'' ,lst=>'p,2' ,chn=>"",}, # repeater
|
||||||
"0078" => {name=>"HM-Dis-TD-T" ,st=>'switch' ,cyc=>'' ,rxt=>'b' ,lst=>'3' ,chn=>"",}, #
|
"0078" => {name=>"HM-Dis-TD-T" ,st=>'switch' ,cyc=>'' ,rxt=>'b' ,lst=>'3' ,chn=>"",}, #
|
||||||
"0079" => {name=>"ROTO_ZEL-STG-RM-FWT" ,st=>'' ,cyc=>'' ,rxt=>'c:w' ,lst=>'1,3' ,chn=>"",}, #
|
"0079" => {name=>"ROTO_ZEL-STG-RM-FWT" ,st=>'' ,cyc=>'' ,rxt=>'c:w' ,lst=>'1,3' ,chn=>"",}, #
|
||||||
"007A" => {name=>"ROTO_ZEL-STG-RM-FSA" ,st=>'' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",}, #
|
"007A" => {name=>"ROTO_ZEL-STG-RM-FSA" ,st=>'' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",}, #
|
||||||
@ -175,8 +179,8 @@ my %culHmModel=(
|
|||||||
"008F" => {name=>"Schueco_263-145" ,st=>'pushButton' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"",}, # HM Push Button Interface
|
"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' ,lst=>'1,3' ,chn=>"",}, # HM radio-controlled motion detector
|
"0090" => {name=>"Schueco_263-162" ,st=>'motionDetector' ,cyc=>'00:30' ,rxt=>'c:w' ,lst=>'1,3' ,chn=>"",}, # HM radio-controlled motion detector
|
||||||
"0092" => {name=>"Schueco_263-144" ,st=>'switch' ,cyc=>'' ,rxt=>'c' ,lst=>'4' ,chn=>"",}, # HM Switch Interface 3 switches
|
"0092" => {name=>"Schueco_263-144" ,st=>'switch' ,cyc=>'' ,rxt=>'c' ,lst=>'4' ,chn=>"",}, # HM Switch Interface 3 switches
|
||||||
"0093" => {name=>"Schueco_263-158" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'' ,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=>'' ,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
|
||||||
"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
|
||||||
@ -276,8 +280,8 @@ my %culHmRegDefShLg = (# register that are available for short AND long button p
|
|||||||
SwJtDlyOn =>{a=> 12.0,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from delayOn" ,lit=>{no=>0,dlyOn=>1,on=>3,dlyOff=>4,off=>6}},
|
SwJtDlyOn =>{a=> 12.0,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from delayOn" ,lit=>{no=>0,dlyOn=>1,on=>3,dlyOff=>4,off=>6}},
|
||||||
SwJtDlyOff =>{a=> 12.4,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from delayOff",lit=>{no=>0,dlyOn=>1,on=>3,dlyOff=>4,off=>6}},
|
SwJtDlyOff =>{a=> 12.4,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from delayOff",lit=>{no=>0,dlyOn=>1,on=>3,dlyOff=>4,off=>6}},
|
||||||
|
|
||||||
KeyJtOn =>{a=> 11.0,s=>0.4,l=>3,min=>0 ,max=>7 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from on" ,lit=>{no=>0,dlyUnlock=>1,rampUnlock=>2,lock=>3,dlyLock=>4,rampLock=>5,lock=>6,open=>8}},
|
KeyJtOn =>{a=> 11.0,s=>0.4,l=>3,min=>0 ,max=>7 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from on" ,lit=>{no=>0,dlyUnlock=>1,rampUnlock=>2,unLock=>3,dlyLock=>4,rampLock=>5,lock=>6,open=>8}},
|
||||||
KeyJtOff =>{a=> 11.4,s=>0.4,l=>3,min=>0 ,max=>7 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from off" ,lit=>{no=>0,dlyUnlock=>1,rampUnlock=>2,lock=>3,dlyLock=>4,rampLock=>5,lock=>6,open=>8}},
|
KeyJtOff =>{a=> 11.4,s=>0.4,l=>3,min=>0 ,max=>7 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from off" ,lit=>{no=>0,dlyUnlock=>1,rampUnlock=>2,unLock=>3,dlyLock=>4,rampLock=>5,lock=>6,open=>8}},
|
||||||
|
|
||||||
WinJtOn =>{a=> 11.0,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from off" ,lit=>{no=>0,rampOnDly=>1,rampOn=>2,on=>3,ramoOffDly=>4,rampOff=>5,off=>6,rampOnFast=>8,rampOffFast=>9}},
|
WinJtOn =>{a=> 11.0,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from off" ,lit=>{no=>0,rampOnDly=>1,rampOn=>2,on=>3,ramoOffDly=>4,rampOff=>5,off=>6,rampOnFast=>8,rampOffFast=>9}},
|
||||||
WinJtOff =>{a=> 11.4,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from off" ,lit=>{no=>0,rampOnDly=>1,rampOn=>2,on=>3,ramoOffDly=>4,rampOff=>5,off=>6,rampOnFast=>8,rampOffFast=>9}},
|
WinJtOff =>{a=> 11.4,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from off" ,lit=>{no=>0,rampOnDly=>1,rampOn=>2,on=>3,ramoOffDly=>4,rampOff=>5,off=>6,rampOnFast=>8,rampOffFast=>9}},
|
||||||
@ -427,9 +431,10 @@ my %culHmRegDefine = (
|
|||||||
# others
|
# others
|
||||||
localResetDis =>{a=> 7 ,s=>1 ,l=>1,min=>0 ,max=>255 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"LocalReset disable",lit=>{off=>0,on=>1}},
|
localResetDis =>{a=> 7 ,s=>1 ,l=>1,min=>0 ,max=>255 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"LocalReset disable",lit=>{off=>0,on=>1}},
|
||||||
#un-identified List1
|
#un-identified List1
|
||||||
# SEC-WM55 8:01 (AES on?)
|
# SEC-WM55 08:01 (AES on?)
|
||||||
# SEC-WDS 34:0x64 ?
|
# SEC-WDS 34:0x64 ?
|
||||||
# SEC-SC 8:00 ?
|
# SEC-SC 08:00 ?
|
||||||
|
# RC19 08:00 ?
|
||||||
# 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=>"".
|
||||||
@ -661,14 +666,14 @@ $culHmRegModel{"HM-LC-Dim2T-SM"} = $culHmRegModel{"HM-LC-Dim1T-Pl"};
|
|||||||
$culHmRegModel{"Schueco-263-133"} = $culHmRegModel{"HM-LC-Dim1TPBU-FM"};
|
$culHmRegModel{"Schueco-263-133"} = $culHmRegModel{"HM-LC-Dim1TPBU-FM"};
|
||||||
$culHmRegModel{"Schueco-263-134"} = $culHmRegModel{"HM-LC-Dim1T-Pl-2"};
|
$culHmRegModel{"Schueco-263-134"} = $culHmRegModel{"HM-LC-Dim1T-Pl-2"};
|
||||||
|
|
||||||
$culHmRegModel{"ASH550I"} = $culHmRegModel{"HM-WDS10-TH-O"};
|
$culHmRegModel{"ASH550I"} = $culHmRegModel{"HM-WDS10-TH-O"};
|
||||||
$culHmRegModel{"ASH550"} = $culHmRegModel{"HM-WDS10-TH-O"};
|
$culHmRegModel{"ASH550"} = $culHmRegModel{"HM-WDS10-TH-O"};
|
||||||
$culHmRegModel{"HM-WDS10-TH-O"} = $culHmRegModel{"HM-WDS10-TH-O"};
|
$culHmRegModel{"HM-WDS10-TH-O"} = $culHmRegModel{"HM-WDS10-TH-O"};
|
||||||
$culHmRegModel{"Schueco_263-158"} = $culHmRegModel{"HM-WDS10-TH-O"};
|
$culHmRegModel{"Schueco_263-158"} = $culHmRegModel{"HM-WDS10-TH-O"};
|
||||||
$culHmRegModel{"HM-WDS20-TH-O"} = $culHmRegModel{"HM-WDS10-TH-O"};
|
$culHmRegModel{"HM-WDS20-TH-O"} = $culHmRegModel{"HM-WDS10-TH-O"};
|
||||||
$culHmRegModel{"HM-WDS40-TH-I"} = $culHmRegModel{"HM-WDS10-TH-O"};
|
$culHmRegModel{"HM-WDS40-TH-I"} = $culHmRegModel{"HM-WDS10-TH-O"};
|
||||||
$culHmRegModel{"Schueco_263-157"} = $culHmRegModel{"HM-WDS10-TH-O"};
|
$culHmRegModel{"Schueco_263-157"} = $culHmRegModel{"HM-WDS10-TH-O"};
|
||||||
$culHmRegModel{"IS-WDS-TH-OD-S-R3"} = $culHmRegModel{"HM-WDS10-TH-O"};
|
$culHmRegModel{"IS-WDS-TH-OD-S-R3"}= $culHmRegModel{"HM-WDS10-TH-O"};
|
||||||
|
|
||||||
my %culHmRegChan = (# if channelspecific then enter them here
|
my %culHmRegChan = (# if channelspecific then enter them here
|
||||||
"HM-CC-TC02" =>{displayMode =>1,displayTemp =>1,displayTempUnit =>1,
|
"HM-CC-TC02" =>{displayMode =>1,displayTemp =>1,displayTempUnit =>1,
|
||||||
@ -740,18 +745,19 @@ my %culHmGlobalSetsChn = (# all channels but virtuals
|
|||||||
my %culHmSubTypeSets = (# channels of this subtype
|
my %culHmSubTypeSets = (# channels of this subtype
|
||||||
switch =>{ "on-for-timer"=>"sec", "on-till"=>"time",
|
switch =>{ "on-for-timer"=>"sec", "on-till"=>"time",
|
||||||
on=>"", off=>"", toggle=>"",
|
on=>"", off=>"", toggle=>"",
|
||||||
press => "[long|short] [on|off] ..."},
|
press => "[long|short] [on|off] ...",
|
||||||
|
inhibit =>"[on|off]"},
|
||||||
dimmer =>{ "on-for-timer"=>"sec", "on-till"=>"time",
|
dimmer =>{ "on-for-timer"=>"sec", "on-till"=>"time",
|
||||||
on=>"", off=>"", toggle=>"", pct=>"[value] ... [time] [ramp]", stop=>"",
|
on=> "", off=> "", toggle=> "", pct=>"[value] ... [time] [ramp]", stop=>"",
|
||||||
press => "[long|short] [on|off] ...",
|
press => "[long|short] [on|off] ...",
|
||||||
up => "[<changeValue>] [ontime] [ramptime]...",
|
up => "[<changeValue>] [ontime] [ramptime]...",
|
||||||
down => "[<changeValue>] [ontime] [ramptime]...",
|
down => "[<changeValue>] [ontime] [ramptime]...",
|
||||||
},
|
inhibit => "[on|off]"},
|
||||||
blindActuator =>{ on=>"", off=>"", toggle=>"", pct=>"[value] ... [time] [ramp]", stop=>"",
|
blindActuator =>{ on=> "", off=>" ", toggle=> "", pct=>"[value] ... [time] [ramp]", stop=>"",
|
||||||
press => "[long|short] [on|off] ...",
|
press => "[long|short] [on|off] ...",
|
||||||
up => "[<changeValue>] [ontime] [ramptime]...",
|
up => "[<changeValue>] [ontime] [ramptime]...",
|
||||||
down => "[<changeValue>] [ontime] [ramptime]..."
|
down => "[<changeValue>] [ontime] [ramptime]...",
|
||||||
},
|
inhibit =>"[on|off]"},
|
||||||
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]",},
|
||||||
virtual =>{ peerChan => "<btnNumber> <actChn> ... [single|dual] [set|unset] [actor|remote|both]",
|
virtual =>{ peerChan => "<btnNumber> <actChn> ... [single|dual] [set|unset] [actor|remote|both]",
|
||||||
@ -761,7 +767,8 @@ my %culHmSubTypeSets = (# channels of this subtype
|
|||||||
peerChan => "<btnNumber> <actChn> ... single [set|unset] actor",},
|
peerChan => "<btnNumber> <actChn> ... single [set|unset] actor",},
|
||||||
winMatic =>{ matic => "<btn>",
|
winMatic =>{ matic => "<btn>",
|
||||||
keydef => "<btn> <txt1> <txt2>",
|
keydef => "<btn> <txt1> <txt2>",
|
||||||
create => "<txt>" },
|
create => "<txt>",
|
||||||
|
inhibit =>"[on|off]"},
|
||||||
keyMatic =>{ lock =>"",
|
keyMatic =>{ lock =>"",
|
||||||
unlock =>"[sec] ...",
|
unlock =>"[sec] ...",
|
||||||
open =>"[sec] ...",
|
open =>"[sec] ...",
|
||||||
@ -776,11 +783,15 @@ my %culHmModelSets = (# channels of this subtype-------------
|
|||||||
"HM-RC-19" =>{service => "<count>",
|
"HM-RC-19" =>{service => "<count>",
|
||||||
alarm => "<count>",
|
alarm => "<count>",
|
||||||
display => "<text> [comma,no] [unit] [off|1|2|3] [off|on|slow|fast] <symbol>"},
|
display => "<text> [comma,no] [unit] [off|1|2|3] [off|on|slow|fast] <symbol>"},
|
||||||
"HM-PB-4DIS-WM"=>{text => "<btn> [on|off] <txt1> <txt2>"},
|
"HM-PB-4DIS-WM"=>{ text => "<txt1> <txt2>...",
|
||||||
"HM-OU-LED16" =>{led =>"[off|red|green|orange]" ,
|
#text => "<btn> [on|off] <txt1> <txt2>...", old style will not be offered anymore
|
||||||
ilum =>"[0-15] [0-127]" },
|
},
|
||||||
"HM-OU-CFM-PL" =>{press => "[long|short] [on|off] ..."},
|
"HM-OU-LED16" =>{ led =>"[off|red|green|orange]" ,
|
||||||
"HM-Sys-sRP-Pl"=>{setRepeat => "[no1..36] <sendName> <recName> [bdcast-yes|no]"},
|
ilum =>"[0-15] [0-127]" },
|
||||||
|
"HM-OU-CFM-PL" =>{ press => "[long|short] [on|off] ...",
|
||||||
|
inhibit =>"[on|off]"},
|
||||||
|
"HM-Sys-sRP-Pl"=>{ setRepeat => "[no1..36] <sendName> <recName> [bdcast-yes|no]",
|
||||||
|
inhibit =>"[on|off]"},
|
||||||
);
|
);
|
||||||
# clones- - - - - - - - - - - - - - - - -
|
# clones- - - - - - - - - - - - - - - - -
|
||||||
$culHmModelSets{"HM-RC-19-B"} = $culHmModelSets{"HM-RC-19"};
|
$culHmModelSets{"HM-RC-19-B"} = $culHmModelSets{"HM-RC-19"};
|
||||||
@ -788,32 +799,32 @@ $culHmModelSets{"HM-RC-19-SW"} = $culHmModelSets{"HM-RC-19"};
|
|||||||
#%{$culHmModelSets{"HM-RC-19-SW"}} = %{$culHmModelSets{"HM-RC-19"}}; copy
|
#%{$culHmModelSets{"HM-RC-19-SW"}} = %{$culHmModelSets{"HM-RC-19"}}; copy
|
||||||
|
|
||||||
my %culHmChanSets = (
|
my %culHmChanSets = (
|
||||||
"HM-CC-TC02" =>{
|
"HM-CC-TC02" =>{ peerChan => "<btnNumber> <actChn> ... single [set|unset] [actor|remote|both]",
|
||||||
peerChan => "<btnNumber> <actChn> ... single [set|unset] [actor|remote|both]",
|
"day-temp" => "[on,off,6.0..30.0]",
|
||||||
"day-temp" => "[on,off,6.0..30.0]",
|
"night-temp" => "[on,off,6.0..30.0]",
|
||||||
"night-temp" => "[on,off,6.0..30.0]",
|
"party-temp" => "[on,off,6.0..30.0]",
|
||||||
"party-temp" => "[on,off,6.0..30.0]",
|
"desired-temp" => "[on,off,6.0..30.0]",
|
||||||
"desired-temp" => "[on,off,6.0..30.0]",
|
tempListSat => "HH:MM temp ...",
|
||||||
tempListSat => "HH:MM temp ...",
|
tempListSun => "HH:MM temp ...",
|
||||||
tempListSun => "HH:MM temp ...",
|
tempListMon => "HH:MM temp ...",
|
||||||
tempListMon => "HH:MM temp ...",
|
tempListTue => "HH:MM temp ...",
|
||||||
tempListTue => "HH:MM temp ...",
|
tempListThu => "HH:MM temp ...",
|
||||||
tempListThu => "HH:MM temp ...",
|
tempListWed => "HH:MM temp ...",
|
||||||
tempListWed => "HH:MM temp ...",
|
tempListFri => "HH:MM temp ...",
|
||||||
tempListFri => "HH:MM temp ...",
|
displayMode => "[temp-only|temp-hum]",
|
||||||
displayMode => "[temp-only|temp-hum]",
|
displayTemp => "[actual|setpoint]",
|
||||||
displayTemp => "[actual|setpoint]",
|
displayTempUnit => "[celsius|fahrenheit]",
|
||||||
displayTempUnit => "[celsius|fahrenheit]",
|
controlMode => "[manual|auto|central|party]",
|
||||||
controlMode => "[manual|auto|central|party]",
|
decalcDay => "day",
|
||||||
decalcDay => "day",
|
sysTime => "" },
|
||||||
sysTime => "" },
|
"HM-SEC-WIN01" =>{ stop =>"",
|
||||||
"HM-SEC-WIN01"=>{ stop =>"",
|
level =>"<level> <relockDly> <speed>..."},
|
||||||
level =>"<level> <relockDly> <speed>..."},
|
"HM-OU-CFM-PL01" =>{ led => "<color>[,<color>...] [<repeat>]"},
|
||||||
"HM-OU-CFM-PL01" =>{led => "<color>[,<color>...] [<repeat>]"},
|
"HM-OU-CFM-PL02" =>{ playTone => "<MP3No>[,<MP3No>...] [<repeat>]"}
|
||||||
"HM-OU-CFM-PL02" =>{playTone => "<MP3No>[,<MP3No>...] [<repeat>]"},
|
|
||||||
);
|
);
|
||||||
# clones- - - - - - - - - - - - - - - - -
|
# clones- - - - - - - - - - - - - - - - -
|
||||||
$culHmChanSets{"HM-CC-TC00"} = $culHmChanSets{"HM-CC-TC02"};
|
$culHmChanSets{"HM-CC-TC00"} = $culHmChanSets{"HM-CC-TC02"};
|
||||||
|
$culHmChanSets{"HM-OU-CF-PL02"} = $culHmChanSets{"HM-OU-CF-PL01"};
|
||||||
|
|
||||||
# RC send BCAST to specific address. Is the meaning understood?
|
# RC send BCAST to specific address. Is the meaning understood?
|
||||||
my @culHmCmdFlags = ("WAKEUP", "WAKEMEUP", "CFG", "Bit3",
|
my @culHmCmdFlags = ("WAKEUP", "WAKEMEUP", "CFG", "Bit3",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user