From c88859514891e3c9feed9b619da0fb13b6f597de Mon Sep 17 00:00:00 2001 From: hotmaz <> Date: Sat, 11 Feb 2012 20:31:34 +0000 Subject: [PATCH] corrected encoding problem for celsius file log now contains the translated value git-svn-id: https://svn.fhem.de/fhem/trunk@1251 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_EIB.pm | 71 ++++++++++++++++++++++++------------------ fhem/test/fhem-eib.cfg | 9 +++++- 2 files changed, 49 insertions(+), 31 deletions(-) diff --git a/fhem/FHEM/10_EIB.pm b/fhem/FHEM/10_EIB.pm index 72b9e91df..cbbd68296 100644 --- a/fhem/FHEM/10_EIB.pm +++ b/fhem/FHEM/10_EIB.pm @@ -44,7 +44,7 @@ my %eib_dpttypes = ( # 2-Octet unsigned Value (Temp / Light) "dpt9" => {"CODE"=>"dpt9", "UNIT"=>""}, - "tempsensor" => {"CODE"=>"dpt9", "UNIT"=>"°C"}, + "tempsensor" => {"CODE"=>"dpt9", "UNIT"=>"Celsius"}, "lightsensor" => {"CODE"=>"dpt9", "UNIT"=>"Lux"}, # Time of Day @@ -262,34 +262,41 @@ EIB_Parse($$) my $v = $codes{$val}; $v = "$val" if(!defined($v)); + my $rawv = $v; + my @list; + my $found = 0; + my $def = $modules{EIB}{defptr}{"$dev"}; if($def) { - my @list; foreach my $n (keys %{ $def }) { my $lh = $def->{$n}; $n = $lh->{NAME}; # It may be renamed return "" if(IsIgnored($n)); # Little strange. + # parse/translate by datapoint type + $v = EIB_ParseByDatapointType($lh,$n,$v); + $lh->{CHANGED}[0] = $v; $lh->{STATE} = $v; - $lh->{RAWSTATE} = $v; + $lh->{RAWSTATE} = $rawv; $lh->{LASTGROUP} = $dev; $lh->{READINGS}{state}{TIME} = TimeNow(); $lh->{READINGS}{state}{VAL} = $v; - Log GetLogLevel($n,2), "EIB $n $v"; - # parse/translate by datapoint type - EIB_ParseByDatapointType($lh,$n,$v); + Log 2, "EIB $n $v"; push(@list, $n); + $found = 1; } - return @list; - } else { - + #return @list; + } + + # check also the further codes + { # check if the code is within the read groups - my $found = 0; + foreach my $mod (keys %{$modules{EIB}{defptr}}) { my $def = $modules{EIB}{defptr}{"$mod"}; @@ -306,32 +313,34 @@ EIB_Parse($$) return "" if(IsIgnored($n)); # Little strange. + # parse/translate by datapoint type + $v = EIB_ParseByDatapointType($lh,$n,$v); + $lh->{CHANGED}[0] = $v; $lh->{STATE} = $v; - $lh->{RAWSTATE} = $v; + $lh->{RAWSTATE} = $rawv; $lh->{LASTGROUP} = $dev; $lh->{READINGS}{state}{TIME} = TimeNow(); $lh->{READINGS}{state}{VAL} = $v; - Log GetLogLevel($n,2), "EIB $n $v"; - - # parse/translate by datapoint type - EIB_ParseByDatapointType($lh,$n,$v); - + Log 2, "EIB $n $v"; + push(@list, $n); $found = 1; } }} - return @list if $found>0; } - } - - if($found==0) - { - my $dev_name = eib_hex2name($dev); - Log(3, "EIB Unknown device $dev ($dev_name), Value $val, please define it"); - return "UNDEFINED EIB_$dev EIB $dev"; } - } + } + + return @list if $found>0; + + if($found==0) + { + my $dev_name = eib_hex2name($dev); + Log(3, "EIB Unknown device $dev ($dev_name), Value $val, please define it"); + return "UNDEFINED EIB_$dev EIB $dev"; + } + } } @@ -343,12 +352,12 @@ EIB_ParseByDatapointType($$$) my $model = $attr{$name}{"model"}; # nothing to do if no model is given - return undef if(!defined($model)); + return $value if(!defined($model)); my $dpt = $eib_dpttypes{"$model"}; Log(4,"EIB parse $value for $name model: $model dpt: $dpt"); - return undef if(!defined($dpt)); + return $value if(!defined($dpt)); my $code = $eib_dpttypes{"$model"}{"CODE"}; my $unit = $eib_dpttypes{"$model"}{"UNIT"}; @@ -408,13 +417,15 @@ EIB_ParseByDatapointType($$$) # set state to translated value if(defined($transval)) { - Log(4,"EIB $name translated to $transval"); - $hash->{STATE} = "$transval $unit"; + Log(4,"EIB $name translated to $transval $unit"); + $value = "$transval $unit"; } else { - Log(4,"EIB $name model $model could not be translated."); + Log(4,"EIB $name model $model value $value could not be translated."); } + + return $value; } ############################# diff --git a/fhem/test/fhem-eib.cfg b/fhem/test/fhem-eib.cfg index 75a629202..ef1b16322 100644 --- a/fhem/test/fhem-eib.cfg +++ b/fhem/test/fhem-eib.cfg @@ -11,13 +11,20 @@ define tul TUL eibd:marvin 1.1.249 define Lampe1 EIB 0/0/1 define Lampe2 EIB 0/0/2 0/0/3 +define Lampe3 EIB 0/0/3 define LightSens EIB 0/0/250 attr LightSens dummy 1 -attr LightSens model lightsensor +attr LightSens model brightness +#attr LightSens model lightsensor #attr LightSens model date +define LightSensLog FileLog test/LightSens_%Y.log LightSens +define Lampe1Log FileLog test/Lampe1_%Y.log (Lampe1|Lampe2|Lampe3) + + attr Lampe1 webCmd on:off:on-for-timer 10 +get Lampe3 value get Lampe1 value get Lampe2 value \ No newline at end of file