2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-13 17:26:34 +00:00

Slight changes to Boris's additions

git-svn-id: https://svn.fhem.de/fhem/trunk@1260 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2012-02-14 08:13:08 +00:00
parent 6de72e588e
commit ba9e127365
2 changed files with 99 additions and 106 deletions

View File

@ -16,7 +16,6 @@ sub KM271_Read($);
sub KM271_Ready($); sub KM271_Ready($);
sub KM271_crc($); sub KM271_crc($);
sub KM271_setbits($$); sub KM271_setbits($$);
sub KM271_GetReading($$);
sub KM271_SetReading($$$$$); sub KM271_SetReading($$$$$);
my %km271_sets = ( my %km271_sets = (
@ -351,7 +350,7 @@ KM271_Read($)
# Analyze the data # Analyze the data
my ($fn, $arg) = ($1, $2); my ($fn, $arg) = ($1, $2);
my $msghash = $km271_rev{$fn}; my $msghash = $km271_rev{$fn};
my $all_events = KM271_attr($name, "all_km271_events") ; my $all_events = AttrVal($name, "all_km271_events", "") ;
my $tn = TimeNow(); my $tn = TimeNow();
#Log 1, "$data" if($fn ne "0400"); #Log 1, "$data" if($fn ne "0400");
@ -374,8 +373,8 @@ KM271_Read($)
elsif($f eq "bf") { $val = KM271_setbits($val, $farg); } elsif($f eq "bf") { $val = KM271_setbits($val, $farg); }
elsif($f eq "a") { $val = $km271_arrays[$farg][$val]; } elsif($f eq "a") { $val = $km271_arrays[$farg][$val]; }
elsif($f eq "mb") { elsif($f eq "mb") {
$val += KM271_GetReading($hash, $key."1") * 256; $val += ReadingsVal($name, $key."1", 0) * 256;
$val += KM271_GetReading($hash, $key."2") * 65536 if($farg == 3); $val += ReadingsVal($name, $key."2", 0) * 65536 if($farg == 3);
} }
} }
KM271_SetReading($hash, $tn, $key, $val, $ntfy); KM271_SetReading($hash, $tn, $key, $val, $ntfy);
@ -443,31 +442,13 @@ KM271_crc($)
return sprintf("%02x", $x); return sprintf("%02x", $x);
} }
sub
KM271_attr($$)
{
my ($name, $attr) = @_;
return $attr{$name}{$attr} if($attr{$name} && $attr{$name}{$attr});
return "";
}
sub
KM271_GetReading($$)
{
my ($hash, $msg) = @_;
return $hash->{READINGS}{$msg}{VAL}
if($hash->{READINGS} && $hash->{READINGS}{$msg});
return 0;
}
sub sub
KM271_SetReading($$$$$) KM271_SetReading($$$$$)
{ {
my ($hash,$tn,$key,$val,$ntfy) = @_; my ($hash,$tn,$key,$val,$ntfy) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
Log GetLogLevel($name,4), "$name: $key $val" if($key ne "NoData"); Log GetLogLevel($name,4), "$name: $key $val" if($key ne "NoData");
$hash->{READINGS}{$key}{TIME} = $tn; setReadingsVal($hash, $key, $val, $tn);
$hash->{READINGS}{$key}{VAL} = $val;
DoTrigger($name, "$key: $val") if($ntfy); DoTrigger($name, "$key: $val") if($ntfy);
} }

View File

@ -83,6 +83,8 @@ sub IsDummy($);
sub IsIgnored($); sub IsIgnored($);
sub setGlobalAttrBeforeFork(); sub setGlobalAttrBeforeFork();
sub redirectStdinStdErr(); sub redirectStdinStdErr();
sub setReadingsVal($$$$);
sub addEvent($$);
sub CommandAttr($$); sub CommandAttr($$);
sub CommandDefaultAttr($$); sub CommandDefaultAttr($$);
@ -2530,71 +2532,6 @@ SecondsTillTomorrow($) # 86400, if tomorrow is no DST change
return $stt_sec; return $stt_sec;
} }
sub
ReadingsVal($$$)
{
my ($d,$n,$default) = @_;
if(defined($defs{$d}) &&
defined($defs{$d}{READINGS}) &&
defined($defs{$d}{READINGS}{$n}) &&
defined($defs{$d}{READINGS}{$n}{VAL})) {
return $defs{$d}{READINGS}{$n}{VAL};
}
return $default;
}
sub
ReadingsTimestamp($$$)
{
my ($d,$n,$default) = @_;
if(defined($defs{$d}) &&
defined($defs{$d}{READINGS}) &&
defined($defs{$d}{READINGS}{$n}) &&
defined($defs{$d}{READINGS}{$n}{TIME})) {
return $defs{$d}{READINGS}{$n}{TIME};
}
return $default;
}
sub
Value($)
{
my ($d) = @_;
if(defined($defs{$d}) &&
defined($defs{$d}{STATE})) {
return $defs{$d}{STATE};
}
return "";
}
sub
OldValue($)
{
my ($d) = @_;
return $oldvalue{$d}{VAL} if(defined($oldvalue{$d})) ;
return "";
}
sub
OldTimestamp($)
{
my ($d) = @_;
return $oldvalue{$d}{TIME} if(defined($oldvalue{$d})) ;
return "";
}
sub
AttrVal($$$)
{
my ($d,$n,$default) = @_;
return $attr{$d}{$n} if($d && defined($attr{$d}) && defined($attr{$d}{$n}));
return $default;
}
# Add an attribute to the userattr list, if not yet present # Add an attribute to the userattr list, if not yet present
sub sub
addToAttrList($) addToAttrList($)
@ -2670,10 +2607,92 @@ setGlobalAttrBeforeFork()
} }
###########################################
# Functions used to make fhem-oneliners more readable,
# but also recommended to be used by modules
sub
ReadingsVal($$$)
{
my ($d,$n,$default) = @_;
if(defined($defs{$d}) &&
defined($defs{$d}{READINGS}) &&
defined($defs{$d}{READINGS}{$n}) &&
defined($defs{$d}{READINGS}{$n}{VAL})) {
return $defs{$d}{READINGS}{$n}{VAL};
}
return $default;
}
sub
ReadingsTimestamp($$$)
{
my ($d,$n,$default) = @_;
if(defined($defs{$d}) &&
defined($defs{$d}{READINGS}) &&
defined($defs{$d}{READINGS}{$n}) &&
defined($defs{$d}{READINGS}{$n}{TIME})) {
return $defs{$d}{READINGS}{$n}{TIME};
}
return $default;
}
sub
Value($)
{
my ($d) = @_;
if(defined($defs{$d}) &&
defined($defs{$d}{STATE})) {
return $defs{$d}{STATE};
}
return "";
}
sub
OldValue($)
{
my ($d) = @_;
return $oldvalue{$d}{VAL} if(defined($oldvalue{$d})) ;
return "";
}
sub
OldTimestamp($)
{
my ($d) = @_;
return $oldvalue{$d}{TIME} if(defined($oldvalue{$d})) ;
return "";
}
sub
AttrVal($$$)
{
my ($d,$n,$default) = @_;
return $attr{$d}{$n} if($d && defined($attr{$d}) && defined($attr{$d}{$n}));
return $default;
}
################################################################
# Functions used by modules.
sub
setReadingsVal($$$$)
{
my ($hash,$rname,$val,$ts) = @_;
$hash->{READINGS}{$rname}{VAL} = $val;
$hash->{READINGS}{$rname}{TIME} = $ts;
}
sub
addEvent($$)
{
my ($hash,$event) = @_;
push(@{$hash->{CHANGED}}, $event);
}
################################################################ ################################################################
# #
# What follows are wrappers for commonly used core functions # Wrappers for commonly used core functions in device-specific modules.
# in device-specific modules.
# This part written by Boris Neubert omega at online dot de # This part written by Boris Neubert omega at online dot de
# #
################################################################ ################################################################
@ -2728,7 +2747,6 @@ readingsUpdate($$$) {
my ($hash,$reading,$value)= @_; my ($hash,$reading,$value)= @_;
my $name= $hash->{NAME}; my $name= $hash->{NAME};
# sanity check # sanity check
defined($hash->{helper}{updating}) || defined($hash->{helper}{updating}) ||
die "fhem.pl: readingsUpdateReading: you must call readingsBeginUpdate first."; die "fhem.pl: readingsUpdateReading: you must call readingsBeginUpdate first.";
@ -2737,32 +2755,26 @@ readingsUpdate($$$) {
my $readings= $hash->{READINGS}; my $readings= $hash->{READINGS};
# these flags determine if any of the "event-on" attributes are set; # these flags determine if any of the "event-on" attributes are set;
my $attreocr= defined($attr{$name}{"event-on-change-reading"}); my $attreocr= AttrVal($name, "event-on-change-reading", "");
my $attreour= defined($attr{$name}{"event-on-update-reading"}); my $attreour= AttrVal($name, "event-on-update-reading", "");
# these flags determine whether the reading is listed in any of the attributes # these flags determine whether the reading is listed in any of the attributes
my $eocr= $attreocr && grep($_ eq $reading, split /,/,$attr{$name}{"event-on-change-reading"}); my $eocr= $attreocr && grep($_ eq $reading, split /,/,$attreocr);
my $eour= $attreour && grep($_ eq $reading, split /,/,$attr{$name}{"event-on-update-reading"}); my $eour= $attreour && grep($_ eq $reading, split /,/,$attreour);
# determine if an event should be created # determine if an event should be created
my $changed= !($attreocr || $attreour) # always create event if no attribute is set my $changed= !($attreocr || $attreour) # always create event if no attribute is set
|| $eour # or if the reading is listed in event-on-change-reading || $eour # or if the reading is listed in event-on-update-reading
|| ($eocr && # or if the reading is listed in event-on-update-reading... || ($eocr && # or if the reading is listed in event-on-change-reading...
($value ne $readings->{$reading}{VAL})); # ...and its value has changed. ($value ne $readings->{$reading}{VAL})); # ...and its value has changed.
#Log 1, "changed!" if($changed); # DEBUG setReadingsVal($hash, $reading, $value, $hash->{helper}{updating}{latestUpdate});
# update reading 5.x
$readings->{$reading}{TIME}= $hash->{helper}{updating}{latestUpdate};
$readings->{$reading}{VAL}= $value;
# update reading (upward compatibility), see http://fhemwiki.de/wiki/DevelopmentGuidelines#Struktur_im_Code
#$hash->{"readings"}{$reading}{"time"}= $hash->{helper}{updating}{latestUpdate};
#$hash->{"readings"}{$reading}{"value"}= $value;
# add to CHANGED hash # add to CHANGED hash
#Log 1, "changed!" if($changed); # DEBUG
my $rv= "$reading: $value"; my $rv= "$reading: $value";
push(@{$hash->{CHANGED}}, $rv) if($changed); addEvent($hash, $rv) if($changed);
return $rv; return $rv;
} }