mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-10 03:06:37 +00:00
33_readingsChange.pm: first check in
git-svn-id: https://svn.fhem.de/fhem/trunk@12507 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
e277d74837
commit
34277e6957
@ -1,5 +1,6 @@
|
|||||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||||
# Do not insert empty lines here, update check depends on it.
|
# Do not insert empty lines here, update check depends on it.
|
||||||
|
- feature: readingsChange FHEM helper module added
|
||||||
- changed: 93_DbRep: daylight saving time check improved
|
- changed: 93_DbRep: daylight saving time check improved
|
||||||
- changed: Pushsafer: added devicename to availableMessages reading name
|
- changed: Pushsafer: added devicename to availableMessages reading name
|
||||||
- feature: 98_Hyperion: new set toggleMode
|
- feature: 98_Hyperion: new set toggleMode
|
||||||
|
150
fhem/FHEM/33_readingsChange.pm
Executable file
150
fhem/FHEM/33_readingsChange.pm
Executable file
@ -0,0 +1,150 @@
|
|||||||
|
##############################################
|
||||||
|
# $Id$
|
||||||
|
package main;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use vars qw($FW_ME); # webname (default is fhem)
|
||||||
|
|
||||||
|
#####################################
|
||||||
|
sub
|
||||||
|
readingsChange_Initialize($)
|
||||||
|
{
|
||||||
|
my ($hash) = @_;
|
||||||
|
|
||||||
|
$hash->{DefFn} = "readingsChangeDefine";
|
||||||
|
$hash->{NotifyFn} = "readingsChangeExec";
|
||||||
|
$hash->{AttrList} ="disable:1,0 disabledForIntervals";
|
||||||
|
$hash->{NotifyOrderPrefix} = "00-"; # be the first
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#####################################
|
||||||
|
sub
|
||||||
|
readingsChangeDefine($$)
|
||||||
|
{
|
||||||
|
my ($hash, $def) = @_;
|
||||||
|
my ($name, $type, @re) = split("[ \t]+", $def, 6);
|
||||||
|
|
||||||
|
return "Usage: define <name> readingsChange ".
|
||||||
|
"<device> <readingName> <toReplace> <replaceWith>"
|
||||||
|
if(int(@re) != 4);
|
||||||
|
$hash->{".re"} = \@re;
|
||||||
|
|
||||||
|
# Checking for misleading regexps
|
||||||
|
for(my $idx = 0; $idx < 3; $idx++) {
|
||||||
|
my $re = $re[$idx];
|
||||||
|
return "Bad regexp: starting with *" if($re =~ m/^\*/);
|
||||||
|
eval { "Hallo" =~ m/^$re$/ };
|
||||||
|
return "Bad regexp $re: $@" if($@);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($re[3] =~ m/^{.*}/) {
|
||||||
|
$hash->{".isPerl"} = 1;
|
||||||
|
my %specials= ();
|
||||||
|
my $err = perlSyntaxCheck($re[3], %specials);
|
||||||
|
return "$re[3]: $err" if($err);
|
||||||
|
}
|
||||||
|
|
||||||
|
readingsSingleUpdate($hash, "state", "active", 0);
|
||||||
|
notifyRegexpChanged($hash, $re[0]);
|
||||||
|
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
#####################################
|
||||||
|
sub
|
||||||
|
readingsChangeExec($$)
|
||||||
|
{
|
||||||
|
my ($rc, $dev) = @_;
|
||||||
|
|
||||||
|
my $SELF = $rc->{NAME};
|
||||||
|
return "" if(IsDisabled($SELF));
|
||||||
|
|
||||||
|
my $re = $rc->{".re"};
|
||||||
|
my $NAME = $dev->{NAME};
|
||||||
|
return if($NAME !~ m/$re->[0]/ || !$dev->{READINGS});
|
||||||
|
|
||||||
|
my $events = $dev->{CHANGED};
|
||||||
|
return if(!$events);
|
||||||
|
my $max = int(@{$events});
|
||||||
|
|
||||||
|
for (my $i = 0; $i < $max; $i++) {
|
||||||
|
my $EVENT = $events->[$i];
|
||||||
|
next if(!defined($EVENT) || $EVENT !~ m/^([^ ]+): (.+)/);
|
||||||
|
my ($rg, $val) = ($1, $2);
|
||||||
|
next if($rg !~ m/$re->[1]/ || !$dev->{READINGS}{$rg});
|
||||||
|
|
||||||
|
Log3 $SELF, 5, "Changing $NAME:$rg $val via $SELF";
|
||||||
|
if($rc->{".isPerl"}) {
|
||||||
|
eval "\$val =~ s/$re->[2]/$re->[3]/ge";
|
||||||
|
} else {
|
||||||
|
eval "\$val =~ s/$re->[2]/$re->[3]/g";
|
||||||
|
}
|
||||||
|
$events->[$i] = "$rg: $val";
|
||||||
|
$dev->{READINGS}{$rg}{VAL} = $val;
|
||||||
|
}
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
=item helper
|
||||||
|
=item summary modify reading value upon change
|
||||||
|
=item summary_DE Reading-Werte modifizieren bei Änderung
|
||||||
|
=begin html
|
||||||
|
|
||||||
|
<a name="readingsChange"></a>
|
||||||
|
<h3>readingsChange</h3>
|
||||||
|
<ul>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<a name="readingsChangedefine"></a>
|
||||||
|
<b>Define</b>
|
||||||
|
<ul>
|
||||||
|
<code>define <name> readingsChange <device> <readingName>
|
||||||
|
<toReplace> <replaceWith>"</code>
|
||||||
|
<br><br>
|
||||||
|
Change the content of a reading if it changes, with the perl string
|
||||||
|
substitute mechanism.
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
<device>, <readingName> and <toReplace> are regular
|
||||||
|
expressions, and are not allowed to contain whitespace.
|
||||||
|
If replaceWith is enclosed in {}, then the content will be executed as a
|
||||||
|
perl expression for each match.
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
<ul><code>
|
||||||
|
# shorten the reading power 0.5 W previous: 0 delta_time: 300<br>
|
||||||
|
# to just power 0.5 W<br>
|
||||||
|
define pShort readingsChange pm power (.*W).* $1<br>
|
||||||
|
<br>
|
||||||
|
# format each decimal number in the power reading to 2 decimal places<br>
|
||||||
|
define p2dec readingsChange pm power (\d+\.\d+) {sprintf("%02.f", $1)}
|
||||||
|
</code></ul>
|
||||||
|
</ul>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<a name="readingsChangeset"></a>
|
||||||
|
<b>Set</b> <ul>N/A</ul><br>
|
||||||
|
|
||||||
|
<a name="readingsChangeget"></a>
|
||||||
|
<b>Get</b> <ul>N/A</ul><br>
|
||||||
|
|
||||||
|
<a name="readingsChangeattr"></a>
|
||||||
|
<b>Attributes</b>
|
||||||
|
<ul>
|
||||||
|
<li><a href="#disable">disable</a></li>
|
||||||
|
<li><a href="#disabledForIntervals">disabledForIntervals</a></li>
|
||||||
|
</ul>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
=end html
|
||||||
|
|
||||||
|
=cut
|
@ -146,6 +146,7 @@ FHEM/32_TechemSD.pm herrmannj http://forum.fhem.de Sonstiges
|
|||||||
FHEM/32_WifiLight.pm herrmannj http://forum.fhem.de Beleuchtung
|
FHEM/32_WifiLight.pm herrmannj http://forum.fhem.de Beleuchtung
|
||||||
FHEM/32_yowsup.pm justme1968 http://forum.fhem.de Unterstuetzende Dienste
|
FHEM/32_yowsup.pm justme1968 http://forum.fhem.de Unterstuetzende Dienste
|
||||||
FHEM/32_withings.pm markus-m http://forum.fhem.de Sonstiges
|
FHEM/32_withings.pm markus-m http://forum.fhem.de Sonstiges
|
||||||
|
FHEM/33_readingschange.pm rudolfkoenig http://forum.fhem.de Automatisierung
|
||||||
FHEM/33_readingsGroup.pm justme1968 http://forum.fhem.de Frontends/readingsGroup readingsHistory
|
FHEM/33_readingsGroup.pm justme1968 http://forum.fhem.de Frontends/readingsGroup readingsHistory
|
||||||
FHEM/33_readingsHistory.pm justme1968 http://forum.fhem.de Frontends/readingsGroup readingsHistory
|
FHEM/33_readingsHistory.pm justme1968 http://forum.fhem.de Frontends/readingsGroup readingsHistory
|
||||||
FHEM/33_readingsProxy.pm justme1968 http://forum.fhem.de Automatisierung
|
FHEM/33_readingsProxy.pm justme1968 http://forum.fhem.de Automatisierung
|
||||||
|
Loading…
x
Reference in New Issue
Block a user