2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-19 00:26:03 +00:00

bug fixed in HMInfo

git-svn-id: https://svn.fhem.de/fhem/trunk@6383 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
martinp876 2014-08-09 10:03:39 +00:00
parent 1db520bf94
commit 8c3a77893f
2 changed files with 42 additions and 37 deletions

View File

@ -3376,8 +3376,9 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
if (!grep /^$regName$/,@regArr ); if (!grep /^$regName$/,@regArr );
my $reg = $culHmRegDefine->{$regName}; my $reg = $culHmRegDefine->{$regName};
my $conv = $reg->{c};
return $st." - ".$regName # give some help return $st." - ".$regName # give some help
.($reg->{c} eq "lit"? " literal:".join(",",keys%{$reg->{lit}})." " .($conv eq "lit"? " literal:".join(",",keys%{$reg->{lit}})." "
: " range:". $reg->{min}." to ".$reg->{max}.$reg->{u} : " range:". $reg->{min}." to ".$reg->{max}.$reg->{u}
.($reg->{lit}?" special:".join(",",keys%{$reg->{lit}})." " .($reg->{lit}?" special:".join(",",keys%{$reg->{lit}})." "
:"" :""
@ -3387,13 +3388,12 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
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 (!($conv =~ m/^(lit|hex|min2time)$/)&&
($data < $reg->{min} ||$data > $reg->{max})); # none number ($data < $reg->{min} ||$data > $reg->{max})); # none number
return"invalid value. use:". join(",",sort keys%{$reg->{lit}}) return"invalid value. use:". join(",",sort keys%{$reg->{lit}})
if ($reg->{c} eq 'lit' && !defined($reg->{lit}{$data})); if ($conv eq 'lit' && !defined($reg->{lit}{$data}));
my $conv = $reg->{c}; if ($conv ne 'lit' && $reg->{lit} && $reg->{lit}{$data}){
if (!$conv && $reg->{lit} && $reg->{lit}{$data}){
$data = $reg->{lit}{$data}; #conv special value prior to calculation $data = $reg->{lit}{$data}; #conv special value prior to calculation
} }
$data *= $reg->{f} if($reg->{f});# obey factor befor possible conversion $data *= $reg->{f} if($reg->{f});# obey factor befor possible conversion
@ -4153,8 +4153,7 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
my ($pDev,$pCh) = unpack 'A6A2',$pId; my ($pDev,$pCh) = unpack 'A6A2',$pId;
return "button cannot be identified" if (!$pCh); return "button cannot be identified" if (!$pCh);
delete $hash->{helper}{dlvl};#stop desiredLevel supervision delete $hash->{helper}{dlvl};#stop desiredLevel supervision
######################
#CUL_HM_PushCmdStack($hash,
my $msg = sprintf("3E%s%s%s40%02X%02X", my $msg = sprintf("3E%s%s%s40%02X%02X",
$id,$dst,$pDev, $id,$dst,$pDev,
hex($pCh)+$mode, hex($pCh)+$mode,
@ -4164,12 +4163,6 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
select(undef, undef, undef, $repDly); select(undef, undef, undef, $repDly);
} }
CUL_HM_SndCmd($hash, "++${flag}$msg"); CUL_HM_SndCmd($hash, "++${flag}$msg");
######################
#CUL_HM_PushCmdStack($hash, sprintf("++%s3E%s%s%s40%02X%02X",$flag,
# $id,$dst,$pDev,
# hex($pCh)+$mode,
# $pressCnt));
} }
} }
elsif($cmd eq "fwUpdate") { ################################################# elsif($cmd eq "fwUpdate") { #################################################
@ -4365,7 +4358,7 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
} }
# 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 =~ m/^(remote|both)$/){
my $burst; my $burst;
if ($culHmRegModel->{$md}{peerNeedsBurst}|| #peerNeedsBurst supported if ($culHmRegModel->{$md}{peerNeedsBurst}|| #peerNeedsBurst supported
$culHmRegType->{$st}{peerNeedsBurst}){ $culHmRegType->{$st}{peerNeedsBurst}){
@ -4407,7 +4400,7 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
} }
} }
} }
if (!$target || $target =~ m/^(actor|both)$/ ){ if ($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",$b[2]),$set); CUL_HM_ID2PeerList ($peerN,$dst.sprintf("%02X",$b[2]),$set);
@ -5477,6 +5470,7 @@ sub CUL_HM_ID2PeerList ($$$) {
$peerNames .= CUL_HM_peerChName($pId,$dId).","; $peerNames .= CUL_HM_peerChName($pId,$dId).",";
} }
$attr{$name}{peerIDs} = $peerIDs; # make it public $attr{$name}{peerIDs} = $peerIDs; # make it public
my $dHash = CUL_HM_getDeviceHash($hash); my $dHash = CUL_HM_getDeviceHash($hash);
my $st = AttrVal($dHash->{NAME},"subType",""); my $st = AttrVal($dHash->{NAME},"subType","");
my $md = AttrVal($dHash->{NAME},"model",""); my $md = AttrVal($dHash->{NAME},"model","");
@ -5894,8 +5888,9 @@ sub CUL_HM_getRegFromStore($$$$@) {#read a register from backup data
} else { return " conv undefined - please contact admin"; } else { return " conv undefined - please contact admin";
} }
$data /= $factor if ($factor);# obey factor after possible conversion $data /= $factor if ($factor);# obey factor after possible conversion
if (!$conv && $reg->{litInv} && $reg->{litInv}{$data} ){ if ($conv ne "lit" && $reg->{litInv} && $reg->{litInv}{$data} ){
$data = $reg->{litInv}{$data};#conv special value past to calculation $data = $reg->{litInv}{$data};#conv special value past to calculation
$unit = "";
} }
return $convFlg.$data.$unit; return $convFlg.$data.$unit;
} }
@ -7707,6 +7702,7 @@ sub CUL_HM_tempListTmpl(@) { ##################################################
<ul> <ul>
<li><B><a href="#CUL_HMpeerChan">peerChan</a></B> see remote</li> <li><B><a href="#CUL_HMpeerChan">peerChan</a></B> see remote</li>
<li><B><a name="CUL_HMpress"></a>press [long|short] [&lt;peer&gt;] [&lt;repCount&gt;] [&lt;repDelay&gt;] </B> <li><B><a name="CUL_HMpress"></a>press [long|short] [&lt;peer&gt;] [&lt;repCount&gt;] [&lt;repDelay&gt;] </B>
<ul>
simulates button press for an actor from a peered sensor. simulates button press for an actor from a peered sensor.
will be sent of type "long". will be sent of type "long".
<li>[long|short] defines whether long or short press shall be simulated. Defaults to short <li>[long|short] defines whether long or short press shall be simulated. Defaults to short
@ -7717,6 +7713,7 @@ sub CUL_HM_tempListTmpl(@) { ##################################################
</li> </li>
<li>[&lt;repDelay&gt;] Valid for long press only. defines wait time between the single messages. <li>[&lt;repDelay&gt;] Valid for long press only. defines wait time between the single messages.
</li> </li>
</ul>
</li> </li>
<li><B>virtTemp &lt;[off -10..50]&gt;<a name="CUL_HMvirtTemp"></a></B> <li><B>virtTemp &lt;[off -10..50]&gt;<a name="CUL_HMvirtTemp"></a></B>
simulates a thermostat. If peered to a device it periodically sends the simulates a thermostat. If peered to a device it periodically sends the
@ -8965,11 +8962,13 @@ sub CUL_HM_tempListTmpl(@) { ##################################################
<ul> <ul>
<li><B><a href="#CUL_HMpeerChan">peerChan</a></B> siehe remote</li> <li><B><a href="#CUL_HMpeerChan">peerChan</a></B> siehe remote</li>
<li><B><a name="CUL_HMpress"></a>press [long|short] [&lt;peer&gt;] [&lt;repCount&gt;] [&lt;repDelay&gt;] </B> <li><B><a name="CUL_HMpress"></a>press [long|short] [&lt;peer&gt;] [&lt;repCount&gt;] [&lt;repDelay&gt;] </B>
<ul>
Simuliert den Tastendruck am Aktor eines gepeerted Sensors Simuliert den Tastendruck am Aktor eines gepeerted Sensors
<li>[long|short] soll ein langer oder kurzer Taastendrucl simuliert werden? Default ist kurz. </li> <li>[long|short] soll ein langer oder kurzer Taastendrucl simuliert werden? Default ist kurz. </li>
<li>[&lt;peer&gt;] legt fest, wessen peer's trigger simuliert werden soll.Default ist self(channelNo).</li> <li>[&lt;peer&gt;] legt fest, wessen peer's trigger simuliert werden soll.Default ist self(channelNo).</li>
<li>[&lt;repCount&gt;] nur gueltig fuer long. wie viele messages sollen gesendet werden? (Laenge des Button press). Default ist 1.</li> <li>[&lt;repCount&gt;] nur gueltig fuer long. wie viele messages sollen gesendet werden? (Laenge des Button press). Default ist 1.</li>
<li>[&lt;repDelay&gt;] nur gueltig fuer long. definiert die Zeit zwischen den einzelnen Messages. </li> <li>[&lt;repDelay&gt;] nur gueltig fuer long. definiert die Zeit zwischen den einzelnen Messages. </li>
</ul>
</li> </li>
<li><B>virtTemp &lt;[off -10..50]&gt;<a name="CUL_HMvirtTemp"></a></B> <li><B>virtTemp &lt;[off -10..50]&gt;<a name="CUL_HMvirtTemp"></a></B>
Simuliert ein Thermostat. Wenn mit einem Ger&auml;t gepeert wird periodisch eine Temperatur gesendet, Simuliert ein Thermostat. Wenn mit einem Ger&auml;t gepeert wird periodisch eine Temperatur gesendet,

View File

@ -939,6 +939,8 @@ sub HMinfo_GetFn($@) {#########################################################
} }
$RegReply .= $peerLine."\n".$ptLine."\n"; $RegReply .= $peerLine."\n".$ptLine."\n";
foreach my $rN (sort keys %{$hash->{helper}{r}}){ foreach my $rN (sort keys %{$hash->{helper}{r}}){
$hash->{helper}{r}{$rN} =~ s/( o..)/$1 /g
if($rN =~ m/^MultiExec /); #shift thhis reading since it does not appear for short
$RegReply .= $rN.$hash->{helper}{r}{$rN}."\n"; $RegReply .= $rN.$hash->{helper}{r}{$rN}."\n";
} }
delete $hash->{helper}{r}; delete $hash->{helper}{r};
@ -1584,11 +1586,15 @@ sub HMinfo_archConfigExec($) {################################################
,"c" ,"c"
,"\^(".join("|",@archs).")\$") ,"\^(".join("|",@archs).")\$")
,"strict")); ,"strict"));
return (@eN ? join(",",@eN) : ""); return "$id,".(@eN ? join(",",@eN) : "");
} }
sub HMinfo_archConfigPost($) {################################################ sub HMinfo_archConfigPost($) {################################################
my $post = shift; my @arr = split(",",shift);
push @{$modules{CUL_HM}{helper}{confUpdt}},split(",",$post) if ($post); my ($name,$id) = split(":",$arr[0]);
shift @arr;
push @{$modules{CUL_HM}{helper}{confUpdt}},@arr;
delete $defs{$name}{nb}{$id};
return ; return ;
} }