2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-01 01:09:47 +00:00

peer-selective winOpenTemp for RT

git-svn-id: https://svn.fhem.de/fhem/trunk@4255 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
martinp876 2013-11-20 19:22:44 +00:00
parent c214e97672
commit 06c5656764
2 changed files with 33 additions and 26 deletions

View File

@ -1727,14 +1727,17 @@ sub CUL_HM_parseCommon(@){#####################################################
if ($reqPeer){ if ($reqPeer){
my $flag = CUL_HM_getFlag($shash); my $flag = CUL_HM_getFlag($shash);
my $id = CUL_HM_IOid($shash); my $id = CUL_HM_IOid($shash);
my $listNo = "0".$chnhash->{helper}{getCfgListNo};
my @peerID = split(",",($attr{$chnName}{peerIDs}? my @peerID = split(",",($attr{$chnName}{peerIDs}?
$attr{$chnName}{peerIDs}:"")); $attr{$chnName}{peerIDs}:""));
foreach my $peer (grep (!/00000000/,@peerID)){ foreach my $l (split ",",$chnhash->{helper}{getCfgListNo}){
$peer .="01" if (length($peer) == 6); # add the default next if (!$l);
if ($peer &&($peer eq $reqPeer || $reqPeer eq "all")){ my $listNo = "0".$l;
CUL_HM_PushCmdStack($shash,sprintf("++%s01%s%s%s04%s%s", foreach my $peer (grep (!/00000000/,@peerID)){
$flag,$id,$src,$chn,$peer,$listNo));# List3 or 4 $peer .="01" if (length($peer) == 6); # add the default
if ($peer &&($peer eq $reqPeer || $reqPeer eq "all")){
CUL_HM_PushCmdStack($shash,sprintf("++%s01%s%s%s04%s%s",
$flag,$id,$src,$chn,$peer,$listNo));# List3 or 4
}
} }
} }
} }
@ -2516,10 +2519,11 @@ sub CUL_HM_Set($@) {
8-int($reg->{s}+0.99)*2,); 8-int($reg->{s}+0.99)*2,);
my ($lChn,$peerId,$peerChn) = ($chn,"000000","00"); my ($lChn,$peerId,$peerChn) = ($chn,"000000","00");
if (($list == 3) ||($list == 4)){ # peer is necessary for list 3/4 if (($list == 3) ||($list == 4) # peer is necessary for list 3/4
||($list == 7 && $peerChnIn)){# and possible for List 7
return "Peer not specified" if ($peerChnIn eq ""); return "Peer not specified" if ($peerChnIn eq "");
$peerId = CUL_HM_peerChId($peerChnIn,$dst,$id); $peerId = CUL_HM_peerChId($peerChnIn,$dst,$id);
$peerChn = ((length($peerId) == 8)?substr($peerId,6,2):"01"); $peerChn = ((length($peerId) == 8)?substr($peerId,6,2):"01");
$peerId = substr($peerId,0,6); $peerId = substr($peerId,0,6);
return "Peer not valid" if (!$peerId); return "Peer not valid" if (!$peerId);
} }
@ -2535,7 +2539,7 @@ sub CUL_HM_Set($@) {
my $rName = CUL_HM_id2Name($dst.$lChn); my $rName = CUL_HM_id2Name($dst.$lChn);
$rName =~ s/_chn:.*//; $rName =~ s/_chn:.*//;
my $curVal = CUL_HM_getRegFromStore($rName,$addr,$list,$peerId.$peerChn); my $curVal = CUL_HM_getRegFromStore($rName,$addr,$list,$peerId.$peerChn);
return "cannot calculate value. Please issue set $name getConfig first - $curVal" return "cannot calculate value. Please issue set $name getConfig first - $curVal"
if ($curVal !~ m/^(set_|)(\d+)$/); if ($curVal !~ m/^(set_|)(\d+)$/);
$curVal = $2; # we expect one byte in int, strap 'set_' possibly $curVal = $2; # we expect one byte in int, strap 'set_' possibly
$data = ($curVal & (~($mask<<$bit)))|($data<<$bit); $data = ($curVal & (~($mask<<$bit)))|($data<<$bit);
@ -2547,7 +2551,7 @@ sub CUL_HM_Set($@) {
} }
} }
$lChn = "00" if($list == 7);#face to send $lChn = "00" if($list == 7 && $peerChnIn eq "");#face to send
my $cHash = CUL_HM_id2Hash($dst.($lChn eq '00'?"":$lChn)); my $cHash = CUL_HM_id2Hash($dst.($lChn eq '00'?"":$lChn));
$cHash = $hash if (!$cHash); $cHash = $hash if (!$cHash);
@ -3309,7 +3313,8 @@ sub CUL_HM_getConfig($){
if($lstAr){ if($lstAr){
my @list = split(",",$lstAr); #get valid lists e.g."1, 5:2.3p ,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 my $pReq = 0; # Peer request not issued, do only once for channel
foreach my$listEntry (@list){# each list that is define for this channel $cHash->{helper}{getCfgListNo}= "";
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){
@ -3319,10 +3324,10 @@ sub CUL_HM_getConfig($){
else{ else{
my @chnLst = split('\.',$chnLst1); my @chnLst = split('\.',$chnLst1);
foreach my $lchn (@chnLst){ foreach my $lchn (@chnLst){
$peerReq = 1 if ($lchn =~ m/p/); no warnings;#know that lchan may be followed by 'p' causing a warning
no warnings;#know that lchan may be followed by 'p' causing a warning $chnValid = 1 if (int($lchn) == hex($chn));
$chnValid = 1 if (int($lchn) == hex($chn)); use warnings;
use warnings; $peerReq = 1 if ($chnValid && $lchn =~ m/p/);
last if ($chnValid); last if ($chnValid);
} }
} }
@ -3330,7 +3335,7 @@ sub CUL_HM_getConfig($){
if ($peerReq){# need to get the peers first if ($peerReq){# need to get the peers first
if($listNo ne 'p'){# not if 'only peers'! if($listNo ne 'p'){# not if 'only peers'!
$cHash->{helper}{getCfgList} = "all"; $cHash->{helper}{getCfgList} = "all";
$cHash->{helper}{getCfgListNo} = $listNo; $cHash->{helper}{getCfgListNo} .= ",".$listNo;
} }
if (!$pReq){#get peers first, but only once per channel if (!$pReq){#get peers first, but only once per channel
CUL_HM_PushCmdStack($cHash,sprintf("++%s01%s%s%s03" CUL_HM_PushCmdStack($cHash,sprintf("++%s01%s%s%s03"
@ -3525,11 +3530,12 @@ sub CUL_HM_responseSetup($$) {#store all we need to handle the response
my $chnhash = $modules{CUL_HM}{defptr}{"$dst$chn"}; my $chnhash = $modules{CUL_HM}{defptr}{"$dst$chn"};
$chnhash = $hash if(!$chnhash); $chnhash = $hash if(!$chnhash);
$peer ="" if($list !~ m/^0[34]$/); $peer ="" if($list !~ m/^0[347]$/);
#empty val since reading will be cumulative #empty val since reading will be cumulative
my $rlName = ((CUL_HM_getAttrInt($chnhash->{NAME},"expert") == 2)? my $rlName = ((CUL_HM_getAttrInt($chnhash->{NAME},"expert") == 2)?
"":".")."RegL_".$list.":".$peer; "":".")."RegL_".$list.":".$peer;
$chnhash->{READINGS}{$rlName}{VAL}=""; $chnhash->{READINGS}{$rlName}{VAL}="";
my $chnHash = $modules{CUL_HM}{defptr}{$dst.$chn};
delete ($chnhash->{READINGS}{$rlName}{TIME}); delete ($chnhash->{READINGS}{$rlName}{TIME});
} }
elsif($subType eq "09"){ #SerialRead------- elsif($subType eq "09"){ #SerialRead-------
@ -4232,7 +4238,7 @@ sub CUL_HM_updtRegDisp($$$) {
substr($hash->{DEF},6,2) eq "02"); substr($hash->{DEF},6,2) eq "02");
} }
elsif ($md =~ m/HM-CC-RT-DN/){#handle temperature readings elsif ($md =~ m/HM-CC-RT-DN/){#handle temperature readings
CUL_HM_RTtempReadings($hash) if ($list == 7); CUL_HM_RTtempReadings($hash) if ($list == 7 && $chn eq "04");
} }
elsif ($md eq "HM-PB-4DIS-WM"){#add text elsif ($md eq "HM-PB-4DIS-WM"){#add text
CUL_HM_4DisText($hash) if ($list == 1) ; CUL_HM_4DisText($hash) if ($list == 1) ;
@ -4581,11 +4587,11 @@ sub CUL_HM_RTtempReadings($) {# parse RT temperature readings
# transport some readings to relevant channels (window receivce here) # transport some readings to relevant channels (window receivce here)
my $wHash = $modules{CUL_HM}{defptr}{substr($hash->{DEF},0,6)."03"}; my $wHash = $modules{CUL_HM}{defptr}{substr($hash->{DEF},0,6)."03"};
CUL_HM_UpdtReadBulk($wHash,1, CUL_HM_UpdtReadBulk($wHash,1,
"winOpnTemp:" .ReadingsVal($name,"R-winOpnTemp" ,"unknown"), "winOpnTemp-int:".ReadingsVal($name,"R-winOpnTemp" ,"unknown"),
"winOpnPeriod:" .ReadingsVal($name,"R-winOpnPeriod" ,"unknown"), "winOpnPeriod:" .ReadingsVal($name,"R-winOpnPeriod" ,"unknown"),
"winOpnBoost:" .ReadingsVal($name,"R-winOpnBoost" ,"unknown"), "winOpnBoost:" .ReadingsVal($name,"R-winOpnBoost" ,"unknown"),
"winOpnMode:" .ReadingsVal($name,"R-winOpnMode" ,"unknown"), "winOpnMode:" .ReadingsVal($name,"R-winOpnMode" ,"unknown"),
"winOpnDetFall:".ReadingsVal($name,"R-winOpnDetFall" ,"unknown"),); "winOpnDetFall:" .ReadingsVal($name,"R-winOpnDetFall" ,"unknown"),);
return $setting; return $setting;
} }
sub CUL_HM_repReadings($) { # parse repeater sub CUL_HM_repReadings($) { # parse repeater

View File

@ -191,7 +191,7 @@ my %culHmModel=(
"0092" => {name=>"Schueco_263-144" ,st=>'switch' ,cyc=>'' ,rxt=>'c' ,lst=>'1,3' ,chn=>"",}, # HM Switch Interface 3 switches "0092" => {name=>"Schueco_263-144" ,st=>'switch' ,cyc=>'' ,rxt=>'c' ,lst=>'1,3' ,chn=>"",}, # HM Switch Interface 3 switches
"0093" => {name=>"Schueco_263-158" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w:f' ,lst=>'p' ,chn=>"",}, # "0093" => {name=>"Schueco_263-158" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w:f' ,lst=>'p' ,chn=>"",}, #
"0094" => {name=>"IS-WDS-TH-OD-S-R3" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'p' ,chn=>"",}, # "0094" => {name=>"IS-WDS-TH-OD-S-R3" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w' ,lst=>'p' ,chn=>"",}, #
"0095" => {name=>"HM-CC-RT-DN" ,st=>'thermostat' ,cyc=>'00:10' ,rxt=>'c:w:f' ,lst=>'p:1p.2p.5p.6p,3:3p.6p,1,7:4' "0095" => {name=>"HM-CC-RT-DN" ,st=>'thermostat' ,cyc=>'00:10' ,rxt=>'c:w:f' ,lst=>'p:1p.2p.5p.6p,3:3p.6p,1,7:3p.4'
,chn=>"Weather:1:1,Climate:2:2,WindowRec:3:3,ClimRT_tr:4:4,ClimaTeam:5:5,remote:6:6"}, # ,chn=>"Weather:1:1,Climate:2:2,WindowRec:3:3,ClimRT_tr:4:4,ClimaTeam:5:5,remote:6:6"}, #
"0096" => {name=>"WDF-solar" ,st=>'blindActuatorSol' ,cyc=>'' ,rxt=>'b' ,lst=>'1,3' ,chn=>"win:1:1,blind:2:3",}, # "0096" => {name=>"WDF-solar" ,st=>'blindActuatorSol' ,cyc=>'' ,rxt=>'b' ,lst=>'1,3' ,chn=>"win:1:1,blind:2:3",}, #
"009B" => {name=>"Schueco_263-xxx" ,st=>'tipTronic' ,cyc=>'28:00' ,rxt=>'c:w' ,lst=>'1:1.2,3:1p.3p',chn=>"act:1:1,sen:2:2,sec:3:3",}, # "009B" => {name=>"Schueco_263-xxx" ,st=>'tipTronic' ,cyc=>'28:00' ,rxt=>'c:w' ,lst=>'1:1.2,3:1p.3p',chn=>"act:1:1,sen:2:2,sec:3:3",}, #
@ -223,7 +223,7 @@ my %culHmModel=(
"00B9" => {name=>"HM-LC-Dim1T-CV-2" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:1,Sw1_V:2:3",}, "00B9" => {name=>"HM-LC-Dim1T-CV-2" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:1,Sw1_V:2:3",},
"00BA" => {name=>"HM-LC-Dim1T-FM-2" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:1,Sw1_V:2:3",}, "00BA" => {name=>"HM-LC-Dim1T-FM-2" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:1,Sw1_V:2:3",},
"00BB" => {name=>"HM-LC-Dim2T-SM-2" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:2,Sw1_V:3:4,Sw2_V:5:6",},# "00BB" => {name=>"HM-LC-Dim2T-SM-2" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:2,Sw1_V:3:4,Sw2_V:5:6",},#
"00BD" => {name=>"HM-CC-RT-DN-BoM" ,st=>'thermostat' ,cyc=>'00:10' ,rxt=>'c:w:f' ,lst=>'p:1p.2p.5p.6p,3:3p.6p,1,7:4' "00BD" => {name=>"HM-CC-RT-DN-BoM" ,st=>'thermostat' ,cyc=>'00:10' ,rxt=>'c:w:f' ,lst=>'p:1p.2p.5p.6p,3:3p.6p,1,7:3p.4'
,chn=>"Weather:1:1,Climate:2:2,WindowRec:3:3,ClimRT_tr:4:4,ClimaTeam:5:5,remote:6:6"}, # ,chn=>"Weather:1:1,Climate:2:2,WindowRec:3:3,ClimRT_tr:4:4,ClimaTeam:5:5,remote:6:6"}, #
"8001" => {name=>"PS-switch" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:4",}, "8001" => {name=>"PS-switch" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:4",},
"8002" => {name=>"PS-Th-Sens" ,st=>'THSensor' ,cyc=>'' ,rxt=>'' ,lst=>'1,4' ,chn=>"Sen:1:4",}, "8002" => {name=>"PS-Th-Sens" ,st=>'THSensor' ,cyc=>'' ,rxt=>'' ,lst=>'1,4' ,chn=>"Sen:1:4",},
@ -915,7 +915,8 @@ my %culHmRegChan = (# if channelspecific then enter them here
"HM-Sen-RD-O01" =>{ eventFilterTimeB=>1,transmitTryMax =>1,peerNeedsBurst =>1,expectAES =>1 "HM-Sen-RD-O01" =>{ eventFilterTimeB=>1,transmitTryMax =>1,peerNeedsBurst =>1,expectAES =>1
,condTxThrhHi =>1,condTxThrhHi =>1,highHoldTime =>1,evntRelFltTime =>1 ,condTxThrhHi =>1,condTxThrhHi =>1,highHoldTime =>1,evntRelFltTime =>1
}, },
"HM-CC-RT-DN03" =>{ shCtValLo =>1}, "HM-CC-RT-DN03" =>{ shCtValLo =>1
,winOpnTemp =>1},
"HM-CC-RT-DN04" =>{ btnNoBckLight =>1 "HM-CC-RT-DN04" =>{ btnNoBckLight =>1
,dayTemp =>1,nightTemp =>1,tempMin =>1,tempMax =>1 ,dayTemp =>1,nightTemp =>1,tempMin =>1,tempMax =>1
,tempOffset =>1 ,tempOffset =>1