FHEM - Hausautomations-Systeme > Unterstützende Dienste

Neues Modul InfluxDBLogger

<< < (2/38) > >>

kadettilac89:

--- Zitat von: timmib am 12 Oktober 2020, 21:17:50 ---Also bei mir funktioniert das wunderbar - dachte ich bis grade,

Wenn ich z.B. Harry als devspec am Ende vom define angebe habe ich automatisch ein NOTIFYDEV mit dem Wert Harry und bekommen auch nur noch Ereignisse von Harry gemeldet.

Ich sehe grad beim meinem a,b,c Beispiel setzt der das NOTIFYDEV nicht. Laut https://wiki.fhem.de/wiki/DevelopmentModuleAPI#notifyRegexpChanged  Womöglich ist das bei a,b,c der Fall - Schade.

Und nu? Soll ich jetzt selber filtern oder selber $event_regexp setzen.

BTW. Ich habe das andere Thema verschoben und ein paar neue Sache eingebaut. Inklusive konfigurierbarer Konvertierung.

--- Ende Zitat ---

Ich schreibe mal hier weiter. Hier kann ich editieren.

Es ist die Frage was gewollt ist. Devspec kann auch folgendes ... <readingname>=<Wert oder regex>. Das ist der große Vorteil von devspec. Das kann notifydev nicht. Das macht "nur" regex auf Devicename.

Ich finde es verwirrend wenn Regex auf Devicename und dann später Regex auf Reading. Regex-Syntax ist nicht so ohne. Da hast du dann laufend Supportprobleme mit Leuten die mit Regex nicht umgehen können. Nicht jeder ist Entwickler ....

Wie gesagt, devspec wäre eine feine Sache da mächtig und schon gut dokumentiert. Jetzt müsstest du bei Init einmalig ein Array füllen und puffern. devspec2array füllt ein Array mit allen Devices auf die devspec zutrift.

Das Array ist statisch bis sich die Definition ändert. Beim Aufruf von Notify ... in der Sub die das Filtern auf die Events macht .... kannst dann als ersten Schritt ein grep -w oder eine andere Perl Funktion rufen die prüft ob das event-device im Array vorkommt. An der Stelle, an der ich quck'n'dirty auch devspec2array eingebaut habe ... siehe Kommentar im anderen Thread.

Ich habe mich noch nie mit den Dev-Richtlinien in Fhem beschäftigt. Es müsste aber funktionieren ein array als element in der list (hash->{xxxx})  zu setzen und dann später zu prüfen, $hash ist überall verfügbar.

Speicher des Arrays sollte nicht viel sein. Wenn ich mal UTF-8 nehme mit max 4 bytes pro Char, Dev-Namen mit 30 Zeichen und 200 Devices auf das devspec filtert wären das worst case 24 KB Ram wenn ich jetzt nicht falsch gerechnet habe. Also akzeptabel.

Ich denke das Array wäre schnell eingebaut mit weniger Aufwand als selber was auszuwerten. Im Idealfall 2 Zeilen Code.

Ich meine so in etwa. Ich habe kein Fhem hier an dem ich testen kann. Die Syntax wie man auf Array in der Liste zugreift weiß ich jetzt nicht, ggf. fehlt irgendwo ein @ oder % zum referenzieren ...


--- Code: ---sub InfluxDBLogger_Initialize($) {
    my ($hash) = @_;
    $hash->{DefFn}    = "InfluxDBLogger_Define";
    $hash->{NotifyFn} = "InfluxDBLogger_Notify";
    $hash->{SetFn} = "InfluxDBLogger_Set";
    $hash->{RenameFn} = "InfluxDBLogger_Rename";
    $hash->{AttrList} = "disable:1,0 security:basic_auth,none username readingInclude readingExclude conversions deviceTagName";
    $hash ->{DevSpecArray} = devspec2array($hash->{REGEX}); <<<<---- Array füllen
    Log3 undef, 2, "InfluxDBLogger: Initialized new";
}



in **notify

my $devName = $dev_hash->{NAME}; # Device that created the events
my $events = deviceEvents($dev_hash, 1);

return "" if not grep { $_ eq $devName } $own_hash->{devSpecArray};     #<< -------   check if device in array

    return "" if($devName eq "global" && grep(m/^INITIALIZED|REREADCFG$/, @{$events}));
    return "" if($own_hash->{TYPE} eq $dev_hash->{TYPE}); # avoid endless loops from logger to logger


--- Ende Code ---





timmib:
Wäre schön, wenn ich nur 200 Devices hätte  ::)

Dein Plan hat nur einen Haken. Alle Definition die anschließend erstellt werden würden nicht erkannt werden. Beim Neustart ist das ganze womöglich noch schlimmer.

Demnach https://wiki.fhem.de/wiki/DevelopmentModuleIntro kann ich das $hash->{NOTIFYDEV} auch einfach selber setzen und FHEM macht das.

Ich probier das mal kurz in der Entwicklungs VM.

timmib:
Klappt wunderbar. Habe die neue Version an die Themeneröffnung angehangen. Musste nur eine Zeile ändern und eine löschen.

kadettilac89:
du hast jetzt in der Definition auf {NOTIFYDEV} gewechselt. Bei mir schein das devspec dann zu  funktionieren.

was meinst du mit a,b,c Beispiel, wie sieht da die Definition und das Event aus, oder was willst du filtern? .. .dein Kommentar im anderen Thread.


--- Zitat von: timmib am 12 Oktober 2020, 21:17:50 ---Ich sehe grad beim meinem a,b,c Beispiel setzt der das NOTIFYDEV nicht. Laut

--- Ende Zitat ---

timmib:
Ich meinte mit a,b,c sowas wie hier wie in meinem konkreten produktiven Beispiel. Dort reduziere ich in der Definition auf die drei Klima-Geräte.


--- Code: ---defmod influxer_klima InfluxDBLogger http://hostname:8086 klima klimaKindControl,klimaBueroControl,klimaSchlafzimmerControl
attr influxer_klima readingInclude pwr_hour_last:.*
--- Ende Code ---

Daraus hat der vorher nicht von alleine mittles notifyRegexpChanged eine NOTIFYDEV gemacht. In der Doku steht ja auch
--- Zitat ---Es kann durchaus vorkommen, dass kein Eintrag in NOTIFYDEV gesetzt wird, da nicht zweifelsfrei zwischen Definitionsnamen und Event unterschieden werden kann.
--- Ende Zitat ---
Wobei ich nicht gedacht hätte, das er a,b,c nicht als devspec erkennen würde.

Egal, jetzt geht es.

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln