diff --git a/FHEM/10_CUL_HM.pm b/FHEM/10_CUL_HM.pm index 5798ef39b..273cd0b3d 100755 --- a/FHEM/10_CUL_HM.pm +++ b/FHEM/10_CUL_HM.pm @@ -4345,7 +4345,7 @@ sub CUL_HM_RTtempReadings($) {# parse RT temperature readings $tempRegs =~ s/.* 14://; #remove register up to addr 20 from list $tempRegs =~ s/ 00:00/ /g; #remove regline termination - $tempRegs =~ s/ ..://g; #remove addr Info + $tempRegs =~ s/ ..://g; #remove addr Info $tempRegs =~ s/ //g; #blank my @time; my @temp; diff --git a/FHEM/98_HMinfo.pm b/FHEM/98_HMinfo.pm index 6792d3ba4..59872f4e6 100644 --- a/FHEM/98_HMinfo.pm +++ b/FHEM/98_HMinfo.pm @@ -160,29 +160,31 @@ sub HMinfo_peerCheck(@) { ##################################################### my %th = CUL_HM_putHash("culHmModel"); foreach my $eName (@entities){ my $ehash = $defs{$eName}; + next if (!$ehash->{helper}{role}{chn});#device has no channels + my $id = $defs{$eName}{DEF}; my $devId = substr($id,0,6); my $st = AttrVal(CUL_HM_id2Name($devId),"subType","");# from Master my $md = AttrVal(CUL_HM_id2Name($devId),"model",""); my $peerIDs = AttrVal($eName,"peerIDs",undef); + if (!$peerIDs){ # no peers - is this correct? - next if (length($id) == 6 && $ehash->{channel_01});#device with channels - no peers on device level - next if ($st eq "virtual"); # virtuals may not have peers - - my $list; - foreach (keys %th){ - $list = $th{$_}{lst} if ($th{$_}{name} eq $md); - } - - # should not be empty for SD - # should not be empty for entities with List 3 or 4 - push @peerIDsEmpty,"empty critical: " .$eName if ($st eq "smokeDetector"); - push @peerIDsEmpty,"empty: " .$eName if($list =~ m/[34]/); #those should have peers + next if ($st eq "virtual"); # virtuals may not have peers + my ($mId) = grep {$th{$_}{name} eq $md} keys %th; + my $cNo = (length ($id) == 8)?substr($id,7,1)."p":"1p"; + foreach my $ls (split ",",$th{$mId}{lst}){ + my ($l,$c) = split":",$ls; + if ( ($l =~ m/^(p|3|4)$/ && !$c ) # 3,4,p without chanspec + ||($c && $c =~ m/$cNo/ )){ + push @peerIDsEmpty,"empty: ".$eName; + } + } } elsif($peerIDs !~ m/00000000/ && $st ne "virtual"){#peerList incomplete push @peerIDsFail,"incomplete: ".$eName.":".$peerIDs; } else{# work on a valid list: + next if ($st eq "repeater"); foreach (split",",$peerIDs){ next if ($_ eq "00000000" ||$_ =~m /$devId/); my $cId = $id; @@ -197,8 +199,8 @@ sub HMinfo_peerCheck(@) { ##################################################### } } } - return "\n\n incomplete peer list"."\n ".(join "\n ",sort @peerIDsFail) - ."\n\n empty peer list" ."\n ".(join "\n ",sort @peerIDsEmpty) + return "\n\n peer list not read" ."\n ".(join "\n ",sort @peerIDsEmpty) + ."\n\n peer list incomplete"."\n ".(join "\n ",sort @peerIDsFail) ."\n\n peer not verified " ."\n ".(join "\n ",sort @peerIDsNoPeer) ; } diff --git a/FHEM/HMConfig.pm b/FHEM/HMConfig.pm index 7a3eb5c03..bd521c987 100644 --- a/FHEM/HMConfig.pm +++ b/FHEM/HMConfig.pm @@ -485,7 +485,7 @@ my %culHmRegDefine = ( # logicCombination=>{a=> 89.0,s=>0.5,l=>1,min=>0 ,max=>16 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"". # "inactive=>unused\n". -# "or =>max(state,chan)\n". +# "or =>max(state,chan)\n". # "and =>min(state,chan)\n". # "xor =>0 if both are != 0, else max\n". # "nor =>100-max(state,chan)\n". @@ -538,19 +538,19 @@ my %culHmRegDefine = ( valveOffset =>{a=> 9 ,s=>0.5,l=>5,min=>0 ,max=>25 ,c=>'' ,f=>'' ,u=>'%' ,d=>1,t=>"Valve offset"}, # size actually 0.5 valveErrorPos =>{a=> 10 ,s=>1 ,l=>5,min=>0 ,max=>99 ,c=>'' ,f=>'' ,u=>'%' ,d=>1,t=>"Valve position when error"},# size actually 0.7 - tempComfort =>{a=> 1 ,s=>0.6,l=>7,min=>15 ,max=>30 ,c=>'' ,f=>'2' ,u=>'' ,d=>1,t=>"comfort temperatur"}, - tempLowering =>{a=> 2 ,s=>0.6,l=>7,min=>5 ,max=>25 ,c=>'' ,f=>'2' ,u=>'' ,d=>1,t=>"lowering temperatur"}, - tempMin =>{a=> 3 ,s=>0.6,l=>7,min=>4.5,max=>25 ,c=>'' ,f=>'2' ,u=>'' ,d=>1,t=>"minimum temperatur"}, - tempMax =>{a=> 4 ,s=>0.6,l=>7,min=>15 ,max=>30.5 ,c=>'' ,f=>'2' ,u=>'' ,d=>1,t=>"maximum temperatur"}, - winOpnTemp =>{a=> 5 ,s=>0.6,l=>7,min=>5 ,max=>30 ,c=>'' ,f=>'2' ,u=>'' ,d=>1,t=>"lowering temp whenWindow is opened"}, + tempComfort =>{a=> 1 ,s=>0.6,l=>7,min=>15 ,max=>30 ,c=>'' ,f=>'2' ,u=>'C' ,d=>1,t=>"comfort temperatur"}, + tempLowering =>{a=> 2 ,s=>0.6,l=>7,min=>5 ,max=>25 ,c=>'' ,f=>'2' ,u=>'C' ,d=>1,t=>"lowering temperatur"}, + tempMin =>{a=> 3 ,s=>0.6,l=>7,min=>4.5,max=>25 ,c=>'' ,f=>'2' ,u=>'C' ,d=>1,t=>"minimum temperatur"}, + tempMax =>{a=> 4 ,s=>0.6,l=>7,min=>15 ,max=>30.5 ,c=>'' ,f=>'2' ,u=>'C' ,d=>1,t=>"maximum temperatur"}, + winOpnTemp =>{a=> 5 ,s=>0.6,l=>7,min=>5 ,max=>30 ,c=>'' ,f=>'2' ,u=>'C' ,d=>1,t=>"lowering temp whenWindow is opened"}, winOpnPeriod =>{a=> 6 ,s=>0.4,l=>7,min=>0 ,max=>60 ,c=>'' ,f=>'0.2' ,u=>'min' ,d=>1,t=>"period lowering when window is open"}, decalcWeekday =>{a=> 7 ,s=>0.3,l=>7,min=>0 ,max=>7 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"decalc at day" ,lit=>{Sat=>0,Sun=>1,Mon=>2,Tue=>3,Wed=>4,Thu=>5,Fri=>6}}, decalcTime =>{a=> 8 ,s=>0.6,l=>7,min=>0 ,max=>1410 ,c=>'min2time' ,f=>'' ,u=>'' ,d=>1,t=>"decalc at hour"}, tempOffset =>{a=> 9 ,s=>0.4,l=>7,min=>0 ,max=>15 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"temperature offset",lit=>{"-3.5K"=>0,"-3.0K"=>1,"-2.5K"=>2,"-2.0K"=>3,"-1.5K"=>4,"-1.0K"=>5,"-0.5K"=>6, "0.0K"=>7, "0.5K"=>8, "1.0K"=>10, "1.5K"=>11, "2.0K"=>12, "2.5K"=>13, "3.0K"=>14, "3.5K"=>15}}, btnNoBckLight =>{a=> 9.4,s=>0.1,l=>7,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"button response without backlight",lit=>{off=>0,on=>1}}, - boostPos =>{a=> 10.0,s=>0.5,l=>7,min=>0 ,max=>100 ,c=>'' ,f=>'0.2' ,u=>'%' ,d=>1,t=>"boost period [min]"}, - boostPeriod =>{a=> 10.5,s=>0.3,l=>7,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"boost position" ,lit=>{0=>0,5=>1,10=>2,15=>3,20=>4,25=>5,30=>6}}, + boostPos =>{a=> 10.0,s=>0.5,l=>7,min=>0 ,max=>100 ,c=>'' ,f=>'0.2' ,u=>'%' ,d=>1,t=>"valve boost position"}, + boostPeriod =>{a=> 10.5,s=>0.3,l=>7,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'min' ,d=>1,t=>"boost period [min]" ,lit=>{0=>0,5=>1,10=>2,15=>3,20=>4,25=>5,30=>6}}, valveOffset =>{a=> 11 ,s=>0.7,l=>7,min=>0 ,max=>100 ,c=>'' ,f=>'' ,u=>'%' ,d=>1,t=>"offset for valve"}, valveMaxPos =>{a=> 12 ,s=>0.7,l=>7,min=>0 ,max=>100 ,c=>'' ,f=>'' ,u=>'%' ,d=>1,t=>"valve maximum position"}, valveErrPos =>{a=> 13 ,s=>0.7,l=>7,min=>0 ,max=>100 ,c=>'' ,f=>'' ,u=>'%' ,d=>1,t=>"valve error position"}, @@ -565,7 +565,7 @@ my %culHmRegDefine = ( modePrioParty =>{a=> 18.0,s=>0.3,l=>7,min=>0 ,max=>5 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"allow tempChange for party by..." ,lit=>{RT_SC=>0,all=>1,RT_CCU=>3,CCU=>4,self=>5}}, modePrioManu =>{a=> 18.3,s=>0.3,l=>7,min=>0 ,max=>5 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"allow tempChange for manual by..." ,lit=>{RT_SC=>0,all=>1,RT_CCU=>3,CCU=>4,self=>5}}, - winOpnMode =>{a=> 19.5,s=>0.3,l=>7,min=>0 ,max=>5 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"enable internal Windoe open in modes: " ,lit=>{off=>0,auto=>1,auto_manu=>2,auto_party=>3,on=>4}}, + winOpnMode =>{a=> 19.5,s=>0.3,l=>7,min=>0 ,max=>4 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"enable internal Windoe open in modes: " ,lit=>{off=>0,auto=>1,auto_manu=>2,auto_party=>3,on=>4}}, winOpnDetFall =>{a=> 19.0,s=>0.5,l=>7,min=>0.5,max=>2.5 ,c=>'' ,f=>'10' ,u=>'K' ,d=>1,t=>"detect Window Open if temp falls more then..."}, reguIntI =>{a=>202.0,s=>1 ,l=>7,min=>10 ,max=>20 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"regulator I-param internal mode"},