mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-13 05:06:35 +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:
parent
6de72e588e
commit
ba9e127365
@ -16,7 +16,6 @@ sub KM271_Read($);
|
||||
sub KM271_Ready($);
|
||||
sub KM271_crc($);
|
||||
sub KM271_setbits($$);
|
||||
sub KM271_GetReading($$);
|
||||
sub KM271_SetReading($$$$$);
|
||||
|
||||
my %km271_sets = (
|
||||
@ -351,7 +350,7 @@ KM271_Read($)
|
||||
# Analyze the data
|
||||
my ($fn, $arg) = ($1, $2);
|
||||
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();
|
||||
|
||||
#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 "a") { $val = $km271_arrays[$farg][$val]; }
|
||||
elsif($f eq "mb") {
|
||||
$val += KM271_GetReading($hash, $key."1") * 256;
|
||||
$val += KM271_GetReading($hash, $key."2") * 65536 if($farg == 3);
|
||||
$val += ReadingsVal($name, $key."1", 0) * 256;
|
||||
$val += ReadingsVal($name, $key."2", 0) * 65536 if($farg == 3);
|
||||
}
|
||||
}
|
||||
KM271_SetReading($hash, $tn, $key, $val, $ntfy);
|
||||
@ -443,31 +442,13 @@ KM271_crc($)
|
||||
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
|
||||
KM271_SetReading($$$$$)
|
||||
{
|
||||
my ($hash,$tn,$key,$val,$ntfy) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
Log GetLogLevel($name,4), "$name: $key $val" if($key ne "NoData");
|
||||
$hash->{READINGS}{$key}{TIME} = $tn;
|
||||
$hash->{READINGS}{$key}{VAL} = $val;
|
||||
setReadingsVal($hash, $key, $val, $tn);
|
||||
DoTrigger($name, "$key: $val") if($ntfy);
|
||||
}
|
||||
|
||||
|
178
fhem/fhem.pl
178
fhem/fhem.pl
@ -83,6 +83,8 @@ sub IsDummy($);
|
||||
sub IsIgnored($);
|
||||
sub setGlobalAttrBeforeFork();
|
||||
sub redirectStdinStdErr();
|
||||
sub setReadingsVal($$$$);
|
||||
sub addEvent($$);
|
||||
|
||||
sub CommandAttr($$);
|
||||
sub CommandDefaultAttr($$);
|
||||
@ -2530,71 +2532,6 @@ SecondsTillTomorrow($) # 86400, if tomorrow is no DST change
|
||||
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
|
||||
sub
|
||||
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
|
||||
# in device-specific modules.
|
||||
# Wrappers for commonly used core functions in device-specific modules.
|
||||
# This part written by Boris Neubert omega at online dot de
|
||||
#
|
||||
################################################################
|
||||
@ -2728,7 +2747,6 @@ readingsUpdate($$$) {
|
||||
my ($hash,$reading,$value)= @_;
|
||||
my $name= $hash->{NAME};
|
||||
|
||||
|
||||
# sanity check
|
||||
defined($hash->{helper}{updating}) ||
|
||||
die "fhem.pl: readingsUpdateReading: you must call readingsBeginUpdate first.";
|
||||
@ -2737,32 +2755,26 @@ readingsUpdate($$$) {
|
||||
my $readings= $hash->{READINGS};
|
||||
|
||||
# these flags determine if any of the "event-on" attributes are set;
|
||||
my $attreocr= defined($attr{$name}{"event-on-change-reading"});
|
||||
my $attreour= defined($attr{$name}{"event-on-update-reading"});
|
||||
my $attreocr= AttrVal($name, "event-on-change-reading", "");
|
||||
my $attreour= AttrVal($name, "event-on-update-reading", "");
|
||||
|
||||
# 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 $eour= $attreour && grep($_ eq $reading, split /,/,$attr{$name}{"event-on-update-reading"});
|
||||
my $eocr= $attreocr && grep($_ eq $reading, split /,/,$attreocr);
|
||||
my $eour= $attreour && grep($_ eq $reading, split /,/,$attreour);
|
||||
|
||||
# determine if an event should be created
|
||||
my $changed= !($attreocr || $attreour) # always create event if no attribute is set
|
||||
|| $eour # or if the reading is listed in event-on-change-reading
|
||||
|| ($eocr && # or if the reading is listed in event-on-update-reading...
|
||||
|| $eour # 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.
|
||||
|
||||
|
||||
#Log 1, "changed!" if($changed); # DEBUG
|
||||
|
||||
# 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;
|
||||
setReadingsVal($hash, $reading, $value, $hash->{helper}{updating}{latestUpdate});
|
||||
|
||||
# add to CHANGED hash
|
||||
#Log 1, "changed!" if($changed); # DEBUG
|
||||
my $rv= "$reading: $value";
|
||||
push(@{$hash->{CHANGED}}, $rv) if($changed);
|
||||
addEvent($hash, $rv) if($changed);
|
||||
|
||||
return $rv;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user