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
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
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