Fixed logic and behaviour with regard to READINGS. Should not

give any perl error messages anymore ;) Happy New Year!


git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@530 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
painseeker 2009-12-31 19:34:40 +00:00
parent 475355c79f
commit 070289ecd6

View File

@ -163,17 +163,12 @@ CUL_FHTTK_Parse($$)
my $state = lc(substr($msg, 7, 2)); my $state = lc(substr($msg, 7, 2));
my $def = $defptr{$sensor}; my $def = $defptr{$sensor};
my $self = $def->{NAME}; my $self = $def->{NAME};
if(!defined($def)) {
if(!defined($defptr{$sensor})) {
Log 3, "FHTTK Unknown device $sensor, please define it"; Log 3, "FHTTK Unknown device $sensor, please define it";
return "UNDEFINED CUL_FHTTK_$sensor CUL_FHTTK $sensor"; return "UNDEFINED CUL_FHTTK_$sensor CUL_FHTTK $sensor";
} }
# if it's not our device
# if($def->{IODev} && $def->{IODev}{NAME} ne $hash->{NAME}) {
# Log 3, sprintf("skipping device %s on this receiver", $sensor);
# return "";
# }
if(!defined($fhttfk_translatedcodes{$state})) { if(!defined($fhttfk_translatedcodes{$state})) {
Log 3, sprintf("FHTTK $def Unknown state $state"); Log 3, sprintf("FHTTK $def Unknown state $state");
$defs{$self}{READINGS}{"Unknown"}{VAL} = $state; $defs{$self}{READINGS}{"Unknown"}{VAL} = $state;
@ -181,60 +176,52 @@ CUL_FHTTK_Parse($$)
return ""; return "";
} }
# Log 3, sprintf("FHTTK Translating $state into %s", $fhttfk_translatedcodes{$state});
$state=$fhttfk_translatedcodes{$state}; $state=$fhttfk_translatedcodes{$state};
# PREVIOUS # PREVIOUS
# FIXME: Message regarded as similar if last char is identical; sure that's always # FIXME: Message regarded as similar if last char is identical;
# the differentiator? -wusel, 2009-11-09 # sure that's always the differentiator? -wusel, 2009-11-09
if(defined($defs{$self}{READINGS}{PREV}{TIMESTAMP})) { if(defined($defs{$self}{PREV}{TIMESTAMP})) {
if($defs{$self}{READINGS}{PREV}{TIMESTAMP} > time()-5) { if($defs{$self}{PREV}{TIMESTAMP} > time()-5) {
if(defined($defs{$self}{READINGS}{PREV}{STATE})) { if(defined($defs{$self}{PREV}{STATE})) {
if($defs{$self}{READINGS}{PREV}{STATE} eq $state) { if($defs{$self}{PREV}{STATE} eq $state) {
Log 3, sprintf("FHTTK skipping state $state as last similar telegram was received less than 5 secs ago", $defs{$self}{READINGS}{PREV}{STATE}); Log GetLogLevel($def->{NAME},4), sprintf("FHTTK skipping state $state as last similar telegram was received less than 5 (%d) secs ago", $defs{$self}{PREV}{STATE}, time()-$defs{$self}{PREV}{TIMESTAMP});
return ""; return "";
} }
} }
} }
} }
$def->{PREVTIMESTAMP} = defined($defs{$self}{READINGS}{PREV}{TIMESTAMP})?$defs{$self}{READINGS}{PREV}{TIMESTAMP}:time(); $def->{PREVTIMESTAMP} = defined($defs{$self}{PREV}{TIMESTAMP})?$defs{$self}{PREV}{TIMESTAMP}:time();
$def->{PREVSTATE} = defined($def->{STATE})?$def->{STATE}:"Unknown"; $def->{PREVSTATE} = defined($def->{STATE})?$def->{STATE}:"Unknown";
$defs{$self}{READINGS}{PREV}{STATE}=$state; $defs{$self}{PREV}{STATE}=$state;
#READINGS #READINGS
my ($reading,$val) = split(/:/, $fhttfk_codes{$state}); my ($reading,$val) = split(/:/, $fhttfk_codes{$state});
$defs{$self}{READINGS}{$reading}{VAL} = $val; $defs{$self}{READINGS}{$reading}{VAL} = $val;
$defs{$self}{READINGS}{$reading}{TIME} = TimeNow(); $defs{$self}{READINGS}{$reading}{TIME} = TimeNow();
$defs{$self}{READINGS}{PREV}{TIMESTAMP} = time(); $defs{$self}{PREV}{TIMESTAMP} = time();
# -wusel, 2009-11-09: According to http://fhz4linux.info/tiki-index.php?page=FHT+protocol, # -wusel, 2009-11-09: According to http://fhz4linux.info/tiki-index.php?page=FHT+protocol,
# FHT80TF usually transmitts between 60 and 240 seconds. (255-256 sec in # FHT80TF usually transmitts between 60 and 240 seconds. (255-256 sec in
# my experience ...) If we got no fresh data for over 5 minutes (300 sec), # my experience ...) If we got no fresh data for over 5 minutes (300 sec),
# flag this. # flag this.
if($defs{$self}{READINGS}{PREV}{TIMESTAMP}+720 < time()) { if($defs{$self}{PREV}{TIMESTAMP}+720 < time()) {
$defs{$self}{READINGS}{"Reliability"}{VAL} = "dead"; $defs{$self}{READINGS}{"Reliability"}{VAL} = "dead";
$defs{$self}{READINGS}{"Reliability"}{TIME} = TimeNow(); $defs{$self}{READINGS}{"Reliability"}{TIME} = TimeNow();
} elsif($defs{$self}{READINGS}{PREV}{TIMESTAMP}+600 < time()) { } elsif($defs{$self}{PREV}{TIMESTAMP}+600 < time()) {
$defs{$self}{READINGS}{"Reliability"}{VAL} = "low"; $defs{$self}{READINGS}{"Reliability"}{VAL} = "low";
$defs{$self}{READINGS}{"Reliability"}{TIME} = TimeNow(); $defs{$self}{READINGS}{"Reliability"}{TIME} = TimeNow();
} elsif($defs{$self}{READINGS}{PREV}{TIMESTAMP}+300 < time()) { } elsif($defs{$self}{PREV}{TIMESTAMP}+300 < time()) {
$defs{$self}{READINGS}{"Reliability"}{VAL} = "medium"; $defs{$self}{READINGS}{"Reliability"}{VAL} = "medium";
$defs{$self}{READINGS}{"Reliability"}{TIME} = TimeNow(); $defs{$self}{READINGS}{"Reliability"}{TIME} = TimeNow();
} else { } else {
undef($defs{$self}{READINGS}{"Reliability"}{VAL}); $defs{$self}{READINGS}{"Reliability"}{VAL} = "ok";
undef($defs{$self}{READINGS}{"Reliability"}{TIME}); $defs{$self}{READINGS}{"Reliability"}{TIME} = TimeNow();
undef($defs{$self}{READINGS}{"Reliability"});
} }
# Flag the battery warning separately # Flag the battery warning separately
if($state eq "11" || $state eq "12") { if($state eq "11" || $state eq "12") {
$defs{$self}{READINGS}{"Battery"}{VAL} = "Low"; $defs{$self}{READINGS}{"Battery"}{VAL} = "Low";
$defs{$self}{READINGS}{"Battery"}{TIME} = TimeNow(); $defs{$self}{READINGS}{"Battery"}{TIME} = TimeNow();
$defs{$self}{READINGS}{"Warning"}{VAL} = "Battery Low";
$defs{$self}{READINGS}{"Warning"}{TIME} = TimeNow();
} else { } else {
undef($defs{$self}{READINGS}{"Battery"}{VAL}); $defs{$self}{READINGS}{"Battery"}{VAL} = "ok";
undef($defs{$self}{READINGS}{"Battery"}{TIME}); $defs{$self}{READINGS}{"Battery"}{TIME} = TimeNow();
undef($defs{$self}{READINGS}{"Battery"});
undef($defs{$self}{READINGS}{"Warning"}{VAL});
undef($defs{$self}{READINGS}{"Warning"}{TIME});
undef($defs{$self}{READINGS}{"Warning"});
} }
#CHANGED #CHANGED
$defs{$self}{CHANGED}[0] = $reading . ": " . $val; $defs{$self}{CHANGED}[0] = $reading . ": " . $val;