Neues Modul InfluxDBLogger

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

Vorheriges Thema - Nächstes Thema

timmib

#45
Guten Tag,

wie oben beschrieben gibt es eine neue Version.

Zitat*** UPDATE  28.11.2020 ***
Das Schema ist jetzt frei konfigurierbar über die Attribute measurement,tags,fields.
Die HTTP Calls werden nun bei Bulk-Updates vereint.

Man kann nun alles verstellen wie das Schema aussieht.
Aus dem Standard:

  • measurement pro reading
  • tag als device
  • nur ein field 'value' gleich reading.

Kann man nun z.B.
  • measurement pro device
  • mehrere tags frei wählbar
  • mehrere fields reading=wert

machen.

Dafür setzt man z.B. die Attribute so:
attr influx fields $READINGNAME=$READINGVALUE
attr influx measurement $DEVICE
attr influx tags x=y,a=b


Außerdem wird nun nurnoch ein HTTP-Call pro Notify gemacht.

Viel Spaß beim Ausprobieren.

In meiner Testumgebungs klappt es super.

VG

Tim




gvzdus

Moin, wo Tim schon so fleißig Perl geschrieben hat, schreibe ich mal, warum das prima ist:

Ich bin bei InfluxDB Neuling, aber es leuchtet mir ein, dass es effektiver ist:

Zeit A: Wert1 = x1, Wert2 = x2, Wert 3 = x3

anstelle von

Zeit A1: Wert1 = x1
Zeit A2: Wert2 = x2
Zeit A3: Wert3 = x3

wegzuschreiben. Das genau erzielt die Umstellungsmöglichkeit auf "Device = Measurement" - sofern ein Device mehrere Readings hat, die geloggt werden sollen. In meinem Szenario trifft das auf die Shellys, auf den OBIS-Stromzähler und auf die Solarbilanz je Minute zu.

Selbst, wenn man es nicht so "fährt", führt durch das Notify-Bundling in einen HTTP-Request das neue Modul ohne Änderung dazu, dass für die im Beispiel drei Werte nur ein HTTP-Aufruf gemacht wird. Das ist besonders dann erheblich, wenn es um HTTPS statt HTTP geht - denn da ging mein Raspi 3B+ sofort um 25% in der CPU hoch.

Deswegen ist das m.E. ein großartiger Fortschritt - vielen Dank, Tim!

Wurstwasser

Hi,
super Modul! :)

Ich habe es schon zum Laufen bekommen, allerdings hätte ich auch noch gerne den Alias meines Devices als Tag.
Gibt es da eine Möglichkeit? Z.B. $DEVICEALIAS ?

timmib

Hi,

noch gibt es das nicht. Ich hatte geplant einfach den Zugriff auf alle Internals und Attribute zu erlauben. Dann wäre der Alias ja mit drin.

Ok?

Viele Grüße

Tim

timmib

Hier die neue Version zum Testen.

attr influx tags device={AttrVal($device, "alias", "fallback")}

In die geschweiften Klammern kann jeder Perl-Ausdruck der eine Zeichenkette zurück gibt. $name, $device, $reading, $value stehen als Variablen zur Verfügung.

Bitte schön  :)



Karflyer

Hallo Tim,

klasse Modul was du hier entwickelts. Um einiges besser als die bisherige Anbindung von FHEM an influxdb. Nachdem influxdb in der Version 2.0 nun offiziell ist, habe ich in den letzten Wochen einige Zeit mit der neuen Version gearbeitet und muss sagen, dass die um einiges komfortabler im Handling ist. Insbesondere dann, wenn man wie ich influxdb in einem Docker-Container laufen hat. Hier sind nun die Module 'influxdb', 'chronograf' und 'kapacitor' unter einem Dach (in einem Container) zusammengefasst. Und auch sonst hat sich einiges getan. Influxdb 2.0 arbeitet bei dem Datenzugriff nun nicht mehr mit 'name' und 'password' sondern mit einem Token. Ich würde natürlich gerne auch FHEM an influxdb 2.0 anbinden. Wäre es möglich, dass du das Szenario mit dem Token in dein Modul einbaust?

Grüße
Stefan

timmib

Hi,

freut mich zu hören.

Das wäre dann eine neue Option in security wo heute nur basic_auth und none unterstützt wird.

Kann ein paar Tage dauern, da ich mir eine VM mit Influx2 bzw. mit Token Authorisierung einrichten muss. Ich gebe ungern Sachen raus, die ich nicht selber testen kann.

VG

Tim

timmib

Hallo, bitte mal testen ob das bei Dir klappt.

Das token muss ähnlich wie das Password per Set gespeichert werden, damit es verschlüsselt wird.

Ich habe es lokal getestet, da ging es.

Viele Grüße

Tim

Karflyer

ZitatHallo, bitte mal testen ob das bei Dir klappt.

Das token muss ähnlich wie das Password per Set gespeichert werden, damit es verschlüsselt wird.

Ich habe es lokal getestet, da ging es.

Viele Grüße

Tim

Das funktioniert bei mir leider so noch nicht. Im Log wird die folgende Fehlermeldung geworfen:
2020.12.06 21:19:04 4: InfluxDBLogger: [influxdb_log] notified from device LaCrosse_0A
2020.12.06 21:19:04 4: InfluxDBLogger: [influxdb_log] notified from device LaCrosse_0A about temperature: 23.1
2020.12.06 21:19:04 5: InfluxDBLogger: [influxdb_log] set ?
2020.12.06 21:19:04 5: InfluxDBLogger: [influxdb_log] set ?
2020.12.06 21:19:04 5: InfluxDBLogger: [influxdb_log] set ?
2020.12.06 21:19:04 5: InfluxDBLogger: [influxdb_log] set ?
2020.12.06 21:19:04 4: InfluxDBLogger [influxdb_log] - Read token from file
2020.12.06 21:19:04 4: InfluxDBLogger: [influxdb_log] Sending data temperature,site_name=LaCrosse_0A value=23.1
to http://192.168.2.168:8086/write?db=fhem
2020.12.06 21:19:04 1: InfluxDBLogger: [influxdb_log] Error = 404 Not Found
2020.12.06 21:19:04 5: InfluxDBLogger: [influxdb_log] set ?


Ich denke, dass beim schreiben der Daten die Angabe der Organisation fehlt. unter Python sieht der Aufruf folgendermaßen aus:

write_api.write(bucket, org, influx_json_prototyp)

'Bucket' ist Datenbank und 'org' die Organisation die man initial angegeben hat.
Hier auch ein List meines Devices. Vielleicht habe ich bei der Definition einen Fehler gemacht.

Internals:
   CFGFN     
   DATABASE   fhem
   DEF        http://192.168.2.168:8086 fhem LaCrosse_0A
   FUUID      5fcd3415-f33f-bb67-e8c2-80a0dd5f1725795a
   NAME       influxdb_log
   NOTIFYDEV  LaCrosse_0A
   NR         9935
   NTFY_ORDER 50-influxdb_log
   STATE      Statistics: t=153 s=0 f=123
   TYPE       InfluxDBLogger
   URL        http://192.168.2.168:8086
   token      saved
   READINGS:
     2020-12-06 20:47:20   dropped_writes  9
     2020-12-06 20:47:20   dropped_writes_last_message LaCrosse_0A state T
     2020-12-06 21:28:15   failed_writes   123
     2020-12-06 21:28:15   failed_writes_last_error 404 Not Found
     2020-12-06 21:28:15   state           Statistics: t=153 s=0 f=123
     2020-12-06 21:28:15   total_writes    153
Attributes:
   DbLogExclude .*
   disable    0
   readingInclude temperature:.*
   room       Log
   security   token
   verbose    5


Grüße
Stefan

timmib

Hi, du musst das mapping auf Datenbanken in Influx2 machen.

VG Tim


Karflyer

ZitatHi, du musst das mapping auf Datenbanken in Influx2 machen.

VG Tim

Ah. Man lernt nie aus. Das Thema kannte ich noch nicht. Nachdem ich das Mapping gesetzt habe, läuft es nun wie am  Schnürchen.
Danke dir Tim!

Grüße
Stefan

Karflyer

#57
ZitatHier die neue Version zum Testen.

Code: [Auswählen]
attr influx tags device={AttrVal($device, "alias", "fallback")}

In die geschweiften Klammern kann jeder Perl-Ausdruck der eine Zeichenkette zurück gibt. $name, $device, $reading, $value stehen als Variablen zur Verfügung.

... das habe ich so eingegeben. Hat bei mir Anfangs nicht funktioniert. Bei mir setzt sich der 'Alias' häufig aus zwei Wörtern zusammen z.B. 'Temperatur Wohnzimmer'. Das mag influxdb nicht und gibt ein '400 Bad Request' zurück. Ich habe es dann durch ein entsprechendes regex gelöst:
device={my $str = AttrVal($device,"alias",$device); $str =~ s/\s/_/g; return $str;}

Würdest du es als sinnvoll erachten, wenn du in deinem Modul prüfst ob sich das Tag aus mehreren Wörtern zusammensetzt und du die Leerzeichen durch einen Unterstrich (_) direkt im Modul ersetzt?

Grüße Stefan

timmib

Hallo Karflyer,

ich würde das sogar so lassen. Andernafalls würde das Modul ja immer auf Suche nach Leerzeichen etc. gehen.

Viele Grüße

Tim

Karflyer

Hallo Tim,

beim Neustart von FHEM erhalte ich die folgenden Fehlermeldungen im Log:
2020.12.08 21:10:13 1: PERL WARNING: Scalar value @ab[1] better written as $ab[1] at ./FHEM/93_InfluxDBLogger.pm line 264, <$fh> line 3819.
2020.12.08 21:10:13 1: PERL WARNING: Scalar value @ab[0] better written as $ab[0] at ./FHEM/93_InfluxDBLogger.pm line 264, <$fh> line 3819.
2020.12.08 21:10:13 2: InfluxDBLogger: Initialized new
2020.12.08 21:10:13 1: PERL WARNING: Use of uninitialized value in regexp compilation at ./FHEM/93_InfluxDBLogger.pm line 41, <$fh> line 3819.
2020.12.08 21:10:13 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/93_InfluxDBLogger.pm line 46, <$fh> line 3819.


Das tut dem weiteren Betrieb des Moduls anscheinend aber nicht weh.

Grüße
Stefan