2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-21 01:46:08 +00:00

correct some register display problems for RT and TC

git-svn-id: https://svn.fhem.de/fhem/trunk@5055 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
martinp876 2014-02-26 17:58:41 +00:00
parent 77e1ec9d2e
commit 5249126dec

View File

@ -1085,7 +1085,7 @@ sub CUL_HM_Parse($$) {#########################################################
my ($chn,$setTemp,$actTemp, $cRep,$bat,$lbat,$wRep, $ctrlMode) = my ($chn,$setTemp,$actTemp, $cRep,$bat,$lbat,$wRep, $ctrlMode) =
("02",$d[1],$d[1], $d[2],$d[2],$d[2],$d[2],$d[3]); ("02",$d[1],$d[1], $d[2],$d[2],$d[2],$d[2],$d[3]);
$setTemp =(($setTemp >>10) & 0x3f )/2; $setTemp =(($setTemp >>10) & 0x3f )/2;
$actTemp =(($actTemp ) & 0x2ff)/10; $actTemp =(($actTemp ) & 0x3ff)/10;
$actTemp = -1 * $actTemp if ($d[1] & 0x200 );# obey signed $actTemp = -1 * $actTemp if ($d[1] & 0x200 );# obey signed
$bat =(($bat ) & 0x1f)/10+1.5; $bat =(($bat ) & 0x1f)/10+1.5;
$lbat = ($lbat ) & 0x80; $lbat = ($lbat ) & 0x80;
@ -1123,7 +1123,7 @@ sub CUL_HM_Parse($$) {#########################################################
if($modules{CUL_HM}{defptr}{"$src$chn"}); if($modules{CUL_HM}{defptr}{"$src$chn"});
my ($t,$h) = map{hex($_)} unpack 'A4A2',$p; my ($t,$h) = map{hex($_)} unpack 'A4A2',$p;
my $setTemp =(($t >>10) & 0x3f )/2; my $setTemp =(($t >>10) & 0x3f )/2;
my $actTemp =(($t ) & 0x2ff)/10; my $actTemp =(($t ) & 0x3ff)/10;
$actTemp = sprintf("%2.1f",$actTemp); $actTemp = sprintf("%2.1f",$actTemp);
$setTemp = ($setTemp < 5 )?'off': $setTemp = ($setTemp < 5 )?'off':
($setTemp >30 )?'on' :$setTemp; ($setTemp >30 )?'on' :$setTemp;
@ -1473,7 +1473,7 @@ sub CUL_HM_Parse($$) {#########################################################
$P = $P /100; #0.0 ..167772.15 W $P = $P /100; #0.0 ..167772.15 W
$I = $I /1; #0.0 ..65535.0 mA $I = $I /1; #0.0 ..65535.0 mA
$U = $U /10; #0.0 ..6553.5 mV $U = $U /10; #0.0 ..6553.5 mV
$F = hex($F);$F -= 256 if ($F > 127); $F -= 256 if ($F > 127);
$F = $F/100+50; # 48.72..51.27 Hz $F = $F/100+50; # 48.72..51.27 Hz
push @evtEt,[$shash,1,"energy:" .$eCnt]; push @evtEt,[$shash,1,"energy:" .$eCnt];
@ -2469,7 +2469,7 @@ sub CUL_HM_Get($@) {#+++++++++++++++++ get command+++++++++++++++++++++++++++++
$peerN = " " if ($peer eq "00000000"); $peerN = " " if ($peer eq "00000000");
push @regValList,sprintf(" %d:%s\t%-16s :%s\n", push @regValList,sprintf(" %d:%s\t%-16s :%s\n",
$regL,$peerN,$regName,$regVal) $regL,$peerN,$regName,$regVal)
if ($regVal ne 'invalid'); if ($regVal !~ m /invalid/);
} }
} }
my $addInfo = ""; my $addInfo = "";
@ -2485,7 +2485,7 @@ sub CUL_HM_Get($@) {#+++++++++++++++++ get command+++++++++++++++++++++++++++++
} }
else{ else{
my $regVal = CUL_HM_getRegFromStore($name,$regReq,$list,$peerId); my $regVal = CUL_HM_getRegFromStore($name,$regReq,$list,$peerId);
return ($regVal eq "invalid")? "Value not captured" return ($regVal !~ m /invalid/)? "Value not captured"
: $regVal; : $regVal;
} }
} }
@ -2948,7 +2948,7 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
) )
.(($reg->{l} == 3)?" peer required":"")." : ".$reg->{t}."\n" .(($reg->{l} == 3)?" peer required":"")." : ".$reg->{t}."\n"
if ($data eq "?"); if ($data eq "?");
return "value:".$data." out of range $reg->{min} to $reg->{max} for Reg \"" return "value:$data out of range $reg->{min} to $reg->{max} for Reg \""
.$regName."\"" .$regName."\""
if (!($reg->{c} =~ m/^(lit|hex|min2time)$/)&& if (!($reg->{c} =~ m/^(lit|hex|min2time)$/)&&
($data < $reg->{min} ||$data > $reg->{max})); # none number ($data < $reg->{min} ||$data > $reg->{max})); # none number
@ -3002,8 +3002,11 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
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" if ($curVal !~ m/^(set_|)(\d+)$/){
if ($curVal !~ m/^(set_|)(\d+)$/); return "peer required for $regName" if ($curVal =~ m/peer/);
return "cannot calculate value. Please issue set $name getConfig first - $curVal";
}
;
$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);
$addrData.=sprintf("%02X%02X",$addr,$data); $addrData.=sprintf("%02X%02X",$addr,$data);
@ -4962,13 +4965,18 @@ sub CUL_HM_getRegFromStore($$$$@) {#read a register from backup data
$factor = $reg->{f}; $factor = $reg->{f};
$unit = " ".$reg->{u}; $unit = " ".$reg->{u};
} }
else{
return "invalid:regname or address"
if($addr<1 ||$addr>255);
}
my $dst = substr(CUL_HM_name2Id($name),0,6); my $dst = substr(CUL_HM_name2Id($name),0,6);
if(!$regLN){ if(!$regLN){
$regLN = ((CUL_HM_getAttrInt($name,"expert") == 2)?"":".") $regLN = ((CUL_HM_getAttrInt($name,"expert") == 2)?"":".")
.sprintf("RegL_%02X:",$list) .sprintf("RegL_%02X:",$list)
.($peerId?CUL_HM_peerChName($peerId, .($peerId?CUL_HM_peerChName($peerId,
$dst, $dst,
CUL_HM_IOid($hash)):""); CUL_HM_IOid($hash))
:"");
} }
$regLN =~ s/broadcast//; $regLN =~ s/broadcast//;
my $regLNp = $regLN; my $regLNp = $regLN;
@ -4995,6 +5003,10 @@ sub CUL_HM_getRegFromStore($$$$@) {#read a register from backup data
$dRead = $dReadS; $dRead = $dReadS;
} }
else{ else{
if (grep /$regLN../,keys %{$hash->{READINGS}} &&
!$peerId){
return "invalid:peer missing";
}
return "invalid" if (!defined($dRead) || $dRead eq ""); return "invalid" if (!defined($dRead) || $dRead eq "");
} }
@ -5040,7 +5052,7 @@ sub CUL_HM_updtRegDisp($$$) {
foreach my $rgN (@regArr){ foreach my $rgN (@regArr){
next if ($culHmRegDefine->{$rgN}->{l} ne $listNo); next if ($culHmRegDefine->{$rgN}->{l} ne $listNo);
my $rgVal = CUL_HM_getRegFromStore($name,$rgN,$list,$peerId,$regLN); my $rgVal = CUL_HM_getRegFromStore($name,$rgN,$list,$peerId,$regLN);
next if (!$rgVal || $rgVal eq "invalid"); next if (!$rgVal || $rgVal =~ m /invalid/);
my $rdN = ((!$expLvl && !$culHmRegDefine->{$rgN}->{d})?".":"").$pReg.$rgN; my $rdN = ((!$expLvl && !$culHmRegDefine->{$rgN}->{d})?".":"").$pReg.$rgN;
push (@changedRead,$rdN.":".$rgVal) push (@changedRead,$rdN.":".$rgVal)
if (ReadingsVal($name,$rdN,"") ne $rgVal); if (ReadingsVal($name,$rdN,"") ne $rgVal);
@ -5379,11 +5391,14 @@ sub CUL_HM_TCITRTtempReadings($@) {# parse RT - TC-IT temperature readings
} }
if ($hash->{helper}{shadowReg}{"RegL_0$lst:"}){ if ($hash->{helper}{shadowReg}{"RegL_0$lst:"}){
my $ch = 0;
foreach(split " ",$hash->{helper}{shadowReg}{"RegL_0$lst:"}){ foreach(split " ",$hash->{helper}{shadowReg}{"RegL_0$lst:"}){
my ($a,$d) = split ":",$_; my ($a,$d) = split ":",$_;
$r1[hex($a)] = $d; $a = hex($a);
$ch = 1 if ((!$r1[$a] || $r1[$a] ne $d) && $a >= 20);
$r1[$a] = $d;
} }
push (@changedRead,"tempList$idxN{$lst}_State:set"); push (@changedRead,"tempList$idxN{$lst}_State:set") if ($ch);
} }
else{ else{
push (@changedRead,"tempList$idxN{$lst}_State:verified"); push (@changedRead,"tempList$idxN{$lst}_State:verified");
@ -5971,7 +5986,6 @@ sub CUL_HM_reglUsed($) {# provide data for HMinfo
push @lsNo,"0:"; push @lsNo,"0:";
} }
elsif ($hash->{helper}{role}{chn}){ elsif ($hash->{helper}{role}{chn}){
foreach my $ls (split ",",$culHmModel->{$mId}{lst}){ foreach my $ls (split ",",$culHmModel->{$mId}{lst}){
my ($l,$c) = split":",$ls; my ($l,$c) = split":",$ls;
if ($l ne "p"){# ignore peer-only entries if ($l ne "p"){# ignore peer-only entries