Neues Modul InfluxDBLogger

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

Vorheriges Thema - Nächstes Thema

kadettilac89

Zitat von: rob am 15 November 2021, 11:24:45
OK, habe meine Probleme gelöst bekommen und bin nun auf Influx V1 unterwegs. Werte kommen an.

Frage in die Runde: Was habt Ihr sinnvollerweise für RP's und CQ's auf den Datenbanken eingerichtet. Oder macht Ihr ggf. gar kein Downsampling?

Vielen Dank und beste Grüße
rob
Retention Period hab ich im Einsatz. Eigene Datenbank mit eigenem InfluxDB-Device in Fhem. Für Daten die nur kurzzeitig relevant sind, z. B. CPU, Ram ... Retention 14d

Continuous Queries habe ich nicht im Einsatz. Mein Ordner ist nur 800 MB groß, und nur ein Teil davon gehört zu Fhem. Durch Timeseries Konzept sollten große Datenbanken dennoch kaum Performanceeinbußen haben. Ich versuche durch vernünftige event-on-change ... Settings nur zu loggen was nötig ist.

Hasdt du Probleme, oder "nur" Vermutung mit Hang zur Perfektion?

rob

Zitat von: kadettilac89 am 15 November 2021, 15:00:37
Hasdt du Probleme, oder "nur" Vermutung mit Hang zur Perfektion?
Nur Unwissenheit  ;D
Ich schließe daraus, dass ich mir darum keinen großen Kopf machen muss. Korrekt?

Meine Überlegung war, dass ich ggf. über mehrere Jahre hinweg fleißig Daten schreibe. Wie in FHEM prinzipiell auch, doch dort habe ich im LOG festgelegt, wie lange es lebt und ab wann es wegarchiviert wird. Ergo, so dachte ich, müsste ich ähnliches auch mit Influx tun. Hatte irgendwo den Hinweis gelesen, man solle sich tunlichst darüber Gedanken machen.
800MB sind im Vergleich nicht schlimm. Um ein Gefühl zu bekommen: Wie lange schreibst Du schon in die DB? Mit welcher Frequenz  in etwa (sekündl./ minütl.)? Mit eocr kann ich ja festlegen, dass z.B. mind. alle 2Min geschrieben wird usw.

kadettilac89

Zitat von: rob am 15 November 2021, 15:25:36
Nur Unwissenheit  ;D
Ich schließe daraus, dass ich mir darum keinen großen Kopf machen muss. Korrekt?

Meine Überlegung war, dass ich ggf. über mehrere Jahre hinweg fleißig Daten schreibe. Wie in FHEM prinzipiell auch, doch dort habe ich im LOG festgelegt, wie lange es lebt und ab wann es wegarchiviert wird. Ergo, so dachte ich, müsste ich ähnliches auch mit Influx tun. Hatte irgendwo den Hinweis gelesen, man solle sich tunlichst darüber Gedanken machen.
800MB sind im Vergleich nicht schlimm. Um ein Gefühl zu bekommen: Wie lange schreibst Du schon in die DB? Mit welcher Frequenz  in etwa (sekündl./ minütl.)? Mit eocr kann ich ja festlegen, dass z.B. mind. alle 2Min geschrieben wird usw.

Es kommt auf die darunter liegende Hardware an. Bei mir läuft es auf einem Nuc mit Proxmox und einer 512 GB Platte. Da langweilt sich die CPU und Speicher. Ein Raspberry wäre da vielleicht am Limit.

Ich würde es beobachten, ich logge seit 2017 Heizkörper, Wetter, Temperaturen und Luftfeuchte in Räumen. Habe alles von MySQL in InfluxDB importiert. Beim Import habe ich mal verglichen und da war die InfluxDB kleiner als MySql.

Wie geschrieben, es macht mehr Sinn die Events vernünftig in Fhem zu begrenzen als in der DB krampfhaft auf zu räumen. Daten von einer DB ohne auf eine DB mit Retention Period kannst du immer noch schieben. Von welcher Datenmenge redest du aktuell, wie groß ist die DB? Meine reine Fhem ist um die 80, die mit den 14 Tagen ca. 60. Alleine die _internal ist bei mir über 200 groß, das ist die in der sich InfluxDB selber Daten hält.

rob

Danke Dir für die Infos, das hilft mir schon weiter. Hab das alles aufm Raspi. Die totalen Grafana Auswertungen mache ich da eher weniger, aber es wird wie so oft wachsen...

Zitat von: kadettilac89 am 15 November 2021, 16:13:32
Von welcher Datenmenge redest du aktuell, wie groß ist die DB?
Lächerlich klein ist meine noch, nicht einmal 1MB. Hab ja grad erst angefangen (knapp 14Tage) mit grad mal 2x Devices. Ohne Imports usw. Wollte mir halt das einmal einrichten und quasi vergessen ;)
Ja, stimmt, verschieben kann ich jeder zeit.
Parallel überwache ich das System selbst mit Prometheus, das ist auch noch nicht wirklich groß - nur der verwirft per default eh alle 15Tage.

Vielen Dank für den Input  8)
VG
rob

kadettilac89

Ich habe auch beruflich mit Architektur von Server und Systemen zu tun. Oft macht man den Fehler und versucht von Anfang an jede Eventualität abzudecken.

Würde einfach anfangen und dann schauen wo es Probleme gibt und diese dann beheben wenn diese auftreten. Meistens kracht es sowieso an Stellen die nicht bedacht wurden.

wopl

#170
Großen Dank für die "Neu-Interpretation" des InfluxDBLoggers. Habe gerade das völlig veraltete Modul abgelöst.
Nach ein wenig Knobeln klappt es jetzt wie am Schnürchen.
Ganz viele Temperatur und Stromwerte werden jetzt in die InfluxDB geschrieben und mit Grafana angezeigt.

Edit: und jetzt kommen doch noch Fragen:
- ich habe einen typischen Temperatur/Feuchtesensor. Ich möchte gerne alles andere verwerfen und nur "temp" und "hum" in die InfluxDB schicken.
- mach ich das jetzt mit Attribut measurement (wie gebe ich hier beide an? einfach durch Komma getrennt?) oder ist es das Attribut readingInclude?
- oder sind es doch die Fields? ... jetzt bin ich doch ein wenig verwirrt.
- kann mir jemand mal bitte die attr. Zeile als Beispiel geben?

So ganz komme ich mit den Begriffen measurement und reading dann doch noch nicht klar.
Freue mich auf ein wenig Unterstützung.

Schöne Grüße aus Köln,
Wolfram
Haussteuerung mit 300 Devices, Kopplung mit Wago SPS, InfluxDB (Grafana), HomeMatic, Tinkerforge (Fensterkontakte), SmartMeter, Heizungsüberwachung/-logging... Installation in QNAP NAS Docker container vollautomatisiert mit Ansible und GITlab

rob

Hallo Wolfram.

Es gibt imho mehrere Möglichkeiten:
- im Sensor mit event-on-change-reading nur dort ein Event zulassen, wo Du es brauchst
- im Define zum Influx-Device explizit in die Liste aufnehmen, was Du magst
- im attr readingExclude das rausfiltern, was weg haben willst oder mit readingInclude umgekehrt nur das reinnehmen, was explizit haben willst (beides muss zum define passen)

Wahrscheinlich ist eine Kombination aus allem sinnvoll.

Beispiel für event-on-change-reading + event-min-interval im Sensor

attr TempSensor event-min-interval temperature:120,humidity:120,myAbsoluteHumidity:120
attr TempSensor event-on-change-reading temperature:1,battery,humidity:1,myAbsoluteHumidity:1


Beispiel für define

define myTestInflux InfluxDBLogger http://influx-ip:8086 myweatherdb TempSensor.*,DS18B20.*,WH1080


Beispiel für Exclude

attr myTestInflux readingExclude state|.*windDirectionText.*


VG
rob

wopl

Hallo rob,
mit dem event-on-change-reading und event-min-interval hatte ich bis jetzt noch nichts eingestellt. Wird in meine zukünfitigen Änderungen ganz sicher einfließen.

Meine initiale Frage ist damit mit dem readingExclude / readingInclude beantwortet. Klappt jetzt prima.
Vielen Dank,
Wolfram
Haussteuerung mit 300 Devices, Kopplung mit Wago SPS, InfluxDB (Grafana), HomeMatic, Tinkerforge (Fensterkontakte), SmartMeter, Heizungsüberwachung/-logging... Installation in QNAP NAS Docker container vollautomatisiert mit Ansible und GITlab

okuegerl

Geschätzte InfluxDBLogger - Community:
Ich würde gerne InfluxDB verwenden schaffe es aber leider nicht daher erlaube ich mir euch um Rat zu fragen:


Datenbankname: fhemtestdb
user: fhem
psw:  12345

open terminal:
==============
influx
create database fhemtestdb
create user fhem with password '12345' with all privileges
grant all privileges on fhemtestdb to fhem

show users

user admin
---- -----
fhem true

use fhemtestdb
exit

fhemtestdb ist unter http://192.168.1.37:8086 erreichbar

testen was zurück kommt:
============================
curl -G http://192.168.1.37:8086/query --data-urlencode "u=fhem" --data-urlencode "p=12345" --data-urlencode "q=SHOW DATABASES"

{"results":[{"statement_id":0,"series":[{"name":"databases","columns":["name"],"values":[["_internal"],["fhemtestdb"]]}]}]}


###################
## FHEM
###################
define testdummy dummy
  attr testdummy readingList a b value
  attr testdummy stateFormat Wert: value
setreading testdummy value 1


define influxtest InfluxDBLogger http://192.168.1.37:8086 fhemtestdb testdummy
   set influxtest password 12345
  attr influxtest api v1
  attr influxtest security basic_auth
  attr influxtest username fhem
  attr influxtest verbose 5

Internals:
   CFGFN     
   DATABASE   fhemtestdb
   DEF        http://192.168.1.37:8086 fhemtestdb testdummy
   FUUID      61e597bf-f33f-960b-f1c7-511c3e6bc31aa4ca
   NAME       influxtest
   NOTIFYDEV  testdummy
   NR         57
   NTFY_ORDER 50-influxtest
   STATE      Statistics: t=16 s=0 f=16 e=16
   TYPE       InfluxDBLogger
   URL        http://192.168.1.37:8086
   passwd     saved
   READINGS:
     2022-01-17 17:28:48   failed_writes   16
     2022-01-17 17:28:48   failed_writes_last_error connect to http://192.168.1.37:8086 timed out
     2022-01-17 17:28:48   state           Statistics: t=16 s=0 f=16 e=16
     2022-01-17 17:28:44   total_events    16
     2022-01-17 17:28:44   total_writes    16
Attributes:
   api        v1
   security   basic_auth
   username   fhem

jetzt setzte ich zum Testen ein paar Readingswerte
setreading testdummy value 1
setreading testdummy value 2
setreading testdummy value 3

... es wird aber nichts in die Datenbak geschrieben und ich erhalte die Meldung "failed_writes_last_error: connect to http://192.168.1.37:8086 timed out"

FÜR JEDE HILFE BIN ICH SEHR DANKBAR - DANKESCHÖN!

Events:
=======
2022-01-17 17:27:18.717 dummy testdummy value: 1
2022-01-17 17:27:21.504 InfluxDBLogger influxtest total_writes: 12
2022-01-17 17:27:21.504 InfluxDBLogger influxtest total_events: 12
2022-01-17 17:27:21.504 InfluxDBLogger influxtest Statistics: t=12 s=0 f=10 e=12
2022-01-17 17:27:21.507 dummy testdummy value: 2
2022-01-17 17:27:22.721 InfluxDBLogger influxtest failed_writes_last_error: connect to http://192.168.1.37:8086 timed out
2022-01-17 17:27:22.721 InfluxDBLogger influxtest failed_writes: 11
2022-01-17 17:27:22.723 InfluxDBLogger influxtest Statistics: t=12 s=0 f=11 e=12
2022-01-17 17:27:24.246 InfluxDBLogger influxtest total_writes: 13
2022-01-17 17:27:24.246 InfluxDBLogger influxtest total_events: 13
2022-01-17 17:27:24.246 InfluxDBLogger influxtest Statistics: t=13 s=0 f=11 e=13
2022-01-17 17:27:24.249 dummy testdummy value: 3
2022-01-17 17:27:25.509 InfluxDBLogger influxtest failed_writes_last_error: connect to http://192.168.1.37:8086 timed out
2022-01-17 17:27:25.509 InfluxDBLogger influxtest failed_writes: 12
2022-01-17 17:27:25.512 InfluxDBLogger influxtest Statistics: t=13 s=0 f=12 e=13
2022-01-17 17:27:28.254 InfluxDBLogger influxtest failed_writes_last_error: connect to http://192.168.1.37:8086 timed out
2022-01-17 17:27:28.254 InfluxDBLogger influxtest failed_writes: 13
2022-01-17 17:27:28.257 InfluxDBLogger influxtest Statistics: t=13 s=0 f=13 e=13

[/font][/size][/color]

meier81

Hallo okuegerl,

also ich habe bei mir in FHEM das wie folgt definiert:


define NN_xx_SW_InfluxDB_Energie InfluxDBLogger http://127.0.0.1:8086 Energie KG_hr_SZ_Haus
attr NN_xx_SW_InfluxDB_Energie alias InfluxDB Energie
attr NN_xx_SW_InfluxDB_Energie conversions closed=0,open=1,tilted=2,false|off|no=0,true|on|yes=1
attr NN_xx_SW_InfluxDB_Energie deviceTagName device_name
attr NN_xx_SW_InfluxDB_Energie icon time_note
attr NN_xx_SW_InfluxDB_Energie readingExclude (ENERGY_ApparentPower|ENERGY_ReactivePower):.*
attr NN_xx_SW_InfluxDB_Energie readingInclude (Power_.*__kW|ENERGY_Power):.*


Ich habe das bei mir ohne user, password, api und security gemacht, funktioniert einwandfrei.

Vermute das es bei dir Probleme gibt mit der Authentifizierung.

influxdb hatte ich lediglich folgendes gemacht auf der shell:


sudo apt install influxdb influxdb-client
influx
CREATE DATABASE Energie


Eventuell kann dir jemand anderes weiterhelfen bezüglich der Authentifizierung, war für mich jetzt kein Problem die Daten so abzulegen. Wollte eigentlich mal auf influxdb 2 umsteigen, da bin ich aber leider auch bislang gescheitert.

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

kadettilac89

Zitat von: okuegerl am 17 Januar 2022, 17:44:42
Geschätzte InfluxDBLogger - Community:
Ich würde gerne InfluxDB verwenden schaffe es aber leider nicht daher erlaube ich mir euch um Rat zu fragen:



du hast verbose schon auf 5. Zeige mal das Log an. Ich vermute, dass dein Dummy nur on/off hat und das in der DB nicht gespeichert werden kann. InfluxDb erwartet numerische Werte. Versuche mal Devices mit Nummern als Reading oder den Parameter "conversions", Beispiel ist im Post von meier81 dabei.

Die Meldung "Timeout" habe ich auch obwohl die DB erreichbar ist. Vielleicht ist die nur irreführend. Authentication mit User+Passwort funktioniert, die habe ich auch aktiv. Ich habe aber api-Version nicht gesetzt da per Default sowieos v1 ist.




rob

#176
Soweit ich weiß, löst
setreading testdummy value blabla
kein Event aus. Das brauchst Du aber, damit der Logger was zu loggen hat  ;D

Ergänze Deinen Dummy mal bitte um dies:

attr testdummy readingList value
attr testdummy setList value

und lass dann in der Kommandozeile soetwas los
set testdummy value 1

Vielleicht kommt dann schon etwas an.

PS: Magst Du die Detailinfos in Deinem Post noch in Codetags setzen? Ist dann leichter zu lesen  ;)

okuegerl

Geschätzte Community - vielen Dank für Euer rasches und wertvolles Feedback; ich konnte in der Zwischenzeit mein Problem lösen und möchte mich hiermit bei ALLEN in aller gebotenen Form recht herzlich bedanken, es ist mir eine grosses Privileg dieses Forum nutzen zu dürfen - Dankeschön

rob

Ich bin neugierig: Wie hast Du es denn konkret lösen können?

kadettilac89

Zitat von: okuegerl am 18 Januar 2022, 12:31:42
Geschätzte Community - vielen Dank für Euer rasches und wertvolles Feedback; ich konnte in der Zwischenzeit mein Problem lösen und möchte mich hiermit bei ALLEN in aller gebotenen Form recht herzlich bedanken, es ist mir eine grosses Privileg dieses Forum nutzen zu dürfen - Dankeschön

Das ist mal eine Dankeshymne! Wenn du das beibehältst wird dir jedesmal gerne geholfen :) .... weißt ja, so wie man in den Wald hineinschreit ....

Die Helfenden sind schon nach einem einfachen "Danke" glücklich.