Für mich zur Bestätigung... DbRep-Devices

Begonnen von wowogiengen, 30 September 2023, 11:30:50

Vorheriges Thema - Nächstes Thema

RalfRog

#30
Ich lese aus deinen Angaben:

Du loggst erstmal alles und verwendest den Modus "DbLogSelectionMode Exclude/Include".
Kannst also pro Device ein- und ausschließen - allerdings platzt deine DB wenn du das genau nicht tust.

Zitat von: wowogiengen am 05 Oktober 2023, 18:17:14Das DbLog zum Speichern in die DB:
...
define mySQLDB DbLog ./mySQLDB.conf .*:.*
attr mySQLDB DbLogSelectionMode Exclude/Include
...

Für das Thermostat als Beispiel schliesst du nichts aus sondern loggst lt. Def vom DBLogging alles. Der DbLogInclude rettet dich da auch nicht.
Hier könnte ein DbLogExclude .* alles ausschließen und du holst dir mit "DbLogInclude .*measured-temp.*" das gewünschte rein.

Zitat von: wowogiengen am 05 Oktober 2023, 18:17:14...
Fürs HzgThermostatBüro sieht die Definition so aus:

...
define HzgThermostatBuero CUL_HM 3F8344
attr HzgThermostatBuero DbLogInclude .*measured-temp.*


Bei den anderen Device sieht es vermutlich ähnlich aus. Dann würde dich im DBLogging-Device ein "DbLogSelectionMode Include" retten und ein hantieren mit DbLogExclude wär unnötig. Neue Devices würden auch erstmal nichts in die DB schreiben.
FHEM auf Proxmox VM Bookworm (Futro S740) - nanoCUL, HM-MOD-RPI-PCB und MAX!Cube über LAN
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder sowie Shelly 3EM, 1PM, PlugS und IT Schaltsteckdosen

wowogiengen

Hallo Ralf,
ich habe seit meinem letzten Post ein paar Änderungen gemacht, und bin mit dem Resultat fast zufrieden.
Das DbLog:
define mySQLDB DbLog ./mySQLDB.conf HzgThermostat.*:statMeasured-temp.*
attr mySQLDB .* 1
attr mySQLDB DbLogSelectionMode Exclude/Include
attr mySQLDB DbLogType Current/History
attr mySQLDB asyncMode 1
attr mySQLDB cacheLimit 1500
attr mySQLDB event-on-change-reading CacheUsage
attr mySQLDB insertMode 1
attr mySQLDB room Büro,DbLog,LogFiles,System
attr mySQLDB showNotifyTime 0
attr mySQLDB showproctime 1
attr mySQLDB stateFormat {\
"Cache: ".ReadingsVal($name,"CacheUsage",0)."<br> NextSync:".ReadingsVal($name,"NextSync",0)\
}
attr mySQLDB syncInterval 240
attr mySQLDB verbose 1
attr mySQLDB webCmd listCache:commitCache
#   COLUMNS    field length used for Device: 64, Type: 64, Event: 512, Reading: 64, Value: 128, Unit: 32
#   CONFIGURATION ./mySQLDB.conf
#   DEF        ./mySQLDB.conf HzgThermostat.*:statMeasured-temp.*
#   FD         4
#   FUUID      5ed93474-f33f-a625-5c2b-b4f6628ef5ffc1ff
#   FVERSION   93_DbLog.pm:v5.9.1-s27857/2023-08-19
#   MODE       asynchronous
#   MODEL      MYSQL
#   NAME       mySQLDB
#   NOTIFYDEV  HzgThermostat.*
#   NR         2
#   NTFY_ORDER 50-mySQLDB
#   PID        8037
#   REGEXP     HzgThermostat.*:statMeasured-temp.*
#   SBP_PID    8038
#   SBP_STATE  running
#   STATE      Cache: 1<br> NextSync:2023-10-08 19:48:36 or when CacheUsage 1500 is reached
#   TYPE       DbLog
#   UTF8       0
#   dbconn     mysql:database=fhem;host=192.168.188.6;port=3307
#   dbuser     fhemdbuser
#   eventCount 4
#   HELPER:
#     COLSET     1
#     DEVICECOL  64
#     EVENTCOL   512
#     OLDSTATE   connected
#     PACKAGE    main
#     READINGCOL 64
#     TC         current
#     TH         history
#     TYPECOL    64
#     UNITCOL    32
#     VALUECOL   128
#     VERSION    5.9.1
#   Helper:
#     DBLOG:
#       state:
#         mySQLDB:
#           TIME       1696521725.42149
#           VALUE      SUBPROC_INITIALIZED
#   OLDREADINGS:
#   READINGS:
#     2023-10-08 19:44:36   CacheOverflowLastNum 0
#     2023-10-03 16:33:11   CacheOverflowLastState normal
#     2023-10-08 19:44:39   CacheUsage      1
#     2023-10-08 19:44:36   NextSync        2023-10-08 19:48:36 or when CacheUsage 1500 is reached
#     2023-10-08 19:44:37   background_processing_time 0.4222
#     2023-10-08 19:44:37   sql_processing_time 0.4054
#     2023-10-08 19:44:37   state           connected
#
setstate mySQLDB Cache: 1<br> NextSync:2023-10-08 19:48:36 or when CacheUsage 1500 is reached
setstate mySQLDB 2023-10-08 19:44:36 CacheOverflowLastNum 0
setstate mySQLDB 2023-10-03 16:33:11 CacheOverflowLastState normal
setstate mySQLDB 2023-10-08 19:44:39 CacheUsage 1
setstate mySQLDB 2023-10-08 19:44:36 NextSync 2023-10-08 19:48:36 or when CacheUsage 1500 is reached
setstate mySQLDB 2023-10-08 19:44:37 background_processing_time 0.4222
setstate mySQLDB 2023-10-08 19:44:37 sql_processing_time 0.4054
setstate mySQLDB 2023-10-08 19:44:37 state connected

Sieht jetzt fast gut aus...
Wie muss ich HzgThermostat.*:statMeasured-temp.* schreiben, damit mir nur die letzten Durchschnittswerte für Stunden, Tage und Monate in der  DB landen?
- statMeasured-tempHourAvgLast
- statMeasured-tempDayAvgLast       
- statMeasured-tempMonthAvgLast       
...
==> HzgThermostat.*:statMeasured-temp(Hour|Day|Month)AvgLast ?

Wenn das klappen würde, würde meine DB nicht mehr so schnell überlaufen, und Werte für Hour und Day könnte ich ja nach 30 bzw. 90 Tagen dann löschen lassen...

Viele Grüße
Wolfgang

RalfRog

#32
Zitat von: wowogiengen am 08 Oktober 2023, 19:50:11=> HzgThermostat.*:statMeasured-temp(Hour|Day|Month)AvgLast ?

Ich würde den Ausdruck so nehmen und testen. Nach einer Stunde ist klar ob die Hour-Last-Werte (und später die anderen Last-Werte) drin sind und alles Andere draußen bleibt.

Die Definition liegt an zentraler Stelle im DBLogging und verteilte In- und Excludes sind nicht notwendig.
FHEM auf Proxmox VM Bookworm (Futro S740) - nanoCUL, HM-MOD-RPI-PCB und MAX!Cube über LAN
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder sowie Shelly 3EM, 1PM, PlugS und IT Schaltsteckdosen

wowogiengen

Hallo zusammen,
ich habe den Ausdruck jetzt in 3 einzelne aufgeteilt. Damit scheint es zu gehen:

./mySQLDB.conf HzgThermostat.*:statMeasured-tempHourAvgLast|HzgThermostat.*:statMeasured-tempDayAvgLast|HzgThermostat.*:statMeasured-tempMonthAvgLast
Dann kann ich mir die ganzen DbRep-Devices sparen, die das alles berechnet hatten.
Nur das Device zum löschen älterer DB-Einträge brauch ich dann noch, oder geht das auch anders?

Viele Grüße
Wolfgang