Gelöst: DBlog Konfigurieren

Begonnen von dihe85, 30 September 2020, 17:52:38

Vorheriges Thema - Nächstes Thema

dihe85

Hallo zusammen,
und wieder einmal finde ich keine Lösung und brauch eure Hilfe.

Ich habe eine SQL-Datenbank angelegt und möchte darein gerne loggen. Das funktionier auch soweit ganz gut.
zu gut.
Ich möchte nur Einträge in die Datenbank loggen, die ich auch da loggen möchte.
Kann man DbLogExclude global setzen und über DbLogInclude in einzelnen Device das erreichen?

Ich habe schon attr logdb DbLogExclude .* eingetragen und dennoch loggt er z.B. wenn ich speicher. (also globale dinge)

Bin solangsam ratlos wie ich die da raus bekomme.

Gruß
Dirk

DS_Starter

Hallo Dirk,

das geht natürlich und ist teilweise auch sehr granular machbar.
Wenn DbLogExclude so wie du es angegeben hast nicht funktioniert, ist das Attribut DbLogSelectionMode zu prüfen.

Es darf in diesem Fall nicht auf "Include" stehen.

Ansonsten wäre ein list des Devices hilfreich ... bischen schwierig sonst Hilfestellung zu geben.

Grüße,
Heiko

Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

dihe85

Hallo Heiko, hier mal das list von DB logger
COLUMNS    field length used for Device: 64, Type: 64, Event: 512, Reading: 64, Value: 128, Unit: 32
   CONFIGURATION ./db.conf
   DEF        ./db.conf .*:.*
   FUUID      5f5684ea-f33f-934d-9dbc-a9b0fb6dddf0f6d7
   FVERSION   93_DbLog.pm:v4.10.2-s22246/2020-06-23
   MODE       synchronous
   MODEL      MYSQL
   NAME       logdb
   NR         48
   NTFY_ORDER 50-logdb
   PID        2855
   REGEXP     .*:.*
   STATE      connected
   TYPE       DbLog
   UTF8       1
   dbconn     mysql:database=fhem;host=127.0.0.1;port=3306
   dbuser     fhemuser
   HELPER:
     COLSET     1
     DEVICECOL  64
     EVENTCOL   512
     OLDSTATE   connected
     PACKAGE    main
     READINGCOL 64
     TC         current
     TH         history
     TYPECOL    64
     UNITCOL    32
     VALUECOL   128
     VERSION    4.10.2
   Helper:
     DBLOG:
       state:
         logdb:
           TIME       1601211401.26885
           VALUE      connected
   READINGS:
     2020-09-30 18:56:59   state           connected
Attributes:
   DbLogExclude .*
   alias      logdb
   room       95-Tool


mich stört halt das er mehr loggt als er sollte.
eigentlich sollte er nur die BMP280 Sensoren da rein loggen.
die sind wie folgt konfiguriert

defmod wohn_sens1 MQTT2_DEVICE DVES_13F09C
attr wohn_sens1 DbLogInclude BME280_Temperature,BME280_Humidity,BME280_Pressure
attr wohn_sens1 IODev mqtt2_serv
attr wohn_sens1 alias wohn_sens1
attr wohn_sens1 autocreate 0
attr wohn_sens1 event-on-update-reading BME280_Temperature,BME280_Humidity,BME280_Pressure
attr wohn_sens1 group sensor
attr wohn_sens1 jsonMap POWER1:0 POWER2:0 POWER3:0 POWER4:0 Dimmer:0 Channel_0:0 Channel_1:0 Channel_2:0 Channel_3:0 Channel_4:0 HSBColor:0 Color:0
attr wohn_sens1 readingList tele/tasmota_13F09C/LWT:.* LWT\
   tele/tasmota_13F09C/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }\
   tele/tasmota_13F09C/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }
attr wohn_sens1 room 10-EG
attr wohn_sens1 setList setOtaUrl:textField cmnd/tasmota_13F09C/OtaUrl $EVTPART1\
  upgrade:noArg   cmnd/tasmota_13F09C/upgrade 1
attr wohn_sens1 setStateList on off toggle
attr wohn_sens1 stateFormat BME280_Temperature\
BME280_Humidity\
BME280_Pressure\


aber es kann doch nicht sei, das ich bei jedem Device DBlogExcludede .* setzten muss.

momentan loggt er gefühlt jedes Event trotzdem.

Gruß
Dirk

DS_Starter

#3
Naja, schau mal, du hast das Attribut DbLogSelectionMode nicht gesetzt, d.h. siehe Commandref ->


Dieses fuer DbLog-Devices spezifische Attribut beeinflußt, wie die Device-spezifischen Attribute DbLogExclude und DbLogInclude (s.u.) ausgewertet werden.
Fehlt dieses Attribut, wird "Exclude" als Default angenommen.

    Exclude: DbLog verhaelt sich wie bisher auch, alles was ueber die RegExp im DEF angegeben ist, wird geloggt, bis auf das, was ueber die RegExp in DbLogExclude ausgeschlossen wird.


Bedeutet, da du angegeben hast:


REGEXP     .*:.*


geht im Priinzip alles durch, es sein denn du hast in jedem Device explizit DbLogExclude .* gesetzt.
Das zu machen ist aber ein Befehl:


attr TYPE=.* DbLogExclude .*


Würde ich jetzt aber nicht machen. Wenn du nur wenig loggen willst, warum gibst du im DEF nicht den Regex entsprechend an, z.B.


(STP_5000|MySTP_5000):.*

bzw. bei dir

BMP280.*:.*


um nur Readings der Devices STP_5000 und MySTP_5000  bzw. BMP280... zu loggen ?

Wenn du generell bestimmte Devices ohne wenn und aber nicht loggen willst bietet sich auch das Attr excludeDevs an. Es wirkt global und wird nur einmal im DbLog gesetzt.
Und dann gibt es noch das Attr valueFn (zentral) bzw. DbLogValueFn (in Devices) welches mit dem Parameter $IGNORE das Logging steuern kann. Hier muss man allerdings etwas Perl einbauen.

Viele Möglichkeiten. Du wärst der erste der nichts passendes für sich findet.  ;)
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

dihe85

Hallo Heiko,
Danke
Zitat von: DS_Starter am 30 September 2020, 19:32:37
Naja, schau mal, du hast das Attribut DbLogSelectionMode nicht gesetzt, d.h. siehe Commandref ->
Genau das wars.

Wenn du nur wenig loggen willst, warum gibst du im DEF nicht den Regex entsprechend an, z.B

Ich möchte halt selber entscheiden, was ich loggen möchte und was nicht.
Bei den Sensoren z.B. möchte ich die Drücke nicht loggen außen von dem Außensensor.

Gruß
Dirk