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:
parent
6de72e588e
commit
ba9e127365
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
178
fhem/fhem.pl
178
fhem/fhem.pl
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user