From 06c5656764e055a582fee0894d0b9e91a3b7849e Mon Sep 17 00:00:00 2001 From: martinp876 <> Date: Wed, 20 Nov 2013 19:22:44 +0000 Subject: [PATCH] peer-selective winOpenTemp for RT git-svn-id: https://svn.fhem.de/fhem/trunk@4255 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_CUL_HM.pm | 52 +++++++++++++++++++++++------------------- fhem/FHEM/HMConfig.pm | 7 +++--- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/fhem/FHEM/10_CUL_HM.pm b/fhem/FHEM/10_CUL_HM.pm index 7bf711efd..cc5c608fb 100755 --- a/fhem/FHEM/10_CUL_HM.pm +++ b/fhem/FHEM/10_CUL_HM.pm @@ -1727,14 +1727,17 @@ sub CUL_HM_parseCommon(@){##################################################### if ($reqPeer){ my $flag = CUL_HM_getFlag($shash); my $id = CUL_HM_IOid($shash); - my $listNo = "0".$chnhash->{helper}{getCfgListNo}; my @peerID = split(",",($attr{$chnName}{peerIDs}? $attr{$chnName}{peerIDs}:"")); - foreach my $peer (grep (!/00000000/,@peerID)){ - $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 + foreach my $l (split ",",$chnhash->{helper}{getCfgListNo}){ + next if (!$l); + my $listNo = "0".$l; + foreach my $peer (grep (!/00000000/,@peerID)){ + $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,); 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 ""); $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); return "Peer not valid" if (!$peerId); } @@ -2535,7 +2539,7 @@ sub CUL_HM_Set($@) { my $rName = CUL_HM_id2Name($dst.$lChn); $rName =~ s/_chn:.*//; 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+)$/); $curVal = $2; # we expect one byte in int, strap 'set_' possibly $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)); $cHash = $hash if (!$cHash); @@ -3309,7 +3313,8 @@ sub CUL_HM_getConfig($){ if($lstAr){ 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 + $cHash->{helper}{getCfgListNo}= ""; + foreach my $listEntry (@list){# each list that is define for this channel my ($peerReq,$chnValid)= (0,0); my ($listNo,$chnLst1) = split(":",$listEntry); if (!$chnLst1){ @@ -3319,10 +3324,10 @@ sub CUL_HM_getConfig($){ else{ my @chnLst = split('\.',$chnLst1); foreach my $lchn (@chnLst){ - $peerReq = 1 if ($lchn =~ m/p/); - no warnings;#know that lchan may be followed by 'p' causing a warning - $chnValid = 1 if (int($lchn) == hex($chn)); - use warnings; + no warnings;#know that lchan may be followed by 'p' causing a warning + $chnValid = 1 if (int($lchn) == hex($chn)); + use warnings; + $peerReq = 1 if ($chnValid && $lchn =~ m/p/); last if ($chnValid); } } @@ -3330,7 +3335,7 @@ sub CUL_HM_getConfig($){ if ($peerReq){# need to get the peers first if($listNo ne 'p'){# not if 'only peers'! $cHash->{helper}{getCfgList} = "all"; - $cHash->{helper}{getCfgListNo} = $listNo; + $cHash->{helper}{getCfgListNo} .= ",".$listNo; } if (!$pReq){#get peers first, but only once per channel 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"}; $chnhash = $hash if(!$chnhash); - $peer ="" if($list !~ m/^0[34]$/); + $peer ="" if($list !~ m/^0[347]$/); #empty val since reading will be cumulative my $rlName = ((CUL_HM_getAttrInt($chnhash->{NAME},"expert") == 2)? "":".")."RegL_".$list.":".$peer; $chnhash->{READINGS}{$rlName}{VAL}=""; + my $chnHash = $modules{CUL_HM}{defptr}{$dst.$chn}; delete ($chnhash->{READINGS}{$rlName}{TIME}); } elsif($subType eq "09"){ #SerialRead------- @@ -4232,7 +4238,7 @@ sub CUL_HM_updtRegDisp($$$) { substr($hash->{DEF},6,2) eq "02"); } 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 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) my $wHash = $modules{CUL_HM}{defptr}{substr($hash->{DEF},0,6)."03"}; CUL_HM_UpdtReadBulk($wHash,1, - "winOpnTemp:" .ReadingsVal($name,"R-winOpnTemp" ,"unknown"), - "winOpnPeriod:" .ReadingsVal($name,"R-winOpnPeriod" ,"unknown"), - "winOpnBoost:" .ReadingsVal($name,"R-winOpnBoost" ,"unknown"), - "winOpnMode:" .ReadingsVal($name,"R-winOpnMode" ,"unknown"), - "winOpnDetFall:".ReadingsVal($name,"R-winOpnDetFall" ,"unknown"),); + "winOpnTemp-int:".ReadingsVal($name,"R-winOpnTemp" ,"unknown"), + "winOpnPeriod:" .ReadingsVal($name,"R-winOpnPeriod" ,"unknown"), + "winOpnBoost:" .ReadingsVal($name,"R-winOpnBoost" ,"unknown"), + "winOpnMode:" .ReadingsVal($name,"R-winOpnMode" ,"unknown"), + "winOpnDetFall:" .ReadingsVal($name,"R-winOpnDetFall" ,"unknown"),); return $setting; } sub CUL_HM_repReadings($) { # parse repeater diff --git a/fhem/FHEM/HMConfig.pm b/fhem/FHEM/HMConfig.pm index 102e02b21..bbc21e1bb 100644 --- a/fhem/FHEM/HMConfig.pm +++ b/fhem/FHEM/HMConfig.pm @@ -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 "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=>"",}, # - "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"}, # "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",}, # @@ -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",}, "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",},# - "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"}, # "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",}, @@ -915,7 +915,8 @@ my %culHmRegChan = (# if channelspecific then enter them here "HM-Sen-RD-O01" =>{ eventFilterTimeB=>1,transmitTryMax =>1,peerNeedsBurst =>1,expectAES =>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 ,dayTemp =>1,nightTemp =>1,tempMin =>1,tempMax =>1 ,tempOffset =>1