Neues Modul InfluxDBLogger

Begonnen von timmib, 07 Oktober 2020, 23:31:09

Vorheriges Thema - Nächstes Thema

timmib

Hallo Tom,

also "droppen" tut das Modul und nicht Influx. Das hat also nichts mit dem Upgrade zu tun. Wenn Du nicht numerische Werte in die Datenbank schreiben möchtest musst du "tags" dafür verwenden. (siehe gleichnamiges Attribut)

Viele Grüße

Tim

P.S. Bitte eigenen Thread starten.

tomleitner

Hallo Tim,

Danke für Deine Antwort ... also muss ich mich täuschen wenn ich einen Unterschied zu vor dem Upgrade festgestellt habe ....

Danke für den Hinweis mit den Tags ... ich werde das versuchen für jene Readings die ich auch in der Db haben will ...

Danke // Tom

meier81

Zitat von: meier81 am 27 Januar 2021, 22:07:48
Also ich habe das exakt genauso wie du mit einem dummy mit dem gleichen reading durchgeführt, kein Erfolg. Ohne includ und exclude Definition geht alles, include definiert und nichts wird geloggt.

Jetzt kommt der Hammer: Habe einen reload des Moduls ausgeführt, jetzt geht alles. Ich schmeiß mich weg. Heute Morgen Update durchgeführt, anschließend FHEM neu gestartet. Das Modul mit reload geladen um zu sehen ob die Meldungen weg sind, auch alles okay. Was jetzt bei dem reload anderst war und warum es jetzt geht und vorher nie ging wissen die Götter.

Ich berichte auf jeden Fall weiter.

Gruß Markus

Nabend Tim,

wollte dir nur kurz Bescheid geben, Modul läuft seit dem wir über das Problem geschrieben hatten einwandfrei, keine Ahnung warum es vorher nie ging und das Abend dann der ausschlaggebende reload war. Von daher, alles super.

Ich wollte dich nochmal nach deiner Meinung bezüglich einer AddLog-Funktion fragen, das wäre das einzige was ich an dem Modul noch vermisse. Es ist halt eine einfache Art für einen Anstoß zum schreiben der definierten Daten. Ich habe das jetzt mal zum testen in der myUtils nachgebaut (wie ja auch z.B. im Wiki beschrieben), das ganze triggert aber und das wird ja nicht benötigt, es soll lediglich der aktuell in dem angegebenen reading stehende Wert mit dem aktuellen Zeitstempel in die InfluxDB geschrieben werden. Zudem braucht das myUtils für meine 86 Werte ca. 12 Sekunden Laufzeit, in denen geht erstmal nichts mehr. Von daher kommt die Variante eh nicht in Frage.

Ich habe auch schon das DbLog-Modul durchforstet und alle wichtigen Stellen rauskopiert und vorbereitet, das aber funktionsfähig bei dir ins Modul einzubauen sind meine Kenntnisse dann doch zu wenig.

Kannst ja wie gesagt mal Bescheid geben.

Gruß Markus 
QNAP NAS mit Debian VM, darauf FHEM, debmatic, influxdb2 und Grafana || HB-RF-ETH || SIGNALduino 433MHz mit Maple mini || WS980 Wetterstation || Xiaomi Mi Robot mit valetudo-FW || Buderus web KM100 || div. Tasmota-Devices

timmib

Kosten neue Threads bei euch Gebühren? :o

Egal.

Hol mich mal grad ab. Du bist gedanklich bei dem Log Attribut a la DbLogInclude?






meier81

Zitat von: timmib am 02 Februar 2021, 22:57:42
Kosten neue Threads bei euch Gebühren? :o

Egal.

Hol mich mal grad ab. Du bist gedanklich bei dem Log Attribut a la DbLogInclude?

Dann lass uns doch einfach hier weitermachen, habe ich ja schon einen erstellt  ;)
https://forum.fhem.de/index.php/topic,118049.0.html
QNAP NAS mit Debian VM, darauf FHEM, debmatic, influxdb2 und Grafana || HB-RF-ETH || SIGNALduino 433MHz mit Maple mini || WS980 Wetterstation || Xiaomi Mi Robot mit valetudo-FW || Buderus web KM100 || div. Tasmota-Devices

Weisswurstverkäufer

Hallo Tim,

habe das Modul heute auch mal eingerichtet. Ist zwar etwas kompliziert wenn man bei 0 anfängt - wenn es einmal eingerichtet ist scheint es aber gut zu funktionieren  :)

Was ich ein bisschen schade finde ist dass nur numerische Werte funktionieren. Wäre es nicht möglich eine Whitelist für andere Werte einzubauen? Ist irgendwie unschön dass ich jetzt open auf 1 und closed auf 0 mappen muss, nur um es dann in Grafana ("discrete"-Plugin) wieder zurück umwandeln zu müssen.

timmib

Hallo WWV,

das ist Konzept bedingt bei InfluxDB so.

Dort sind Texte meist als Tag abgebildet.
Das wird von dem Modul mittels dem Attribut tags auch unterstützt.

Viele Grüße

Tim

Weisswurstverkäufer

Zitat von: timmib am 11 Februar 2021, 14:35:38
Das wird von dem Modul mittels dem Attribut tags auch unterstützt.

So richtig schlau werde ich aus dem commandref dazu leider nicht. Kannst Du mir vielleicht als Beispiel nennen wie das für Fenstersensoren (state open/closed) aussehen müsste (das Beispiel würde ja auch gut ins commandref passen)? Das lässt sich dann ja auch auf Bewegungsmelder (motion/nomotion) übertragen

timmib

#143
Ein Beispiel, ist es den Alias auszuwerten oder einfach fest das Tag auf "logger1" zu setzen wenn man aus mehreren Loggern heraus auf das selbe measurement logt.

In deinem Fall, wo es eigentlich um Readings geht, könnt man das mit Perlausdrücken hinbekommen. Das ist aber wenig ratsam.

Grundsätzlich unterstützt InfluxDB ja auch Strings als Fieldvalue nur keine Mischung. Also wenn alle Readings mit unterschiedlichem Tag in das selbe Feld schreiben. Dies ist das Standardverhalten des Moduls aus Legacy Gründen.

Wenn man das Attribut fields auf $ReadingName=$ReadingValue hat, müsste es eigentlich gehen. Das Modul verhindert das aber zur Zeit - zu Unrecht.


atmelfreak

Erstmal vielen Dank für das tolle Modul. Ich habe es seit ein paar Tagen im Einsatz und es läuft soweit sehr gut.
Leider habe ich ein kleines Problem: Es treten sporadisch Timeouts auf:

Internals:
   CFGFN     
   DATABASE   fhem
   DEF        http://192.168.2.188:8086 fhem myElectricityCalculator,myGasCalculator,Thermometer.*,Solar,SteckdoseTV,Zirkulationspumpe
   FUUID      6027ce14-f33f-b66c-2893-25d9615b16533d81
   NAME       InfluxDB
   NOTIFYDEV  myElectricityCalculator,myGasCalculator,Thermometer.*,Solar,SteckdoseTV,Zirkulationspumpe
   NR         150
   NTFY_ORDER 50-InfluxDB
   STATE      Statistics: t=58279 s=56110 f=2142 e=91059
   TYPE       InfluxDBLogger
   URL        http://192.168.2.188:8086
   passwd     saved
   READINGS:
     2021-02-13 23:59:55   dropped_writes  18
     2021-02-13 23:59:55   dropped_writes_last_message Thermometer_Aussen statVoltageDayLast Min
     2021-02-14 15:16:56   failed_writes   2142
     2021-02-14 15:16:56   failed_writes_last_error write to http://192.168.2.188:8086 timed out
     2021-02-14 16:23:50   state           Statistics: t=58279 s=56110 f=2142 e=91059
     2021-02-14 16:23:44   succeeded_writes 56110
     2021-02-14 16:23:50   total_events    91059
     2021-02-14 16:23:50   total_writes    58279
Attributes:
   conversions ON|on|true|yes|up=1,false|OFF|off|no|down=0
   deviceTagName device
   readingExclude (^STAT_.*|^SENSOR.*Id:.*|.*TempUnit:.*|.*Time:.*)
   room       ZZ-Intern


Die InfluxDB läuft auf einem 2. RPI, aber eigentlich habe ich keine Netzwerkprobleme, beide RPIs sind per Ethernet verbunden.
Kann man irgendwo die Timeouts erhöhen?
Bedeutet es, dass 2142 Messwerte nicht in die Datenbank geschrieben wurden oder wird das Schreiben im Fehlerfall wiederholt?

atmelfreak

Das FHEM Log schaut so aus:

2021.02.14 12:40:56 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 12:40:56 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 12:40:56 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 13:02:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 13:40:56 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 13:40:56 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:08:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:08:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:08:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:08:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:08:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:08:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:08:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:08:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:08:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:08:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:08:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:08:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:08:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:12:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:12:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:12:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:12:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:12:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:12:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:12:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:12:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:12:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:12:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 14:12:55 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 15:16:56 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 15:16:56 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 15:16:56 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out
2021.02.14 15:16:56 1: InfluxDBLogger: [InfluxDB] Error = write to http://192.168.2.188:8086 timed out


Also sporadisch immer wieder Timeouts...

timmib

Hi,

freut mich zu hören.

Zu den Timeouts kann ich leider nicht viel sagen, außer das es entweder ein Problem in deinem Netz gibt(unwahrscheinlich) oder der InfluxDB-Server etwas viel zu tun hat von Zeit zu Zeit.

Viele Grüße

Tim

atmelfreak

Hi Tim,

werden abgebrochene Inserts nachgeholt oder gehen die Daten verloren?

Ich habe mir die Sache mit den Timeouts mal angeschaut. Da du beim Aufruf von HttpUtils_NonblockingGet keinen Timeout angibst, zieht der Default von 4 Sekunden. Ich habe testweise den Timeout auf 10 Sekunden gesetzt und incrementalTimout auf 1 gesetzt. Bisher sind keine Timeouts mehr aufgetreten, aber ich muss es noch weiter beobachten.

Hier meine Änderung an deinem Code:
        my $reqpar = {
                    url => InfluxDBLogger_BuildUrl($own_hash),
                    method => "POST",
                    data => $data,
                    hideurl => 1,
                    incrementalTimout => 1,
                    timeout => 10,
                    hash => $own_hash,
                    callback => \&InfluxDBLogger_HttpCallback
        };
        InfluxDBLogger_AddSecurity($own_hash,$name,$reqpar);

        Log3 $name, 4, "InfluxDBLogger: [$name] Sending data ".$reqpar->{data}." to ".$reqpar->{url};
        HttpUtils_NonblockingGet($reqpar);


Könntest Du den Timeout und den incrementalTimout als Attributes in dein Modul einbauen?

Viele Grüße
Frank

timmib

Hallo Frank,

ne das wird leider nix gepuffert oder ähnliches. alles was nicht zugestellt werden konnte ist verloren.

Die Timeouts kann man ja als Attribut einbauen.

atmelfreak

Hi Tim,

nach dem Setzen des Timeouts auf 10 Sekunden (Standard war 4 Sekunden) und setzen des incrementalTimeout Parameters (Achtung Schreibfehler in der Doku!) auf 1 habe ich seit gestern Nachmittag keinen einzigen Timeout Abbruch mehr gehabt.

Es wäre toll, wenn Du die beiden Attribute in der nächsten Version Deines Moduls einbauen könntest.

Viele Grüße
Frank