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