mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-10 03:06:37 +00:00
CUL_HM:handle IOs for virtuals
git-svn-id: https://svn.fhem.de/fhem/trunk@16258 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
62a732bcb8
commit
3d9c69f883
@ -3889,7 +3889,7 @@ sub CUL_HM_Get($@) {#+++++++++++++++++ get command+++++++++++++++++++++++++++++
|
||||
else{#ignore e.g. for virtuals
|
||||
}
|
||||
if( !$roleV &&($roleD || $roleC) ){foreach(keys %{$culHmGlobalSets} ){push @arr1,"$_:".$culHmGlobalSets->{$_} }};
|
||||
if(($st eq "virtual"||!$st) && $roleD){foreach(keys %{$culHmGlobalSetsVrtDev} ){push @arr1,"$_ ".$culHmGlobalSetsVrtDev->{$_} }};
|
||||
if(( $roleV || !$st) && $roleD){foreach(keys %{$culHmGlobalSetsVrtDev} ){push @arr1,"$_ ".$culHmGlobalSetsVrtDev->{$_} }};
|
||||
if( !$roleV && $roleD){foreach(keys %{$culHmSubTypeDevSets->{$st}}){push @arr1,"$_ ".${$culHmSubTypeDevSets->{$st}}{$_}}};
|
||||
if( !$roleV && $roleC){foreach(keys %{$culHmGlobalSetsChn} ){push @arr1,"$_ ".$culHmGlobalSetsChn->{$_} }};
|
||||
if( $culHmSubTypeSets->{$st} && $roleC){foreach(keys %{$culHmSubTypeSets->{$st}} ){push @arr1,"$_ ".${$culHmSubTypeSets->{$st}}{$_} }};
|
||||
@ -4013,9 +4013,7 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
|
||||
my $fkt = $hash->{helper}{fkt}?$hash->{helper}{fkt}:"";
|
||||
|
||||
my $oCmd = $cmd;# we extend press to press/L/S if press is defined
|
||||
if ( $cmd =~ m/^press/){# substitude pressL/S with press for cmd search
|
||||
$cmd = (InternalVal($name,"peerList","")) ? "press" : "?";
|
||||
}
|
||||
$cmd = "press" if ($cmd =~ m/^press/);# substitude pressL/S with press for cmd search
|
||||
|
||||
my $h = undef;
|
||||
$h = $culHmGlobalSets->{$cmd} if( !$roleV &&($roleD || $roleC));
|
||||
@ -4132,113 +4130,11 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
|
||||
return "$cmd requires parameter: $h";
|
||||
}
|
||||
|
||||
my $id = CUL_HM_IoId($defs{$devName});
|
||||
if(length($id) != 6 && $hash->{DEF} ne "000000" ){# have to try to find an IO $devName
|
||||
CUL_HM_assignIO($defs{$devName});
|
||||
$id = CUL_HM_IoId($defs{$devName});
|
||||
return "no IO device identified" if(length($id) != 6 );
|
||||
}
|
||||
my $id; # define id of IO device for later usage
|
||||
|
||||
|
||||
#convert 'old' commands to current methodes like regSet and regBulk...
|
||||
# Unify the interface
|
||||
if( $cmd eq "sign"){
|
||||
splice @a,1,0,"regSet";# make hash,regSet,reg,value
|
||||
}
|
||||
elsif($cmd eq "unpair"){
|
||||
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 ($roleD){# 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]);
|
||||
$chn = sprintf("%02X",$bn)
|
||||
}
|
||||
else{
|
||||
return "to many parameter. Try set $a[0] text $a[2] $a[3]" if($a[4]);
|
||||
}
|
||||
my $s = 54;
|
||||
$l1 =~ s/\\_/ /g;
|
||||
$l1 = substr($l1."\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 0, 12);
|
||||
$l1 =~ s/(.)/sprintf(" %02X:%02X",$s++,ord($1))/ge;
|
||||
|
||||
$s = 70;
|
||||
$l2 =~ s/\\_/ /g;
|
||||
$l2 = substr($l2."\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 0, 12);
|
||||
$l2 =~ s/(.)/sprintf(" %02X:%02X",$s++,ord($1))/ge;
|
||||
@a = ($a[0],"regBulk","RegL_01.",split(" ",$l1.$l2));
|
||||
}
|
||||
elsif($cmd =~ m/^(displayMode|displayTemp|displayTempUnit|controlMode)/) {
|
||||
if ($md =~ m/^(HM-CC-TC|ROTO_ZEL-STG-RM-FWT)/){#controlMode different for RT
|
||||
splice @a,1,3, ("regSet",$a[1],$a[2]);
|
||||
push @postCmds,"++803F$id${dst}0204".sprintf("%02X",CUL_HM_secSince2000());
|
||||
}
|
||||
}
|
||||
elsif($cmd eq "partyMode") { ################################################
|
||||
my ($eH,$eM,$days,$prep) = ("","","","");
|
||||
if ($a[2] =~ m/^(prep|exec)$/){
|
||||
$prep = $a[2];
|
||||
splice @a,2,1;#remove prep
|
||||
}
|
||||
$days = $a[3];
|
||||
($eH,$eM) = split(':',$a[2]);
|
||||
|
||||
my ($s,$m,$h) = localtime();
|
||||
return "$eH:$eM passed at $h:$m. Please enter time in the feature"
|
||||
if ($days == 0 && ($h+($m/60))>=($eH+($eM/60)) );
|
||||
return "$eM illegal - use 00 or 30 minutes only" if ($eM !~ m/^(00|30)$/);
|
||||
return "$eH illegal - hour must be between 0 and 23" if ($eH < 0 || $eH > 23);
|
||||
return "$days illegal - days must be between 0 and 200" if ($days < 0 || $days > 200);
|
||||
$eH += 128 if ($eM eq "30");
|
||||
|
||||
my $cHash = CUL_HM_id2Hash($dst."02");
|
||||
$cHash->{helper}{partyReg} = sprintf("61%02X62%02X0000",$eH,$days);
|
||||
$cHash->{helper}{partyReg} =~ s/(..)(..)/ $1:$2/g;
|
||||
if ($cHash->{READINGS}{"RegL_06."}){#remove old settings
|
||||
$cHash->{READINGS}{"RegL_06."}{VAL} =~ s/ 61:.*//;
|
||||
$cHash->{READINGS}{"RegL_06."}{VAL} =~ s/ 00:00//;
|
||||
$cHash->{READINGS}{"RegL_06."}{VAL} .= $cHash->{helper}{partyReg};
|
||||
}
|
||||
else{
|
||||
$cHash->{READINGS}{"RegL_06."}{VAL} = $cHash->{helper}{partyReg};
|
||||
}
|
||||
CUL_HM_pushConfig($hash,$id,$dst,2,"000000","00",6,
|
||||
sprintf("61%02X62%02X",$eH,$days),$prep);
|
||||
splice @a,1,3, ("regSet","controlMode","party");
|
||||
splice @a,2,0, ($prep) if ($prep);
|
||||
push @postCmds,"++803F$id${dst}0204".sprintf("%02X",CUL_HM_secSince2000());
|
||||
}
|
||||
|
||||
$cmd = $a[1];# get converted command
|
||||
|
||||
#if chn cmd is executed on device but refers to a channel?
|
||||
my $chnHash = (!$roleC && $modules{CUL_HM}{defptr}{$dst."01"})?
|
||||
$modules{CUL_HM}{defptr}{$dst."01"}:$hash;
|
||||
my $devHash = CUL_HM_getDeviceHash($hash);
|
||||
my $state = "set_".join(" ", @a[1..(int(@a)-1)]);
|
||||
return "device on readonly. $cmd disabled"
|
||||
if($activeCmds{$cmd} && CUL_HM_getAttrInt($name,"readOnly") );
|
||||
|
||||
if ($cmd eq "raw") { #####################################################
|
||||
return "Usage: set $a[0] $cmd data [data ...]" if(@a < 3);
|
||||
$state = "";
|
||||
my $msg = $a[2];
|
||||
foreach my $sub (@a[3..$#a]) {
|
||||
last if ($sub !~ m/^[A-F0-9]*$/);
|
||||
$msg .= $sub;
|
||||
}
|
||||
CUL_HM_PushCmdStack($hash, $msg);
|
||||
}
|
||||
elsif($cmd eq "clear") { ####################################################
|
||||
###------------------- commands requiring no IO action -------------------###
|
||||
my $nonIOcmd = 1;
|
||||
if( $cmd eq "clear") { ####################################################
|
||||
my (undef,undef,$sectIn) = @a;
|
||||
my @sectL;
|
||||
if ($sectIn eq "all") {
|
||||
@ -4318,18 +4214,8 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
|
||||
foreach (grep /^sabotageAttack/,keys %{$hash->{READINGS}});
|
||||
}
|
||||
}
|
||||
$state = "";
|
||||
}
|
||||
elsif($cmd eq "reset") { ####################################################
|
||||
CUL_HM_PushCmdStack($hash,"++".$flag."11".$id.$dst."0400");
|
||||
}
|
||||
elsif($cmd eq "burstXmit") { ################################################
|
||||
$state = "";
|
||||
$hash->{helper}{prt}{brstWu}=1;# start burst wakeup
|
||||
CUL_HM_SndCmd($hash,"++B112$id$dst");
|
||||
}
|
||||
elsif($cmd eq "defIgnUnknown") { ############################################
|
||||
$state = "";
|
||||
foreach (map {substr($_,8)}
|
||||
grep /^unknown_......$/,
|
||||
keys %{$hash->{READINGS}}){
|
||||
@ -4341,7 +4227,6 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
|
||||
}
|
||||
}
|
||||
elsif($cmd eq "deviceRename") { #############################################
|
||||
$state = "";
|
||||
my $newName = $a[2];
|
||||
my @chLst = ("device");# entry 00 is unsed
|
||||
if ($roleV){
|
||||
@ -4371,6 +4256,204 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
|
||||
}
|
||||
CommandRename(undef,$name.' '.$newName);#and the device itself
|
||||
}
|
||||
elsif($cmd eq "tempListTmpl") { #############################################
|
||||
my $action = "verify";#defaults
|
||||
my ($template,$fn);
|
||||
for my $ax ($a[2],$a[3]){
|
||||
next if (!$ax);
|
||||
if ($ax =~ m/^(verify|restore)$/){
|
||||
$action = $ax;
|
||||
}
|
||||
else{
|
||||
$template = $ax;
|
||||
}
|
||||
}
|
||||
($fn,$template) = split(":",($template?$template
|
||||
:AttrVal($name,"tempListTmpl",$name)));
|
||||
if ($modules{HMinfo}){
|
||||
if (!$template){ $template = HMinfo_tempListDefFn() .":$fn" ;}
|
||||
else{ $template = HMinfo_tempListDefFn($fn).":$template";}
|
||||
}
|
||||
else{
|
||||
if (!$template){ $template = "./tempList.cfg:$fn";}
|
||||
else{ $template = "$fn:$template" ;}
|
||||
}
|
||||
my $ret = CUL_HM_tempListTmpl($name,$action,$template);
|
||||
$ret = "verifed with no faults" if (!$ret && $action eq "verify");
|
||||
return $ret;
|
||||
}
|
||||
elsif($cmd eq "tempTmplSet") { ##############################################
|
||||
return "template missing" if (!defined $a[2]);
|
||||
CommandAttr(undef, "$name tempListTmpl $a[2]");
|
||||
|
||||
my ($fn,$template) = split(":",AttrVal($name,"tempListTmpl",$name));
|
||||
if ($modules{HMinfo}){
|
||||
if (!$template){ $template = HMinfo_tempListDefFn() .":$fn" ;}
|
||||
else{ $template = HMinfo_tempListDefFn($fn).":$template";}
|
||||
}
|
||||
else{
|
||||
if (!$template){ $template = "./tempList.cfg:$fn";}
|
||||
else{ $template = "$fn:$template" ;}
|
||||
}
|
||||
CUL_HM_tempListTmpl($name,"restore",$template);
|
||||
}
|
||||
elsif($cmd eq "templateDel") { ##############################################
|
||||
return "template missing" if (!defined $a[2]);
|
||||
my ($p,$t) = split(">",$a[2]);
|
||||
HMinfo_templateDel($name,$t,$p) if (eval "defined(&HMinfo_templateDel)");
|
||||
return;
|
||||
}
|
||||
elsif($cmd eq "virtual") { ##################################################
|
||||
my (undef,undef,$maxBtnNo) = @a;
|
||||
return "please give a number between 1 and 50"
|
||||
if ($maxBtnNo < 1 ||$maxBtnNo > 50);# arbitrary - 255 should be max
|
||||
return $name." already defines as ".$attr{$name}{subType}
|
||||
if ($attr{$name}{subType} && $attr{$name}{subType} ne "virtual");
|
||||
$attr{$name}{subType} = "virtual";
|
||||
$attr{$name}{model} = "virtual_".$maxBtnNo
|
||||
if (!$attr{$name}{model} ||$attr{$name}{model} =~ m/^virtual_/);
|
||||
my $devId = $hash->{DEF};
|
||||
for (my $btn=1;$btn <= $maxBtnNo;$btn++){
|
||||
my $chnName = $name."_Btn".$btn;
|
||||
my $chnId = $devId.sprintf("%02X",$btn);
|
||||
CommandDefine(undef,"$chnName CUL_HM $chnId")
|
||||
if (!$modules{CUL_HM}{defptr}{$chnId});
|
||||
}
|
||||
foreach my $channel (keys %{$hash}){# remove higher numbers
|
||||
my $chNo;
|
||||
$chNo = $1 if($channel =~ m/^channel_(.*)/);
|
||||
next if (!defined($chNo));
|
||||
CommandDelete(undef,$hash->{$channel})
|
||||
if (hex($chNo) > $maxBtnNo);
|
||||
}
|
||||
CUL_HM_queueUpdtCfg($name);
|
||||
CUL_HM_UpdtCentral($name) if ($md eq "CCU_FHEM");
|
||||
}
|
||||
elsif($cmd eq "update") { ###################################################
|
||||
if ($md eq "ActionDetector"){
|
||||
CUL_HM_ActCheck("ActionDetector");
|
||||
}
|
||||
else{
|
||||
CUL_HM_UpdtCentral($name);
|
||||
}
|
||||
}
|
||||
else{ #command which requires IO#########################
|
||||
$id = CUL_HM_IoId($defs{$devName});
|
||||
if(length($id) != 6 && $hash->{DEF} ne "000000" ){# have to try to find an IO $devName
|
||||
CUL_HM_assignIO($defs{$devName});
|
||||
$id = CUL_HM_IoId($defs{$devName});
|
||||
}
|
||||
return "no IO device identified" if(length($id) != 6 && $st ne 'virtual');
|
||||
$nonIOcmd = 0;
|
||||
}
|
||||
return ("",1) if($nonIOcmd);# we are done already
|
||||
|
||||
#convert 'old' commands to current methods like regSet and regBulk...
|
||||
# Unify the interface
|
||||
if( $cmd eq "sign"){ ######################################################
|
||||
splice @a,1,0,"regSet";# make hash,regSet,reg,value
|
||||
}
|
||||
elsif($cmd eq "unpair"){ ####################################################
|
||||
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 ($roleD){# 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]);
|
||||
$chn = sprintf("%02X",$bn)
|
||||
}
|
||||
else{
|
||||
return "to many parameter. Try set $a[0] text $a[2] $a[3]" if($a[4]);
|
||||
}
|
||||
my $s = 54;
|
||||
$l1 =~ s/\\_/ /g;
|
||||
$l1 = substr($l1."\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 0, 12);
|
||||
$l1 =~ s/(.)/sprintf(" %02X:%02X",$s++,ord($1))/ge;
|
||||
|
||||
$s = 70;
|
||||
$l2 =~ s/\\_/ /g;
|
||||
$l2 = substr($l2."\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 0, 12);
|
||||
$l2 =~ s/(.)/sprintf(" %02X:%02X",$s++,ord($1))/ge;
|
||||
@a = ($a[0],"regBulk","RegL_01.",split(" ",$l1.$l2));
|
||||
}
|
||||
elsif($cmd =~ m/^(displayMode|displayTemp|displayTempUnit|controlMode)/) { ##
|
||||
if ($md =~ m/^(HM-CC-TC|ROTO_ZEL-STG-RM-FWT)/){#controlMode different for RT
|
||||
splice @a,1,3, ("regSet",$a[1],$a[2]);
|
||||
push @postCmds,"++803F$id${dst}0204".sprintf("%02X",CUL_HM_secSince2000());
|
||||
}
|
||||
}
|
||||
elsif($cmd eq "partyMode") { ################################################
|
||||
my ($eH,$eM,$days,$prep) = ("","","","");
|
||||
if ($a[2] =~ m/^(prep|exec)$/){
|
||||
$prep = $a[2];
|
||||
splice @a,2,1;#remove prep
|
||||
}
|
||||
$days = $a[3];
|
||||
($eH,$eM) = split(':',$a[2]);
|
||||
|
||||
my ($s,$m,$h) = localtime();
|
||||
return "$eH:$eM passed at $h:$m. Please enter time in the feature"
|
||||
if ($days == 0 && ($h+($m/60))>=($eH+($eM/60)) );
|
||||
return "$eM illegal - use 00 or 30 minutes only" if ($eM !~ m/^(00|30)$/);
|
||||
return "$eH illegal - hour must be between 0 and 23" if ($eH < 0 || $eH > 23);
|
||||
return "$days illegal - days must be between 0 and 200" if ($days < 0 || $days > 200);
|
||||
$eH += 128 if ($eM eq "30");
|
||||
|
||||
my $cHash = CUL_HM_id2Hash($dst."02");
|
||||
$cHash->{helper}{partyReg} = sprintf("61%02X62%02X0000",$eH,$days);
|
||||
$cHash->{helper}{partyReg} =~ s/(..)(..)/ $1:$2/g;
|
||||
if ($cHash->{READINGS}{"RegL_06."}){#remove old settings
|
||||
$cHash->{READINGS}{"RegL_06."}{VAL} =~ s/ 61:.*//;
|
||||
$cHash->{READINGS}{"RegL_06."}{VAL} =~ s/ 00:00//;
|
||||
$cHash->{READINGS}{"RegL_06."}{VAL} .= $cHash->{helper}{partyReg};
|
||||
}
|
||||
else{
|
||||
$cHash->{READINGS}{"RegL_06."}{VAL} = $cHash->{helper}{partyReg};
|
||||
}
|
||||
CUL_HM_pushConfig($hash,$id,$dst,2,"000000","00",6,
|
||||
sprintf("61%02X62%02X",$eH,$days),$prep);
|
||||
splice @a,1,3, ("regSet","controlMode","party");
|
||||
splice @a,2,0, ($prep) if ($prep);
|
||||
push @postCmds,"++803F$id${dst}0204".sprintf("%02X",CUL_HM_secSince2000());
|
||||
}
|
||||
|
||||
$cmd = $a[1];# get converted command
|
||||
|
||||
#if chn cmd is executed on device but refers to a channel?
|
||||
my $chnHash = (!$roleC && $modules{CUL_HM}{defptr}{$dst."01"})?
|
||||
$modules{CUL_HM}{defptr}{$dst."01"}:$hash;
|
||||
my $devHash = CUL_HM_getDeviceHash($hash);
|
||||
my $state = "set_".join(" ", @a[1..(int(@a)-1)]);
|
||||
return "device on readonly. $cmd disabled"
|
||||
if($activeCmds{$cmd} && CUL_HM_getAttrInt($name,"readOnly") );
|
||||
|
||||
if ($cmd eq "raw") { #####################################################
|
||||
return "Usage: set $a[0] $cmd data [data ...]" if(@a < 3);
|
||||
$state = "";
|
||||
my $msg = $a[2];
|
||||
foreach my $sub (@a[3..$#a]) {
|
||||
last if ($sub !~ m/^[A-F0-9]*$/);
|
||||
$msg .= $sub;
|
||||
}
|
||||
CUL_HM_PushCmdStack($hash, $msg);
|
||||
}
|
||||
elsif($cmd eq "reset") { ####################################################
|
||||
CUL_HM_PushCmdStack($hash,"++".$flag."11".$id.$dst."0400");
|
||||
}
|
||||
elsif($cmd eq "burstXmit") { ################################################
|
||||
$state = "";
|
||||
$hash->{helper}{prt}{brstWu}=1;# start burst wakeup
|
||||
CUL_HM_SndCmd($hash,"++B112$id$dst");
|
||||
}
|
||||
|
||||
elsif($cmd eq "statusRequest") { ############################################
|
||||
my @chnIdList = CUL_HM_getAssChnIds($name);
|
||||
@ -5362,19 +5445,19 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
|
||||
CUL_HM_PushCmdStack($hash,'++'.$flag."11$id$dst"."8604$temp");
|
||||
|
||||
my $idTch = ($md =~ m/^HM-CC-RT-DN/ ? $dst."05" : $dst."02");
|
||||
my @teamList = ( split(",",AttrVal(CUL_HM_id2Name($dst."05"),"peerIDs","")) # peers of RT team
|
||||
,split(",",AttrVal(CUL_HM_id2Name($dst."02"),"peerIDs","")) # peers RT/TC team
|
||||
,CUL_HM_name2Id($name) # myself
|
||||
my @teamList = ( CUL_HM_name2Id($name) # myself
|
||||
);
|
||||
foreach my $tId (@teamList){
|
||||
push @teamList,( split(",",AttrVal(CUL_HM_id2Name($dst."05"),"peerIDs","")) # peers of RT team
|
||||
,split(",",AttrVal(CUL_HM_id2Name($dst."02"),"peerIDs","")) # peers RT/TC team
|
||||
) if($md =~ m/^HM-CC-RT-DN/) ;
|
||||
foreach my $tId (grep !/00000000/,@teamList){
|
||||
$tId = substr($tId,0,6);
|
||||
my $teamD = CUL_HM_id2Name($tId);
|
||||
my $teamCh = ("HM-CC-RT-DN" eq AttrVal($teamD,"model","")) ? "04" #what is the controls channel of the peer?
|
||||
: "02";
|
||||
my $teamCh = (AttrVal($teamD,"model","") =~ m/HM-CC-RT-DN/) ? "04" #what is the controls channel of the peer?
|
||||
: "02";
|
||||
my $teamC = CUL_HM_id2Name($tId.$teamCh);
|
||||
|
||||
next if (!defined $defs{$teamC} );
|
||||
|
||||
next if (!defined $defs{$teamC} );
|
||||
CUL_HM_PushCmdStack($defs{$teamD},'++'.$flag."11$id$tId"."86$teamCh$temp");
|
||||
CUL_HM_UpdtReadSingle($defs{$teamC},"state",$state,1);
|
||||
if ( $tId ne $dst
|
||||
@ -5455,56 +5538,6 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
|
||||
}
|
||||
CUL_HM_pushConfig($hash, $id, $dst, $prgChn,0,0,$list, $data,$prep);
|
||||
}
|
||||
elsif($cmd eq "tempListTmpl") { #############################################
|
||||
$state= "";
|
||||
my $action = "verify";#defaults
|
||||
my ($template,$fn);
|
||||
for my $ax ($a[2],$a[3]){
|
||||
next if (!$ax);
|
||||
if ($ax =~ m/^(verify|restore)$/){
|
||||
$action = $ax;
|
||||
}
|
||||
else{
|
||||
$template = $ax;
|
||||
}
|
||||
}
|
||||
($fn,$template) = split(":",($template?$template
|
||||
:AttrVal($name,"tempListTmpl",$name)));
|
||||
if ($modules{HMinfo}){
|
||||
if (!$template){ $template = HMinfo_tempListDefFn() .":$fn" ;}
|
||||
else{ $template = HMinfo_tempListDefFn($fn).":$template";}
|
||||
}
|
||||
else{
|
||||
if (!$template){ $template = "./tempList.cfg:$fn";}
|
||||
else{ $template = "$fn:$template" ;}
|
||||
}
|
||||
my $ret = CUL_HM_tempListTmpl($name,$action,$template);
|
||||
$ret = "verifed with no faults" if (!$ret && $action eq "verify");
|
||||
return $ret;
|
||||
}
|
||||
elsif($cmd eq "tempTmplSet") { ##############################################
|
||||
$state= "";
|
||||
return "template missing" if (!defined $a[2]);
|
||||
CommandAttr(undef, "$name tempListTmpl $a[2]");
|
||||
|
||||
my ($fn,$template) = split(":",AttrVal($name,"tempListTmpl",$name));
|
||||
if ($modules{HMinfo}){
|
||||
if (!$template){ $template = HMinfo_tempListDefFn() .":$fn" ;}
|
||||
else{ $template = HMinfo_tempListDefFn($fn).":$template";}
|
||||
}
|
||||
else{
|
||||
if (!$template){ $template = "./tempList.cfg:$fn";}
|
||||
else{ $template = "$fn:$template" ;}
|
||||
}
|
||||
CUL_HM_tempListTmpl($name,"restore",$template);
|
||||
}
|
||||
elsif($cmd eq "templateDel") { ##############################################
|
||||
$state= "";
|
||||
return "template missing" if (!defined $a[2]);
|
||||
my ($p,$t) = split(">",$a[2]);
|
||||
HMinfo_templateDel($name,$t,$p) if (eval "defined(&HMinfo_templateDel)");
|
||||
return;
|
||||
}
|
||||
elsif($cmd eq "sysTime") { ##################################################
|
||||
$state = "";
|
||||
my $s2000 = sprintf("%02X", CUL_HM_secSince2000());
|
||||
@ -5654,43 +5687,7 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
|
||||
}
|
||||
}
|
||||
|
||||
elsif($cmd eq "virtual") { ##################################################
|
||||
$state = "";
|
||||
my (undef,undef,$maxBtnNo) = @a;
|
||||
return "please give a number between 1 and 50"
|
||||
if ($maxBtnNo < 1 ||$maxBtnNo > 50);# arbitrary - 255 should be max
|
||||
return $name." already defines as ".$attr{$name}{subType}
|
||||
if ($attr{$name}{subType} && $attr{$name}{subType} ne "virtual");
|
||||
$attr{$name}{subType} = "virtual";
|
||||
$attr{$name}{model} = "virtual_".$maxBtnNo
|
||||
if (!$attr{$name}{model} ||$attr{$name}{model} =~ m/^virtual_/);
|
||||
my $devId = $hash->{DEF};
|
||||
for (my $btn=1;$btn <= $maxBtnNo;$btn++){
|
||||
my $chnName = $name."_Btn".$btn;
|
||||
my $chnId = $devId.sprintf("%02X",$btn);
|
||||
CommandDefine(undef,"$chnName CUL_HM $chnId")
|
||||
if (!$modules{CUL_HM}{defptr}{$chnId});
|
||||
}
|
||||
foreach my $channel (keys %{$hash}){# remove higher numbers
|
||||
my $chNo;
|
||||
$chNo = $1 if($channel =~ m/^channel_(.*)/);
|
||||
next if (!defined($chNo));
|
||||
CommandDelete(undef,$hash->{$channel})
|
||||
if (hex($chNo) > $maxBtnNo);
|
||||
}
|
||||
CUL_HM_UpdtCentral($name) if ($md eq "CCU_FHEM");
|
||||
}
|
||||
elsif($cmd eq "update") { ###################################################
|
||||
$state = "";
|
||||
if ($md eq "ActionDetector"){
|
||||
CUL_HM_ActCheck("ActionDetector");
|
||||
}
|
||||
else{
|
||||
CUL_HM_UpdtCentral($name);
|
||||
}
|
||||
}
|
||||
|
||||
elsif($cmd =~ m/^(press|event)(S|L)/) { ######################################
|
||||
elsif($cmd =~ m/^(press|event)(S|L)/) { #####################################
|
||||
#press =>"-peer- [-repCount(long only)-] [-repDelay-] ..."
|
||||
#event =>"-peer- -cond- [-repCount(long only)-] [-repDelay-] ..."
|
||||
my ($trig,$type,$peer) = ($1,$2,$a[2]);
|
||||
@ -6185,7 +6182,7 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
|
||||
}
|
||||
elsif($cmd eq "hmPairForSec") { #############################################
|
||||
$state = "";
|
||||
my $arg = $a[2]?$a[2]:"";
|
||||
my $arg = $a[2] ? $a[2] : "";
|
||||
$arg = 60 if( $arg !~ m/^\d+$/);
|
||||
CUL_HM_RemoveHMPair("hmPairForSec:$name");
|
||||
$hash->{hmPair} = 1;
|
||||
@ -6274,7 +6271,7 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
|
||||
|
||||
my $rxType = CUL_HM_getRxType($devHash);
|
||||
Log3 $name,3,"CUL_HM set $name $act";
|
||||
if($rxType & 0x01){#allways
|
||||
if($rxType & 0x01){#always
|
||||
CUL_HM_ProcessCmdStack($devHash);
|
||||
}
|
||||
elsif($devHash->{cmdStack} &&
|
||||
@ -6295,7 +6292,7 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
|
||||
CUL_HM_SndCmd($devHash,"++B112$id$dst");
|
||||
}
|
||||
}
|
||||
return ("",1);# no not generate trigger outof command
|
||||
return ("",1);# no not generate trigger out of command
|
||||
}
|
||||
|
||||
#+++++++++++++++++ set/get support subroutines+++++++++++++++++++++++++++++++++
|
||||
@ -9474,7 +9471,7 @@ sub CUL_HM_reglUsed($) {# provide data for HMinfo
|
||||
return @lsNo;
|
||||
}
|
||||
|
||||
sub CUL_HM_complConfigTest($){# Q - check register consistancy some time later
|
||||
sub CUL_HM_complConfigTest($){# Q - check register consistency some time later
|
||||
my $name = shift;
|
||||
return if ($modules{CUL_HM}{helper}{hmManualOper});#no autoaction when manual
|
||||
push @{$modules{CUL_HM}{helper}{confCheckArr}},$name;
|
||||
@ -9483,12 +9480,12 @@ sub CUL_HM_complConfigTest($){# Q - check register consistancy some time later
|
||||
InternalTimer(gettimeofday()+ 1800,"CUL_HM_complConfigTO","CUL_HM_complConfigTO", 0);
|
||||
}
|
||||
}
|
||||
sub CUL_HM_complConfigTestRm($){# Q - check register consistancy some time later
|
||||
sub CUL_HM_complConfigTestRm($){# Q - check register consistency some time later
|
||||
my $name = shift;
|
||||
my $mQ = $modules{CUL_HM}{helper}{confCheckArr};
|
||||
@{$mQ} = grep !/^$name$/,@{$mQ};
|
||||
}
|
||||
sub CUL_HM_complConfigTO($) {# now perform consistancy check of register
|
||||
sub CUL_HM_complConfigTO($) {# now perform consistency check of register
|
||||
my @arr = @{$modules{CUL_HM}{helper}{confCheckArr}};
|
||||
@{$modules{CUL_HM}{helper}{confCheckArr}} = ();
|
||||
CUL_HM_complConfig($_) foreach (CUL_HM_noDup(@arr));
|
||||
|
Loading…
x
Reference in New Issue
Block a user