[Gelöst] DbRep Error - Wrong time limits

Begonnen von Rewe2000, 06 Januar 2021, 17:30:08

Vorheriges Thema - Nächstes Thema

Rewe2000

Hallo Heiko,

kann es sein, dass die Angabe unter Attribut "timeOlderThan" sporadich (noch) Probleme mit der Tagesangabe von > d:370 hat?


Hintergrund:
Da ich noch einige Tage für die Umstellung der Zählerauswertung auf DbRep benötige, wollte ich meine älteren Daten > 1 Jahr nicht verlieren, deshalb habe ich das Attribut "timeOlderThan" vorübergehend von d:370 auf d:470 hochgesetzt (disable wäre natürlich auch möglich, dann wäre aber der Fehler nicht gekommen :)), dabei ist mir am nächsten Tag die Fehlermeldung aufgefallen. Auch wird diese bei verbose 2 nicht ins Log geschrieben.

Den Fehler kann ich aktuell immer reproduzieren mit den folgenden Device, nur durch Aufruf von "set <device> delEntries" ohne weitere Parameter:

Device mit Fehlermeldung und "timeOlderThan d:470":
Internals:
   DATABASE   fhem
   DEF        DBLogging
   FUUID      5dd137f3-f33f-7df9-e391-8532b6f8c393eae6
   FVERSION   93_DbRep.pm:v8.42.1-s23214/2020-11-22
   LASTCMD    delEntries
   MODEL      Client
   NAME       DBReport_Datensaetze_loeschen
   NOTIFYDEV  global,DBReport_Datensaetze_loeschen
   NR         327
   NTFY_ORDER 50-DBReport_Datensaetze_loeschen
   ROLE       Client
   STATE      Error - Wrong time limits. The <nn> (days newer than) option must be greater than the <no> (older than) one !
   TYPE       DbRep
   UTF8       1
   HELPER:
     DBLOGDEVICE DBLogging
     GRANTS     SELECT,UPDATE,INSERT,FILE,DELETE
     IDRETRIES  2
     MINTS      2019-12-28 04:59:55
     PACKAGE    main
     SQLHIST   
     VERSION    8.42.1
     CV:
       aggregation no
       aggsec     1
       destr      2019-09-23
       dsstr      2019-12-28
       epoch_seconds_end 1569247785.40107
       mestr      09
       msstr      12
       testr      16:09:45
       tsstr      04:59:55
       wdadd      172800
       yestr      2019
       ysstr      2019
     DBREPCOL:
       COLSET     1
       DEVICE     64
       EVENT      512
       READING    64
       TYPE       64
       UNIT       32
       VALUE      128
   OLDREADINGS:
   READINGS:
     2021-01-06 16:09:46   state           Error - Wrong time limits. The <nn> (days newer than) option must be greater than the <no> (older than) one !
Attributes:
   DbLogExclude .*
   allowDeletion 1
   comment    Dies Reportdevice löscht alle Daten aus der aktuellen DbLog SQL-Datenbank, welche älter als unter "timeOlderThan" (in Tagen) angegeben sind. Dieses Reportdevice wird durch ein at "at_DBLog_Datensaetze_loeschen" einmal pro Nacht aufgerufen.


TimeOlderThan wieder auf 370 Tage setzen
   devStateIcon connected:it_network .*disconnect:control_home .*done:general_ok running:refresh
   disable    0
   fastStart  1
   group      Hardware
   icon       system_backup
   reading    EXCLUDE=%MonthLast,EXCLUDE=%YearLast,EXCLUDE=%_Monat,EXCLUDE=%_Jahr
   room       Logging
   showproctime 1
   timeOlderThan d:470


Device ohne Fehlermeldung und "timeOlderThan d:370":
Internals:
   DATABASE   fhem
   DEF        DBLogging
   FUUID      5dd137f3-f33f-7df9-e391-8532b6f8c393eae6
   FVERSION   93_DbRep.pm:v8.42.1-s23214/2020-11-22
   LASTCMD    delEntries
   MODEL      Client
   NAME       DBReport_Datensaetze_loeschen
   NOTIFYDEV  global,DBReport_Datensaetze_loeschen
   NR         327
   NTFY_ORDER 50-DBReport_Datensaetze_loeschen
   ROLE       Client
   STATE      done
   TYPE       DbRep
   UTF8       1
   HELPER:
     DBLOGDEVICE DBLogging
     GRANTS     SELECT,UPDATE,INSERT,FILE,DELETE
     IDRETRIES  2
     MINTS      2019-12-28 04:59:55
     PACKAGE    main
     SQLHIST   
     VERSION    8.42.1
     CV:
       aggregation no
       aggsec     1
       destr      2020-01-02
       dsstr      2019-12-28
       epoch_seconds_end 1577979109.02396
       mestr      01
       msstr      12
       testr      16:31:49
       tsstr      04:59:55
       wdadd      172800
       yestr      2020
       ysstr      2019
     DBREPCOL:
       COLSET     1
       DEVICE     64
       EVENT      512
       READING    64
       TYPE       64
       UNIT       32
       VALUE      128
   OLDREADINGS:
   READINGS:
     2021-01-06 16:31:50   HM_EG_SS_Kuehlschrank--EXCLUDE//MonthLast/EXCLUDE//YearLast/EXCLUDE//_Monat/EXCLUDE//_Jahr----DELETED_ROWS_HISTORY-- 0
     2021-01-06 16:31:50   background_processing_time 0.0431
     2021-01-06 16:31:50   sql_processing_time 0.0352
     2021-01-06 16:31:50   state           done
Attributes:
   DbLogExclude .*
   allowDeletion 1
   comment    Dies Reportdevice löscht alle Daten aus der aktuellen DbLog SQL-Datenbank, welche älter als unter "timeOlderThan" (in Tagen) angegeben sind. Dieses Reportdevice wird durch ein at "at_DBLog_Datensaetze_loeschen" einmal pro Nacht aufgerufen.


TimeOlderThan wieder auf 370 Tage setzen
   devStateIcon connected:it_network .*disconnect:control_home .*done:general_ok running:refresh
   device     HM_EG_SS_Kuehlschrank
   disable    0
   fastStart  1
   group      Hardware
   icon       system_backup
   reading    EXCLUDE=%MonthLast,EXCLUDE=%YearLast,EXCLUDE=%_Monat,EXCLUDE=%_Jahr
   room       Logging
   showproctime 1
   timeOlderThan d:370


Device ohne Fehlermeldung, hier gibt es mit "timeOlderThan d:470" keinen Fehler:
Internals:
   CFGFN     
   DATABASE   fhem
   DEF        DBLogging
   FUUID      5ff5d3bb-f33f-7df9-dc7a-ede22d2b69239340
   FVERSION   93_DbRep.pm:v8.42.1-s23214/2020-11-22
   LASTCMD    delEntries
   MODEL      Client
   NAME       DBReport_Temp_loeschen
   NOTIFYDEV  global,DBReport_Temp_loeschen
   NR         31422
   NTFY_ORDER 50-DBReport_Temp_loeschen
   ROLE       Client
   STATE      done
   TYPE       DbRep
   UTF8       1
   HELPER:
     DBLOGDEVICE DBLogging
     GRANTS     UPDATE,SELECT,FILE,INSERT,DELETE
     IDRETRIES  2
     MINTS      2018-01-01 00:00:55
     PACKAGE    main
     SQLHIST   
     VERSION    8.42.1
     CV:
       aggregation no
       aggsec     1
       destr      2019-09-23
       dsstr      2018-01-01
       epoch_seconds_end 1569249977.78305
       mestr      09
       msstr      01
       testr      16:46:17
       tsstr      00:00:55
       wdadd      604800
       yestr      2019
       ysstr      2018
     DBREPCOL:
       COLSET     1
       DEVICE     64
       EVENT      512
       READING    64
       TYPE       64
       UNIT       32
       VALUE      128
   Helper:
     DBLOG:
       state:
         DBLogging:
           TIME       1609946043.73295
           VALUE      initialized
   OLDREADINGS:
   READINGS:
     2021-01-06 16:46:19   HM_EG_SS_Kuehlschrank--EXCLUDE//MonthLast/EXCLUDE//YearLast/EXCLUDE//_Monat/EXCLUDE//_Jahr----DELETED_ROWS_HISTORY-- 0
     2021-01-06 16:46:19   background_processing_time 0.2054
     2021-01-06 16:46:19   sql_processing_time 0.0016
     2021-01-06 16:46:19   state           done
Attributes:
   DbLogExclude .*
   allowDeletion 1
   comment    Dies Reportdevice löscht alle Daten aus der aktuellen DbLog SQL-Datenbank, welche älter als unter "timeOlderThan" (in Tagen) angegeben sind. Dieses Reportdevice wird durch ein at "at_DBLog_Datensaetze_loeschen" einmal pro Nacht aufgerufen.


TimeOlderThan wieder auf 370 Tage setzen
   devStateIcon connected:it_network .*disconnect:control_home .*done:general_ok running:refresh
   device     HM_EG_SS_Kuehlschrank
   disable    0
   fastStart  1
   group      Hardware
   icon       system_backup
   reading    EXCLUDE=%MonthLast,EXCLUDE=%YearLast,EXCLUDE=%_Monat,EXCLUDE=%_Jahr
   room       Temp,Logging
   showproctime 1
   timeOlderThan d:470


Hinweis:
Die angegebenen Readings existieren bei diesem Device nicht!
Ich habe dieses Device nur angegeben, damit ich mir im Fehlerfall nicht meine Daten aus der Datenbank räume. Der Fehler kommt aber genauso, wenn kein Attribut "device" angegeben wird.

Der Fehler lässt sich bei mir nur mit "set <device> delEntries" reproduzieren mit "set <device> countEntries" tritt dieser nicht auf.

Irgendwie kann ich da echt keinen Unterschied erkennen, weshalb da diese Meldung kommt, ich hoffe du kannst das "Rätsel" lösen.
Solltest du noch weitere Infos benötigen, so melde dich bitte.

Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

DS_Starter

Hallo Reinhard,

habe bei mir testweise den gleichen Befehl mit timeOlderThan = d:470 abgesetzt, ohne Fehler:


2021.01.06 19:35:00.239 4: DbRep Rep.LogDB - -------- New selection ---------
2021.01.06 19:35:00.240 4: DbRep Rep.LogDB - Command: delEntries
2021.01.06 19:35:00.241 4: DbRep Rep.LogDB - timeOlderThan - year: , day: 470, hour: , min: , sec:
2021.01.06 19:35:00.241 4: DbRep Rep.LogDB - Year 2020 is leap year
2021.01.06 19:35:00.242 4: DbRep Rep.LogDB - startMonth: 11 endMonth: 8 lastleapyear: 2020 baseYear: 2019 diffdaylight:1 isdaylight:0
2021.01.06 19:35:00.242 4: DbRep Rep.LogDB - FullDay option: 0
2021.01.06 19:35:00.242 5: DbRep Rep.LogDB - Timestamp begin epocheseconds: 1482181233
2021.01.06 19:35:00.243 4: DbRep Rep.LogDB - Timestamp begin human readable: 2016-12-19 22:00:33
2021.01.06 19:35:00.244 4: DbRep Rep.LogDB - Time difference to current time for calculating Timestamp end: 40698001 sec
2021.01.06 19:35:00.244 5: DbRep Rep.LogDB - Timestamp end epocheseconds: 1569260099
2021.01.06 19:35:00.244 4: DbRep Rep.LogDB - Timestamp end human readable: 2019-09-23 19:34:59
2021.01.06 19:35:00.245 5: DbRep Rep.LogDB - weekday start for selection: Mo  ->  wdadd: 604800
2021.01.06 19:35:00.295 5: DbRep Rep.LogDB - IsTimeSet: 1, IsAggrSet: 0
2021.01.06 19:35:00.299 5: DbRep Rep.LogDB - Devices for operation -
included (1): %
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.01.06 19:35:00.300 5: DbRep Rep.LogDB - Readings for operation -
included (1): %
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.01.06 19:35:00.302 4: DbRep Rep.LogDB - SQL execute: delete FROM history where TIMESTAMP >= '2016-12-19 22:00:33' AND TIMESTAMP <= '2019-09-23 19:34:59' ;


Setz bei dir bitte auch mal verbose 5 und poste was dann im Log kommt.

LG,
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

DS_Starter

#2
Hallo Reinhard,

jetzt sehe ich den Grund. Der älteste Datensatz in deiner DB ist

MINTS      2019-12-28 04:59:55

Mit deinem timeOlderThan endest du aber schon im Sept. 2019

destr      2019-09-23

und somit noch vor dem Datum des ältesten Datensatzes in der DB -> der Logikcheck geht fehl.

Entweder passt du die Grenzen an, oder erzwingst einen früheren Start mit einem zusätzlichen (zum Beispiel)

timeDiffToNow d:600
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

Rewe2000

Hallo Heiko,

danke für die schnelle Antwort.
Irgendwie ist das Verhalten bei mir sehr seltsam, ich habe echt viel probiert, aber irgendwelche Konstellationen, weshalb der Fehler auftritt sind mir nicht aufgefallen.

Anbei mein Log, mit verbose 5 (nur beim DbRep Device):
2021.01.06 19:52:37 4: DbRep DBReport_Datensaetze_loeschen - -------- New selection ---------
2021.01.06 19:52:37 4: DbRep DBReport_Datensaetze_loeschen - Command: delEntries
2021.01.06 19:52:37 4: DbRep DBReport_Datensaetze_loeschen - timeOlderThan - year: , day: 470, hour: , min: , sec:
2021.01.06 19:52:37 4: DbRep DBReport_Datensaetze_loeschen - Year 2020 is leap year
2021.01.06 19:52:37 4: DbRep DBReport_Datensaetze_loeschen - startMonth: 11 endMonth: 8 lastleapyear: 2020 baseYear: 2019 diffdaylight:1 isdaylight:0
2021.01.06 19:52:37 4: DbRep DBReport_Datensaetze_loeschen - FullDay option: 0
2021.01.06 19:52:37 5: DbRep DBReport_Datensaetze_loeschen - Timestamp begin epocheseconds: 1577505595
2021.01.06 19:52:37 4: DbRep DBReport_Datensaetze_loeschen - Timestamp begin human readable: 2019-12-28 04:59:55
2021.01.06 19:52:37 4: DbRep DBReport_Datensaetze_loeschen - Time difference to current time for calculating Timestamp end: 40698001 sec
2021.01.06 19:52:37 5: DbRep DBReport_Datensaetze_loeschen - Timestamp end epocheseconds: 1569261156.83279
2021.01.06 19:52:37 4: DbRep DBReport_Datensaetze_loeschen - Timestamp end human readable: 2019-09-23 19:52:36
2021.01.06 19:52:37 5: DbRep DBReport_Datensaetze_loeschen - weekday start for selection: Sa  ->  wdadd: 172800


Ich kann da absolut nichts erkennen, weshalb der Fehler kommt.

Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

DS_Starter

Da haben wir uns überschnitten, siehe #2  :)
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

Rewe2000

#5
Hallo Heiko,

dann ist es so, dass die Angabe mit "timeOlderThan" noch innerhalb von gültigen Daten der Datenbank liegen muss.
Gebe ich einen Bereich an, wo zumindest ein Datensatz noch zum Löschen mit erwischt wird, so würde der Fehler nicht kommen.

Jetzt wo ich den Grund kenne, ist das Verhalten erklärbar.
Die Fehlermeldung ist in der Vergangenheit nie aufgetreten, da das Device mit d:370 über Jahre, jeweils einmal Täglich gelaufen ist. Nur damit es mir die Daten noch einige Wochen länger in der Datenbank belässt, habe ich einfach (leichtgläubig) d:470 gesetzt.

Ich muss nur einfach 100 Tage warten, damit bei mir auch d:470 klappt: :D.

Zukünftig werde ich das DbRep Device einfach mir disable stillsetzen, es holt ja dann einfach alles nach, wenn es wieder gestartet wird.

Danke für die schnelle Erklärung.
Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky