Neues Modul: 93_InfluxDBLog

Begonnen von d.schoen, 05 Mai 2017, 11:52:12

Vorheriges Thema - Nächstes Thema

kadettilac89

#150
Zitat von: timmib am 08 Oktober 2020, 22:42:27
Ich würde vorschlagen in dem neuen Thread weiter zu schreiben.
Da habe ich keine Schreibrechte, kann also nicht antworten


Zitat von: kadettilac89 am 08 Oktober 2020, 19:19:49
Mit der Definition von devspec und Regex-Parameter komme ich nicht zurecht. Vielleicht auch weil ich DBLog schon kenne. Dir überlassen ... aber macht es vielleicht Sinn, das genau so zu übernehmen wie in DBLog? Die meisten werden entweder von DBLog kommen, oder es sogar parallel einsetzen.

Zitat von: timmib am 08 Oktober 2020, 22:42:27
Laut Developer Dokumentation ist es besser für die Performance beim Regisitieren auf Events NOTIFYDEV/notifyRegexpChanged zu nutzen. Ich persönlich find es auch einfacher erst auf Geräte und im zweiten Schritt auf Readings zu filten.
Ich schaue mir aber mal die anderen Logger als Inspiration an.
OK, andere Baustelle ... wie gesagt, dein Modul. Anders muss nicht schlecht sein.

Ich habe nun mal eine devspec angehängt ... es wird alles geloggt, devspec wird ignoriert

http://influxdb:8086 fhemtest InfluxDbLog=1


Ich sehe im Code aber auch keinen Aufruf von "devspec2array". Wo arbeitest du die devspec ab?

Edit:

ich habe mir mal quick'n'dirty devspec eingebaut ... mal schaun obs dann läuft

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

my @list = devspec2array($own_hash->{REGEX});   #<<<<<<<<<<<<----------------------
return "" if not grep { $_ eq $devName } @list;     #<<<<<<<<<<<<<<<<<<-------------------

    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

timmib

Ich habe mir das DbLog_Modul angesehen. Meine Meinung zu Thema befindet sich im Thread vom neuen Modul.
https://forum.fhem.de/index.php/topic,114860.0.html

kadettilac89

Zitat von: timmib am 10 Oktober 2020, 19:49:19
Ich habe mir das DbLog_Modul angesehen. Meine Meinung zu Thema befindet sich im Thread vom neuen Modul.
https://forum.fhem.de/index.php/topic,114860.0.html
Bitte schiebe den Post in ein forum in dem auch nicht-developer schreibrechte haben

timmib

ZitatBitte schiebe den Post in ein forum in dem auch nicht-developer schreibrechte haben

Hm, ich dachte man soll das so machen. Ich schieb ihn mal hierhin, bis ein Moderator sich anderweitig äussert.

timmib

#154
ZitatIch sehe im Code aber auch keinen Aufruf von "devspec2array". Wo arbeitest du die devspec ab?

InternalTimer(0, sub(){  notifyRegexpChanged($hash, $hash->{REGEX}); }, $hash);

Passiert dann automatisch.

kadettilac89

Zitat von: timmib am 12 Oktober 2020, 19:34:08
InternalTimer(0, sub(){  notifyRegexpChanged($hash, $hash->{REGEX}); }, $hash);

Passiert dann automatisch.
Die Funktion löst keine devspec auf die du in der Doku verweist. Damit kannst du nur Regex auf devicenamen absetzen. Devspec ist viel mehr und würde, wenn eingebaut, auch Mehrwert bieten.

notifyRegexpChanged

Diese Funktion kann nur verwendet werden, wenn $event_regexp auf <Definitionsnamen> bzw. <Definitionsnamen>:<Event> matcht (Event Regexp-Syntax aus notify).


devspec löst du mit devspec2array auf.

timmib

#156
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
ZitatEs kann durchaus vorkommen, dass kein Eintrag in NOTIFYDEV gesetzt wird, da nicht zweifelsfrei zwischen Definitionsnamen und Event unterschieden werden kann.
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.




timmib

Zitat von: pitre am 22 Dezember 2019, 08:53:53
Danke für eure schnellen Antworten!
Im konkreten schaut mein Fall so aus: ich habe ein Aquarium. Ein ESP32 misst mit onewire die Temperatur und schickt sie rein zur Darstellung in eine InfluxDB. Ich würde nun die Aq-Heizung gerne mit fhem steuern (eine weitere Variable: Leistung der PV-Anlage), brauche dafür aber primär die Temperatur im Aquarium. Für den ESP32 ging der Sourcecode verloren - wäre nicht so schlimm, wenn er nicht mit noch einer anderen wichtigen Aufgabe (Werte via 433MHz an eine proprietäre Funkuhr senden) beschäftigt wäre (und das mag ich mir nicht nochmals neu ausdenken müssen).
Also zusammenfassend: mir reicht der aktuelle Wert der Temperatur im Aquarium (aus der InfluxDB), der dann in regelmäßigen Abfragen in FHEM integriert werden könnte.

Btw. um die letzten Werte von InfluxDB nach FHEM zu bekommen nutze ich den Kapacitor. https://www.influxdata.com/time-series-platform/kapacitor/
Der gehört mit zum TICK-Stack und ist wirklich super, auch zum aggregieren und filtern usw. inkl. gleitende Fenster usw.
Der Kapacitor unterstützt auch Outputs wie z.B. MQTT. Und genau nutze ich um dann di Werte in ein MQTT-Device in FHEM zu bekommen.


matzewob

Moin,

ich setzte jetzt seit ein paar Tagen das Modul ein, läuft auch scheibar, etwas....

Meine Frage nun da ich mehrere Devices habe dessen Messerwerte nicht übertragen werden, wie z.b. dieses hier:

defmod Waschmaschine FBDECT Fritzbox:19 switch
attr Waschmaschine IODev Fritzbox
attr Waschmaschine devStateIcon on:rc_GREEN:off off:rc_RED:on absent:rc_BLUE:off gpio:rc_YELLOW:off
attr Waschmaschine event-min-interval power:120
attr Waschmaschine room Keller
attr Waschmaschine stateFormat {"T: " . ReadingsNum($name,"temperature",0) . "°C / Verbrauch: "  . ReadingsNum($name,"energy",0)/1000 . "KW/h" }

setstate Waschmaschine T: 25.5°C / Verbrauch: 389.718KW/h
setstate Waschmaschine 2020-10-23 07:52:12 AIN 08761 0363051
setstate Waschmaschine 2020-10-23 07:52:12 FBNAME Waschmaschine
setstate Waschmaschine 2020-10-23 07:52:12 FBPROP microphone,powerMeter,tempSensor,switch
setstate Waschmaschine 2020-10-23 07:52:12 FBTYPE FRITZ!DECT 200
setstate Waschmaschine 2020-10-23 07:52:12 ID 19
setstate Waschmaschine 2020-10-23 07:52:12 devicelock no
setstate Waschmaschine 2020-10-23 07:52:12 energy 389718 Wh
setstate Waschmaschine 2020-10-23 07:52:12 fwversion 04.16
setstate Waschmaschine 2020-10-23 07:52:12 locked no
setstate Waschmaschine 2020-10-23 07:52:12 mode manuell
setstate Waschmaschine 2020-10-23 07:52:12 power 0.64 W
setstate Waschmaschine 2020-10-23 07:52:12 present yes
setstate Waschmaschine 2020-10-23 05:44:03 running off
setstate Waschmaschine 2020-10-23 07:52:12 state on
setstate Waschmaschine 2020-10-23 07:52:12 tempadjust 0.0 C
setstate Waschmaschine 2020-10-23 07:52:12 temperature 25.5 C (measured)
setstate Waschmaschine 2020-10-23 07:52:12 voltage 234.579 V



Mein Influx:

defmod INFLUXLOG InfluxDBLog 127.0.0.1 8086 fhem fhem hochgeheim .*

setstate INFLUXLOG active
setstate INFLUXLOG 2020-10-23 07:52:10 filecount 0



Wie kann ich den überzeugen das er die Readings mit aufnimmt?

Vor allem interessiert mich:

setstate Waschmaschine 2020-10-23 07:52:12 power 0.64 W
setstate Waschmaschine 2020-10-23 07:52:12 temperature 25.5 C (measured)

Danke, und grüße

timmib

Das neue Modul wird in einem anderen Thread behandelt und hat einen anderen Namen und Syntax.

https://forum.fhem.de/index.php/topic,114860.0.html

Usage: define devname InfluxDBLogger [http|https]://IP_or_Hostname:port dbname devspec

arran

Ein gutes Neues allerseits.

Hab jetzt das Modul auch am laufen und bin fleißig am testen - danke an die Entwickler des Moduls.

In der Testumgebung versuche ich die Spritpreise von 5 Tankstellen in die Influx Datenbank zu übertragen. Dort habe ich User, Organisation und InitialBucketName erstellt. In der Device Definition ist der Name der "Organisation"=fhemdb angegeben:


Internals:
   DATABASE   fhemdb
   DEF        http://influxdb:8086 fhemdb ALGTH81377,Esso80639,JET80687,JET80639,Shell80639
   FUUID      5ff6ec75-f33f-bc43-2b04-aa5b7976662b93e9
   FVERSION   93_InfluxDBLogger.pm:0.233660/2020-12-16
   NAME       iflxlog
   NOTIFYDEV  ALGTH81377,Esso80639,JET80687,JET80639,Shell80639
   NR         132
   NTFY_ORDER 50-iflxlog
   STATE      Statistics: t=10 s=0 f=10 e=210
   TYPE       InfluxDBLogger
   URL        http://influxdb:8086
   token      saved
   READINGS:
     2021-01-07 15:08:59   dropped_writes  0
     2021-01-07 15:08:59   dropped_writes_last_message <none>
     2021-01-07 15:26:50   failed_writes   10
     2021-01-07 15:26:50   failed_writes_last_error 404 Not Found
     2021-01-07 15:26:50   state           Statistics: t=10 s=0 f=10 e=210
     2021-01-07 15:08:59   succeeded_writes 0
     2021-01-07 15:26:50   total_events    210
     2021-01-07 15:26:50   total_writes    10
Attributes:
   readingExclude address:\s.+
   room       Database
   security   token
   verbose    5


Ich bekomme den Fehler "404 Not Found" - hiermit ein Ausschnitt aus der Log:


2021.01.07 15:11:51.987 4: InfluxDBLogger: [iflxlog] notified from device Esso80639
2021.01.07 15:11:51.987 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about Diesel: 1.179
2021.01.07 15:11:51.987 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about SuperE10: 1.259
2021.01.07 15:11:51.987 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about SuperE5: 1.309
2021.01.07 15:11:51.988 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about statSuperE10DayMin: 1.259
2021.01.07 15:11:51.988 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about statSuperE10DayAvg: 1.288
2021.01.07 15:11:51.988 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about statSuperE10DayMax: 1.369
2021.01.07 15:11:51.988 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about statSuperE10MonthMin: 1.209
2021.01.07 15:11:51.988 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about statSuperE10MonthAvg: 1.312
2021.01.07 15:11:51.988 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about statSuperE10MonthMax: 1.419
2021.01.07 15:11:51.988 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about statSuperE5DayMin: 1.309
2021.01.07 15:11:51.988 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about statSuperE5DayAvg: 1.338
2021.01.07 15:11:51.988 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about statSuperE5DayMax: 1.419
2021.01.07 15:11:51.988 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about statSuperE5MonthMin: 1.259
2021.01.07 15:11:51.988 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about statSuperE5MonthAvg: 1.362
2021.01.07 15:11:51.988 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about statSuperE5MonthMax: 1.469
2021.01.07 15:11:51.988 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about statDieselDayMin: 1.179
2021.01.07 15:11:51.988 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about statDieselDayAvg: 1.218
2021.01.07 15:11:51.988 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about statDieselDayMax: 1.289
2021.01.07 15:11:51.988 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about statDieselMonthMin: 1.179
2021.01.07 15:11:51.988 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about statDieselMonthAvg: 1.241
2021.01.07 15:11:51.989 4: InfluxDBLogger: [iflxlog] notified from device Esso80639 about statDieselMonthMax: 1.349
2021.01.07 15:11:51.990 5: InfluxDBLogger: [iflxlog] set ?
2021.01.07 15:11:51.990 5: InfluxDBLogger: [iflxlog] set ?
2021.01.07 15:11:51.990 4: InfluxDBLogger [iflxlog] - Read token from file
2021.01.07 15:11:51.991 4: InfluxDBLogger: [iflxlog] Sending data SuperE10,site_name=Esso80639 value=1.259
statSuperE5DayMax,site_name=Esso80639 value=1.419
Diesel,site_name=Esso80639 value=1.179
statSuperE10MonthMax,site_name=Esso80639 value=1.419
statDieselMonthMin,site_name=Esso80639 value=1.179
statDieselDayMin,site_name=Esso80639 value=1.179
statDieselDayMax,site_name=Esso80639 value=1.289
SuperE5,site_name=Esso80639 value=1.309
statSuperE5DayMin,site_name=Esso80639 value=1.309
statSuperE5DayAvg,site_name=Esso80639 value=1.338
statSuperE10MonthAvg,site_name=Esso80639 value=1.312
statSuperE5MonthMax,site_name=Esso80639 value=1.469
statSuperE10DayMin,site_name=Esso80639 value=1.259
statSuperE10MonthMin,site_name=Esso80639 value=1.209
statSuperE10DayMax,site_name=Esso80639 value=1.369
statDieselMonthMax,site_name=Esso80639 value=1.349
statSuperE5MonthAvg,site_name=Esso80639 value=1.362
statDieselMonthAvg,site_name=Esso80639 value=1.241
statSuperE10DayAvg,site_name=Esso80639 value=1.288
statDieselDayAvg,site_name=Esso80639 value=1.218
statSuperE5MonthMin,site_name=Esso80639 value=1.259
to http://influxdb:8086/write?db=fhemdb
2021.01.07 15:11:51.993 1: InfluxDBLogger: [iflxlog] Error = 404 Not Found
2021.01.07 15:11:51.994 5: InfluxDBLogger: [iflxlog] set ?


Kann mir jemand einen Hinweis geben woran die Befüllung der Datenbank scheitert?
Irgendwie komme ich als totaler Anfänger nicht dahinter vermute aber, dass es mit der Datenbank Anbindung zusammenhängt.

Vielen Dank
Cubietruck
HM_LAN_CFG, HM_CC_RT_DN, HM_SEC_RHS, nanoCUL 433, GT-WT-02, Revolt NC-5461, m-FS300

fischit

#161
Ich kann dir zwar nicht sonderlich viel helfen, aber folgendes kann ich dir sagen.

1. Das ist der falsch Thread -> https://forum.fhem.de/index.php/topic,114860.0.html
2. du hast ein Leerzeichen nach deinem ersten Device
3. Wenn du Anfänger bist und du die Influxdb ganz rudimentär aufgesetzt hast, behaupte ich, dass das Attribut "Security" unnötig ist. 

Ansonsten gehe ich davon aus, dass dein System auch wirklich über http://influxdb:8086 erreichbar ist und das deine DB wirklich fhemdb heißt.
Hiermit kannste mal testen was da zurück kommt: curl -G http://influxdb:8086/query --data-urlencode "db=fhemdb" --data-urlencode "q=SHOW SERIES" --data-urlencode "pretty=true"

arran

#162
@fischit:


  • Danke für die Rückmeldung und dem Link zu dem richtigen Thread.
  • Nach dem ersten Device ist kein Leerzeichen - das passt so
  • Ich verwende InfluxDB V2. Da ist die Verwendung vom Token ziemlich einfach...

Sowohl die InfluxDB V2 als auch FEHEM laufen unter DOCKER im gleichen Netzwerk - das passt auch.

Was gefehlt hat waren die Attribute für InfluxDB API und der Name (meiner) der Organisation:

attr iflxlog api v2
attr iflxlog org fhemdb

Jetzt klappt es :-)

Cubietruck
HM_LAN_CFG, HM_CC_RT_DN, HM_SEC_RHS, nanoCUL 433, GT-WT-02, Revolt NC-5461, m-FS300

sash.sc

#163
Zitat von: fervor am 17 Dezember 2017, 20:45:11
Hi,

ich bin gerade dabei meine alten FileLogs in die influxdb zu übertragen. Dazu benutze ich ein kleines shell script.
Vielleicht hat ja noch jemand Bedarf.

Es werden alle im gleichen Verzeichnis gefundenen Logs berücksichtigt. Nach dem Import werden die fertigen Logs nach ./ok verschoben. Vielleicht vor dem finalen Start nochmal mit echo vor der curl Anweisung testen.

#!/bin/bash

host=localhost:8086
influxdb_name=fhem_db


################################################################################


mkdir -p ./ok

for file in $(find . -name "*.log" | sort)
do

  while read line
  do

        year=$(echo $line | cut -d - -f 1)
        month=$(echo $line | cut -d - -f 2)
        day=$(echo $line | cut -d - -f 3 | cut -d _ -f 1)
        hour=$(echo $line | cut -d _ -f 2 | cut -d : -f 1)
        minute=$(echo $line | cut -d : -f 2)
        second=$(echo $line | cut -d : -f 3 | cut -d ' ' -f 1)
        sensor=$(echo $line | cut -d ' ' -f 2)
        reading=$(echo $line | cut -d ' ' -f 3 | cut -d : -f 1)
        value=$(echo $line | cut -d ' ' -f 4)

        time=$(echo $(date -d $year'-'$month'-'$day' '$hour':'$minute':'$second +%s)000000000)

        #Test auf nummerische Werte
        if [ "$(echo $value | grep -o '[0-9.]*')" != "" ]; then
#               echo $year-$month-$day'_'$hour:$minute:$second - $time - $sensor $reading $value
                curl -i -XPOST 'http://'$host'/write?db='$influxdb_name'' --data-binary $reading',site_name='$sensor' value='$value' '$time''
        fi


  done < $file

    mv $file ./ok/$file

done


Hi fervor.

Habe versucht dein Script zu starten.
Habe den Link zur db und den Namen angepasst (192.168.2.104:8086 und dbname ist fhem).
Die Datenbank wurde unter influx shell konsole angelegt. Verbindung von Grafana zur Influxdb funktioniert.
Jedoch dein Script nicht.

habe die .log Files in ein seperates Verzeichniss gepackt mit dem angepassten Script.
Scheint jedoch Probleme zu haben die Daten in die db zu schreiben.

Kannst du/jemand mir helfen ?

wenn ich versuche über den browser auf die db zu kommen (192.168.2.104:8086) kommt nur page not found.

Gruß
Sascha
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

kadettilac89

Warum postest du das selbe in 2 separaten Threads? Stiftet nur Verwirrung da nicht unbedingt beide Threads verfolgen.

Vermutliche Lösung deines Problems: Das Script gibt kein User / Passwort mit. Wenn du aber Authentication aktiv hast ergibt das Fehler.

Teste mal ob du damit eine Ausgabe oder eine Fehlermeldung bekommst:

curl -G http://192.168.2.104:8086/query --data-urlencode  --data-urlencode  --data-urlencode "q=SHOW DATABASES"


Entweder du deaktivierst Authentication für die Migration und schaltest es später wieder ein (Doku s. google ... ist ein Parameter den ich aber nichrt auswendig weiß)

ODER du gibst user + passwort im Script mit.

Wenn es am User / Passwort liegt würde das hier funktionieren. Du musst natürlich deinen User und dein Passwort eintragen.

curl -G http://192.168.2.104:8086/query --data-urlencode "u=username" --data-urlencode "p=password" --data-urlencode "q=SHOW DATABASES"


Im Script dann Parameter "u=username" "p=password" ergänzen und nochmal testen.

Für den FAll dass du  influxdb v2 nutzt brauchst du auch die authentication aber mit token.