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
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
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
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. ;)
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