2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-21 14:04:15 +00:00

peer RT team

git-svn-id: https://svn.fhem.de/fhem/trunk@5558 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
martinp876 2014-04-18 17:33:55 +00:00
parent a60332b0ce
commit 7098304185

View File

@ -3903,19 +3903,21 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
return "please enter peer" if(!$peerId); return "please enter peer" if(!$peerId);
$peerId .= "01" if( length($peerId)==6); $peerId .= "01" if( length($peerId)==6);
my ($peerChn,$peerBtn,$peerHash,$myBtn,$cmdB); my @pCh;
my ($peerHash,$dSet,$cmdB);
my $peerDst = substr($peerId,0,6); my $peerDst = substr($peerId,0,6);
my $pmd = AttrVal(CUL_HM_id2Name($peerDst), "model" , ""); my $pmd = AttrVal(CUL_HM_id2Name($peerDst), "model" , "");
if ($md =~ m/HM-CC-RT-DN/ && $chn eq "05" ){# rt team peers cross from 05 to 04 if ($md =~ m/HM-CC-RT-DN/ && $chn eq "05" ){# rt team peers cross from 05 to 04
$myBtn = $peerBtn = "05"; @pCh = (undef,"04","05");
$peerChn = "05"; $chn = "04";
$single = "dual";
$dSet = 1;#Dual set - set 2 channels for "remote"
} }
else{ # normal devices else{ # normal devices
$peerBtn = $peerChn = substr($peerId,6,2); # chan peeredd to remote $pCh[1] = $pCh[2] = substr($peerId,6,2);
$myBtn = $chn;
} }
$peerHash = $modules{CUL_HM}{defptr}{$peerDst.$peerChn}if ($modules{CUL_HM}{defptr}{$peerDst.$peerChn}); $peerHash = $modules{CUL_HM}{defptr}{$peerDst.$pCh[1]}if ($modules{CUL_HM}{defptr}{$peerDst.$pCh[1]});
$peerHash = $modules{CUL_HM}{defptr}{$peerDst} if (!$peerHash); $peerHash = $modules{CUL_HM}{defptr}{$peerDst} if (!$peerHash);
return "$peerN not a CUL_HM device" if( ($target ne "remote") return "$peerN not a CUL_HM device" if( ($target ne "remote")
&& (!$peerHash || $peerHash->{TYPE} ne "CUL_HM") && (!$peerHash || $peerHash->{TYPE} ne "CUL_HM")
@ -3924,8 +3926,8 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
return "$set must be set or unset" if($set !~ m/^(set|unset)$/); return "$set must be set or unset" if($set !~ m/^(set|unset)$/);
return "$target must be [actor|remote|both]" if($target !~ m/^(actor|remote|both)$/); return "$target must be [actor|remote|both]" if($target !~ m/^(actor|remote|both)$/);
return "use - single [set|unset] actor - for smoke detector" if( $st eq "smokeDetector" && ($single ne "single" || $target ne "actor")); return "use - single [set|unset] actor - for smoke detector" if( $st eq "smokeDetector" && ($single ne "single" || $target ne "actor"));
return "use - single - for ".$st if(($st =~ m/(threeStateSensor|thermostat|motionDetector)/) && ($single ne "single")); return "use - single - for ".$st if(($st =~ m/(threeStateSensor|motionDetector)/) && ($single ne "single"));
return "TC WindowRec only peers to channel 01 single" if( $pmd =~ m/(HM-CC-TC|ROTO_ZEL-STG-RM-FWT)/ && $peerChn eq "03" && $myBtn ne "01" && $set eq "set"); return "TC WindowRec only peers to channel 01 single" if( $pmd =~ m/(HM-CC-TC|ROTO_ZEL-STG-RM-FWT)/ && $pCh[1] eq "03" && $chn ne "01" && $set eq "set");
my $pSt = CUL_HM_Get($peerHash,$peerHash->{NAME},"param","subType"); my $pSt = CUL_HM_Get($peerHash,$peerHash->{NAME},"param","subType");
@ -3933,25 +3935,28 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
if ($set eq "unset"){$set = 0;$cmdB ="02";} if ($set eq "unset"){$set = 0;$cmdB ="02";}
else {$set = 1;$cmdB ="01";} else {$set = 1;$cmdB ="01";}
my ($b1,$b2,$nrCh2Pair); my (@b,$nrCh2Pair);
$b1 = ($roleC) ? hex($myBtn) : (($single eq "single")?$bNo : ($bNo*2 - 1)); $b[1] = ($roleC) ? hex($chn) : (($single eq "single")?$bNo : ($bNo*2 - 1));
if ($single eq "single"){ if ($single eq "single"){
$b2 = $b1; $b[2] = $b[1];
$b1 = 0 if ($st eq "smokeDetector" ||$pSt eq "smokeDetector"); $b[1] = 0 if ($st eq "smokeDetector" ||$pSt eq "smokeDetector");
$nrCh2Pair = 1; $nrCh2Pair = 1;
} }
elsif($single eq "dual"){ elsif($single eq "dual"){
$single = 0; $single = 0;
$b2 = $b1 + 1; $b[2] = $b[1] + 1;
$nrCh2Pair = 2; $nrCh2Pair = 2;
} }
else{#($single eq "reverse") else{#($single eq "reverse")
$single = 0; $single = 0;
$b2 = $b1++; $b[2] = $b[1]++;
$nrCh2Pair = 2; $nrCh2Pair = 2;
} }
$target = "both" if ($st eq "virtual" && $pSt eq "smokeDetector"); if ( $pSt eq "smokeDetector"){
$b[1] = $b[2];
$target = "both" if ($st eq "virtual");
}
# First the remote (one loop for on, one for off) # First the remote (one loop for on, one for off)
if (!$target || $target =~ m/^(remote|both)$/){ if (!$target || $target =~ m/^(remote|both)$/){
@ -3963,19 +3968,17 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
:"0100"; :"0100";
} }
for(my $i = 1; $i <= $nrCh2Pair; $i++) { for(my $i = 1; $i <= $nrCh2Pair; $i++) {
my $b = ($i==1 ? $b1 : $b2);
$b = $b2 if ($pSt eq "smokeDetector");
if ($st eq "virtual"){ if ($st eq "virtual"){
my $btnName = CUL_HM_id2Name($dst.sprintf("%02X",$b)); my $btnName = CUL_HM_id2Name($dst.sprintf("%02X",$b[$i]));
return "button ".$b." not defined for virtual remote ".$name return "button ".$b[$i]." not defined for virtual remote ".$name
if (!defined $attr{$btnName}); if (!defined $attr{$btnName});
CUL_HM_ID2PeerList ($btnName,$peerDst.$peerBtn,$set); #upd. peerlist CUL_HM_ID2PeerList ($btnName,$peerDst.$pCh[$i],$set); #upd. peerlist
} }
else{ else{
my $bStr = sprintf("%02X",$b); my $bStr = sprintf("%02X",$b[$i]);
CUL_HM_PushCmdStack($hash, CUL_HM_PushCmdStack($hash,
"++".$flag."01${id}${dst}${bStr}$cmdB${peerDst}${peerBtn}00"); "++".$flag."01${id}${dst}${bStr}$cmdB${peerDst}$pCh[$i]00");
CUL_HM_pushConfig($hash,$id, $dst,$b,$peerDst,hex($peerBtn),4,$burst) CUL_HM_pushConfig($hash,$id, $dst,$b[$i],$peerDst,hex($pCh[$i]),4,$burst)
if($burst && $cmdB eq "01"); # only if set if($burst && $cmdB eq "01"); # only if set
CUL_HM_qAutoRead($name,3); CUL_HM_qAutoRead($name,3);
} }
@ -4002,14 +4005,19 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
if (!$target || $target =~ m/^(actor|both)$/ ){ if (!$target || $target =~ m/^(actor|both)$/ ){
if ($modules{CUL_HM}{defptr}{$peerDst}){# is defined or ID only? if ($modules{CUL_HM}{defptr}{$peerDst}){# is defined or ID only?
if ($pSt eq "virtual"){ if ($pSt eq "virtual"){
CUL_HM_ID2PeerList ($peerN,$dst.sprintf("%02X",$b2),$set); CUL_HM_ID2PeerList ($peerN,$dst.sprintf("%02X",$b[2]),$set);
CUL_HM_ID2PeerList ($peerN,$dst.sprintf("%02X",$b1),$set) CUL_HM_ID2PeerList ($peerN,$dst.sprintf("%02X",$b[1]),$set)
if ($b1 & !$single); if ($b[1] & !$single);
} }
else{ else{
my $peerFlag = CUL_HM_getFlag($peerHash); my $peerFlag = CUL_HM_getFlag($peerHash);
CUL_HM_PushCmdStack($peerHash, sprintf("++%s01%s%s%s%s%s%02X%02X", if ($dSet){
$peerFlag,$id,$peerDst,$peerChn,$cmdB,$dst,$b2,$b1 )); CUL_HM_PushCmdStack($peerHash, sprintf("++%s01%s%s%s%s%s%02X00",$peerFlag,$id,$peerDst,$pCh[1],$cmdB,$dst,$b[1]));
CUL_HM_PushCmdStack($peerHash, sprintf("++%s01%s%s%s%s%s%02X00",$peerFlag,$id,$peerDst,$pCh[2],$cmdB,$dst,$b[2] ));
}
else{
CUL_HM_PushCmdStack($peerHash, sprintf("++%s01%s%s%s%s%s%02X%02X",$peerFlag,$id,$peerDst,$pCh[1],$cmdB,$dst,$b[2],$b[1] ));
}
if(CUL_HM_getRxType($peerHash) & 0x80){ if(CUL_HM_getRxType($peerHash) & 0x80){
my $pDevHash = CUL_HM_id2Hash($peerDst);#put on device my $pDevHash = CUL_HM_id2Hash($peerDst);#put on device
CUL_HM_pushConfig($pDevHash,$id,$peerDst,0,0,0,0,"0101");#set burstRx CUL_HM_pushConfig($pDevHash,$id,$peerDst,0,0,0,0,"0101");#set burstRx
@ -4022,7 +4030,7 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
return ("",1) if ($target && $target eq "remote");#Nothing for actor return ("",1) if ($target && $target eq "remote");#Nothing for actor
} }
else{ else{
return "$cmd not impelmented - contact sysop"; return "$cmd not implemented - contact sysop";
} }
CUL_HM_UpdtReadSingle($hash,"state",$state,1) if($state); CUL_HM_UpdtReadSingle($hash,"state",$state,1) if($state);