# $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 # von betateilchen gab es viel Hilfe (eigentlich wars betateilchen) # Anleitung: # Um die Änderung zu nutzen, einfach einen cloneDummy anlegen # # Eintrag in der fhem.cfg: # define cloneDummy [reading] # attr cloneIgnore # ############################################# package main; use strict; use warnings; sub cloneDummy_Initialize($) { my ($hash) = @_; $hash->{DefFn} = "cloneDummy_Define"; $hash->{NotifyFn} = "cloneDummy_Notify"; $hash->{AttrList} = "cloneIgnore ".$readingFnAttributes; } sub cloneDummy_Define($$) { my ($hash, $def) = @_; my @a = split("[ \t][ \t]*", $def); return "Wrong syntax: use define cloneDummy [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; } sub cloneDummy_Notify($$) { my ($hash, $dev) = @_; my $dn = $dev->{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,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); 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; } 1; =pod =begin html

cloneDummy

    This module provides a cloneDummy which will receive readings from any other device sending data to fhem.
    E.g. may be used in an FHEM2FHEM environment

    Define
      define <cloneDevice> cloneDummy <sourceDevice> [reading]

      Example:

        define clone_OWX_26_09FF26010000 cloneDummy OWX_26_09FF26010000

      Optional parameter [reading] will be written to STATE if provided.

      Example:

        define clone_OWX_26_09FF26010000 cloneDummy OWX_26_09FF26010000 temperature

    Set
      N/A

    Get
      N/A

    Attributes
    • readingFnAttributes
    • cloneIgnore - comma separated list of readingnames that will NOT be generated.
      Usefull to prevent truncated readingnames coming from state events.

    Important: You MUST use different names for cloneDevice and sourceDevice!
=end html =begin html_DE

cloneDummy

    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.

    Define
      define <name> cloneDummy <Quelldevice> [reading]

      Aktiviert den cloneDummy, der dann an das Device <Quelldevice> gebunden ist. Mit dem optionalen Parameter reading wird bestimmt, welches reading im STATE angezeigt wird, stateFormat ist auch weiterhin möglich.
        Beispiel: Der cloneDummy wird lesend an den Sensor OWX_26_09FF26010000 gebunden und zeigt im State temperature an.
        define Feuchte cloneDummy OWX_26_09FF26010000 temperature

    Set
      N/A

    Get
      N/A

    Attributes
    • clonIgnore
      Eine durch Kommata getrennte Liste der readings, die cloneDummy nicht in eigene readings umwandelt

    • readingFnAttributes

    Wichtig: Es müssen unterschiedliche Namen für <name> und <Quelldevice> verwendet werden!
=end html_DE =cut