2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-01 01:09:47 +00:00

git-svn-id: https://svn.fhem.de/fhem/trunk@5341 2b470e98-0d58-463d-a4d8-8e2adae1ed80

This commit is contained in:
joachim09876 2014-03-27 18:09:46 +00:00
parent 2f4549f3c0
commit be190fe8a3

View File

@ -1,7 +1,7 @@
# $Id$
##############################################
# 98_cloneDummy
#
# Von Joachim Herold
# FHEM Modul um aus Events von FHEM2FHEM clone-Devices zu erstellen
# cloneDummy ist "readonly"
# Grundlage ist 98_dummy.pm von Rudolf Koenig
@ -10,8 +10,8 @@
# Um die Änderung zu nutzen, einfach einen cloneDummy anlegen
#
# Eintrag in der fhem.cfg:
# define <name> cloneDummy <quellDevice>
#
# define <name> cloneDummy <quellDevice> [reading]
# attr <name> cloneIgnore <reading1,reading2,...,readingX>
#
#############################################
@ -25,16 +25,18 @@ sub cloneDummy_Initialize($) {
$hash->{DefFn} = "cloneDummy_Define";
$hash->{NotifyFn} = "cloneDummy_Notify";
$hash->{AttrList} = $readingFnAttributes;
$hash->{AttrList} = "cloneIgnore ".$readingFnAttributes;
}
sub cloneDummy_Define($$) {
my ($hash, $def) = @_;
my @a = split("[ \t][ \t]*", $def);
return "Wrong syntax: use define <name> cloneDummy <sourceDevice>" if((int(@a) != 3)) ;
return "Wrong syntax: <name> must different to <sourceDevice>" if($a[0] eq $a[2]) ;
return "Wrong syntax: use define <name> cloneDummy <sourceDevice> [reading]" if((int(@a) < 3 || int(@a) > 4)) ;
return "Error: cloneDummy and sourceDevice must not have the same name!" if($a[0] eq $a[2]);
my $hn = $hash->{NAME};
$hash->{NOTIFYDEV} = $a[2];
$hash->{NOTIFYSTATE} = $a[3] if(defined($a[3]));
$attr{$hn}{stateFormat} = "_state" if(defined($a[3]));
readingsSingleUpdate($hash,'state','defined',1);
Log3($hash,4,"cloneDummy: $a[0] defined for source $a[2]");
return undef;
@ -43,17 +45,26 @@ sub cloneDummy_Define($$) {
sub cloneDummy_Notify($$) {
my ($hash, $dev) = @_;
my $dn = $dev->{NAME};
my $hn = $hash->{NAME};
my $hn = $hash->{NAME};
my $hs = "";
if(defined($hash->{NOTIFYSTATE})) {
$hs = $hash->{NOTIFYSTATE};
}
my $reading = $dev->{CHANGED}[0];
$reading = "" if(!defined($reading));
Log3($hash,3, "cloneDummy: $hn D: $dn R: $reading");
Log3($hash,4, "cloneDummy: $hash D: $dn R: $reading");
my ($rname,$rval) = split(/ /,$reading,2);
$rname = substr($rname,0,length($rname)-1);
my %check = map { $_ => 1 } split(/,/,AttrVal($hn,'cloneIgnore',''));
readingsBeginUpdate($hash);
readingsBulkUpdate($hash, $rname, $rval);
readingsBulkUpdate($hash,'state','active');
if (($hs ne "") && ($rname eq $hs) ){
readingsBulkUpdate($hash,"_state", $reading);
}
readingsBulkUpdate($hash,"state", "active");
unless (exists ($check{$rname})) {
readingsBulkUpdate($hash, $rname, $rval);
}
readingsEndUpdate($hash, 1);
return;
@ -67,37 +78,45 @@ sub cloneDummy_Notify($$) {
<a name="cloneDummy"></a>
<h3>cloneDummy</h3>
<ul>
This module provides a cloneDummy which will receive readings from any other device sending data to fhem.<br/>
E.g. may be used in an FHEM2FHEM environment<br/>
<br/>
Defines a clone of a device or transferred by FHEM2FHEM in log mode devices and is taking its readings.
It makes sense to call remote FHEM installations involve reading , testing or programming.
<br><br>
<a name="cloneDummydefine"></a>
<b>Define</b>
<ul>
<code>define &lt;cloneDevice&gt; cloneDummy &lt;sourceDevice&gt; [reading]</code>
<br/>
<br/>
Example:<br/>
<br/>
<ul><code>define clone_OWX_26_09FF26010000 cloneDummy OWX_26_09FF26010000</code></ul>
<br/>
Optional parameter [reading] will be written to STATE if provided.<br/>
<br/>
Example:<br/>
<br/>
<ul><code>define clone_OWX_26_09FF26010000 cloneDummy OWX_26_09FF26010000 temperature</code></ul>
</ul>
<br/>
<a name="cloneDummydefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; cloneDummy &lt;sourcedevice&gt;</code>
<br><br>
<a name="cloneDummyset"></a>
<b>Set</b> <ul>N/A</ul>
<br/>
Example:
<ul>
<code>define clone_OWX_26_09FF26010000 cloneDummy OWX_26_09FF26010000</code><br>
</ul>
</ul>
<br>
<a name="dummyset"></a>
<b>Set</b> <ul>N/A</ul><br>
<a name="dummyget"></a>
<b>Get</b> <ul>N/A</ul><br>
<a name="dummyattr"></a>
<b>Attributes</b>
<ul>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
<br>
<a name="cloneDummyget"></a>
<b>Get</b> <ul>N/A</ul>
<br/>
<a name="cloneDummyattr"></a>
<b>Attributes</b>
<ul>
<li><a href="#readingFnAttributes"><b>readingFnAttributes</b></a></li>
<li><b>cloneIgnore</b> - comma separated list of readingnames that will NOT be generated.<br/>
Usefull to prevent truncated readingnames coming from state events.</li>
</ul>
<br/>
<b>Important: You MUST use different names for cloneDevice and sourceDevice!<br/>
</ul>
=end html
@ -107,34 +126,39 @@ sub cloneDummy_Notify($$) {
<a name="cloneDummy"></a>
<h3>cloneDummy</h3>
<ul>
Definiert einen Clon eines Devices oder von FHEM2FHEM im Logmodus uebergebenen Devices und uebernimmt dessen Readings.
Sinnvoll um entfernte FHEM-Installationen lesend einzubinden,zum Testen oder Programmieren.
Definiert einen Clon eines Devices oder von FHEM2FHEM im Logmodus uebergebenen Devices und uebernimmt dessen Readings.
Sinnvoll um entfernte FHEM-Installationen lesend einzubinden, zum Testen oder Programmieren.
<br><br>
<a name="cloneDummydefine"></a>
<b>Define</b>
<ul>
<code>define &lt;name&gt; cloneDummy &lt;Quelldevice&gt;</code>
<code>define &lt;name&gt; cloneDummy &lt;Quelldevice&gt; [reading]</code>
<br><br>
Example:
<ul>
<code>define clone_OWX_26_09FF26010000 cloneDummy OWX_26_09FF26010000</code><br>
</ul>
Aktiviert den cloneDummy, der dann an das Device &lt;Quelldevice&gt; gebunden ist. Mit dem optionalen Parameter reading
wird bestimmt, welches reading im STATE angezeigt wird, stateFormat ist auch weiterhin möglich.
<ul>
Beispiel: Der cloneDummy wird lesend an den Sensor OWX_26_09FF26010000 gebunden und zeigt im State temperature an.
</ul>
<ul>
<code>define Feuchte cloneDummy OWX_26_09FF26010000 temperature</code><br>
</ul>
</ul>
<br>
<a name="dummyset"></a>
<a name="cloneDummyset"></a>
<b>Set</b> <ul>N/A</ul><br>
<a name="dummyget"></a>
<a name="cloneDummyget"></a>
<b>Get</b> <ul>N/A</ul><br>
<a name="dummyattr"></a>
<a name="cloneDummyattr"></a>
<b>Attributes</b>
<ul>
<li>clonIgnore<br>
Eine durch Kommata getrennte Liste der readings, die cloneDummy nicht in eigene readings umwandelt
</li><br>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
<br>