$hash->{NOTIFYDEV}

Begonnen von Sailor, 12 April 2018, 06:14:18

Vorheriges Thema - Nächstes Thema

Sailor

Moinsen developer Gemeinde

ich habe von einem Nutzer meines GasCalculator´- Moduls den folgenden freundlichen Hinweis bekommen:

https://forum.fhem.de/index.php/topic,47909.msg792943.html#msg792943
Zitat von: KölnSolar am 11 April 2018, 10:59:54
Hallo Sailor,
über freezemon ist mir aufgefallen, dass der GasCalculator permanent im freezemon-Log auftaucht, wenn ein freeze aufgetreten ist.
Weil GasCalculator eigentlich relativ unverdächtig ist, habe ich mal mit verbose=5 geloggt und war überrascht, dass das Modul bei jedem event aufgerufen wird. Meines Erachtens liegt es an der fehlenden Definition von $hash->{NOTIFYDEV}.

Ich hab mal $hash->{NOTIFYDEV} = substr($RegEx,0,index($RegEx,":")); in der GasCalculator_Define eingebaut und nun ist Ruhe. Kann man mit mehr Perl-Wissen als ich es habe bestimmt eleganter machen.  :-[

Grüße Markus

Ich kann im Wiki und im Forum nichts spezifisches zum Nachlesen finden.

Kann mir Jemand von Euch Verweise zu Hintergrund-Informationen geben bzw. mir dies ggf. erklären?

  • Was ist der freezemon-Log und wann taucht dort was auf?
  • Was bewirkt der genannte Eintrag in der "define" ´- Sub?
  • Ist es ratsam den so zu verwenden oder gibt es eine elegantere Lösung?

DANKE!

Gruß
    Sailor
******************************
Man wird immer besser...

CoolTux

Im $hash->{NOTIFYDEV} legst Du fest auf welche Devicenamen Deine $hash->{NotifyFn} triggern soll.
Wenn Dein Modul statische Namen kennt, also im einfachsten Fall global und $hash->{NAME} kannst Du das in der Initialize gleich mit angeben.

Wenn sich aber die Devicenamen erst aus der DEF zum Beispiel ergeben, dann musst Du $hash->{NOTIFYDEV} innerhalb der DEF mit Werten versehen.

Mehr Infos findest Du hier
https://wiki.fhem.de/wiki/DevelopmentModuleAPI#notifyRegexpChanged
und hier
https://wiki.fhem.de/wiki/DevelopmentModuleIntro#Internals
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Sailor

Hi CoolTux

Zitat von: CoolTux am 12 April 2018, 08:05:30
Wenn sich aber die Devicenamen erst aus der DEF zum Beispiel ergeben, dann musst Du $hash->{NOTIFYDEV} innerhalb der DEF mit Werten versehen.

Mehr Infos findest Du hier
https://wiki.fhem.de/wiki/DevelopmentModuleAPI#notifyRegexpChanged

Danke für die Info

Bezogen auf mein GasCalculator - Modul müsste ich also in meine Define


###START###### Activate module after module has been used via fhem command "define" ##########################START####
sub GasCalculator_Define($$$)
{
        my ($hash, $def)              = @_;
        my ($name, $type, $RegEx, $RegExst) = split("[ \t]+", $def, 4);


        ### Check whether regular expression has correct syntax
        if(!$RegEx || $RegExst) 
        {
                my $msg = "Wrong syntax: define <name> GasCalculator device[:event]";
                return $msg;
        }

        ### Check whether regular expression is misleading
        eval { "Hallo" =~ m/^$RegEx$/ };
        return "Bad regexp: $@" if($@);
        $hash->{REGEXP} = $RegEx;       

        ### Writing values to global hash
        $hash->{NAME}                                                   = $name;
        $hash->{STATE}                                  = "active";
        $hash->{REGEXP}                                 = $RegEx;

        if(defined($attr{$hash}{SiPrefixPower}))
        {
                if    ($attr{$hash}{SiPrefixPower} eq "W" ) {$hash->{system}{SiPrefixPowerFactor} = 1          ;}
                elsif ($attr{$hash}{SiPrefixPower} eq "kW") {$hash->{system}{SiPrefixPowerFactor} = 1000       ;}
                elsif ($attr{$hash}{SiPrefixPower} eq "MW") {$hash->{system}{SiPrefixPowerFactor} = 1000000    ;}
                elsif ($attr{$hash}{SiPrefixPower} eq "GW") {$hash->{system}{SiPrefixPowerFactor} = 1000000000 ;}
                else                                        {$hash->{system}{SiPrefixPowerFactor} = 1          ;}
        }
        else
        {
                                                     $hash->{system}{SiPrefixPowerFactor} = 1;
        }
         
        ### Writing log entry
        Log3 $name, 5, $name. " : GasCalculator - Starting to define module";

        return undef;
}
####END####### Activate module after module has been used via fhem command "define" ############################END#####



Müsste ich unter "  ### Writing values to global hash" folgende Zeile einfügen?
notifyRegexpChanged($hash, $RegEx);

Gruß
    Sailor
******************************
Man wird immer besser...