Hauptmenü

DbRep Fragen

Begonnen von Homatrix, 08 März 2021, 13:21:24

Vorheriges Thema - Nächstes Thema

Homatrix

Hi,

da mir m.M. DbRep grad meine Daten zerschossen hat, muss ich hier mal nachfragen.
Ich habe ein DbLog (mysql) mit folgender Definition:
/opt/fhem/db.conf .*:myTemp:.*|AZ_Thermostat:hmstate:.*|Bad_Thermostat:hmstate:.*|[hier noch mehr solche]|WC_Sensor:temperature_Zahl:.*|Wetterstation:indoorTemperature:.*

Dazu ein darauf verweisendes DbRep.

Jetzt habe ich 5 Datensätze in der history Tabelle angelegt:
+---------------------+----------------+-------------------+----------------------+-------------------+--------+------+
| TIMESTAMP           | DEVICE         | TYPE              | EVENT                | READING           | VALUE  | UNIT |
+---------------------+----------------+-------------------+----------------------+-------------------+--------+------+
| 1999-01-01 00:10:00 | Wetterstation  | Test              | x=1                  | x                 | 1      | leer |
| 1999-01-01 00:20:00 | Wetterstation  | Test              | x=2                  | x                 | 2      | leer |
| 1999-01-01 00:30:00 | Wetterstation  | indoorTemperature | indoorTemperature=20 | indoorTemperature | 20     | leer |
| 1999-01-01 00:40:00 | Wetterstation  | indoorTemperature | indoorTemperature=30 | indoorTemperature | 30     | leer |
| 1999-01-01 00:50:00 | Wetterstation  | indoorTemperature | indoorTemperature=40 | indoorTemperature | 40     | leer |


Mit den Atrributen
countEntriesDetail 1
timestamp_begin 1990-01-01 00:00:00
timestamp_end 2000-01-01 00:00:00

gibt ein countEntries folgendes aus:
1990-01-01__ALLREADINGS__COUNT_history__no_aggregation 5
1990-01-01__indoorTemperature__COUNT_history__no_aggregation 3
1990-01-01__x__COUNT_history__no_aggregation 2


Ist das richtig oder ist das falsch?
M.M. dürften die x-Zeilen nicht beachtet werden, da sie nicht im DbLog referenziert werden.


2. Jetzt ein reduceLog average führt zu folgendem Log:
2021.03.08 13:14:23 3: DbRep DbRep_Temperaturen - ################################################################
2021.03.08 13:14:23 3: DbRep DbRep_Temperaturen - ###                    new reduceLog run                     ###
2021.03.08 13:14:23 3: DbRep DbRep_Temperaturen - ################################################################
2021.03.08 13:14:23 3: DbRep DbRep_Temperaturen - reduce data older than: 2000-01-01 00:00:00, newer than: 1990-01-01 00:00:00
2021.03.08 13:14:23 3: DbRep DbRep_Temperaturen - reduceLog requested with options: AVERAGE=HOUR INCLUDE -> Devs: % Readings: %
2021.03.08 13:14:23 3: DbRep DbRep_Temperaturen - reduceLog finished. Rows processed: 5, deleted: 0, updated: 0

Und wie anzunehmen, sind alle Datensätze unverändert.

Wieso das?
Ich hätte eine Reduzierung der 3 indoor Zeilen erwartet (und wenn ich der Angabe oben folge auch noch der beiden x-Zeilen).


Homatrix

DS_Starter

Hallo,

Zitat
Ist das richtig oder ist das falsch?
Die Ausgabe ist richtig. 3 DS mit indoorTemperature, 2 DS x, Summe = 5

Zitat
M.M. dürften die x-Zeilen nicht beachtet werden, da sie nicht im DbLog referenziert werden.
Das ist nicht richtig. Die Regex in DbLog bestimmen was geloggt wird. Die Attribute / Angaben in DbRep bestimmen was/wie ausgewertet wird. Hat miteinander nichts zu tun. Ist auch nirgends in der Commandref beschrieben, oder ?

Zitat
Ich hätte eine Reduzierung der 3 indoor Zeilen erwartet (und wenn ich der Angabe oben folge auch noch der beiden x-Zeilen).
Das hätte ich auf den ersten Blick auch erwartet.
verbose 4 oder 5 im DbRep einschalten, reducelog laufen lassen und die Logausgabe anschauen/posten. Vllt. sieht man dann mehr.

Grüße,
Heiko
ESXi@NUC+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

Homatrix

Zitat von: DS_Starter am 08 März 2021, 13:42:15
Hallo,
Die Ausgabe ist richtig. 3 DS mit indoorTemperature, 2 DS x, Summe = 5
Das ist nicht richtig. Die Regex in DbLog bestimmen was geloggt wird. Die Attribute / Angaben in DbRep bestimmen was/wie ausgewertet wird. Hat miteinander nichts zu tun. Ist auch nirgends in der Commandref beschrieben, oder ?
Das habe ich aus der Konfiguration geschlossen, jedes DbRep referenziert ein DbLog.
Zitat commandref: "es wird der Name der auszuwertenden DbLog-Datenbankdefinition angegeben nicht der Datenbankname selbst"
Das habe ich dann anders verstanden, als es wohl gemeint ist.
Ich habe mehrere DbLogs. Das würde heissen, ich brauche nur ein DbRep, dass auf irgendeines meiner DbLogs zeigt, richtig?
Dann finde ich die Definition unglücklich gelöst, besser wäre direkt auf die DB zu zeigen.
Nungut, ich weiß es jetzt.
Danke.

Wenn ich es jetzt trotzdem so verwenden wollte, müßte ich die DbLog Definition in die device/reading Felder der DbRep Instanz stecken, richtig?

Zitat
Das hätte ich auf den ersten Blick auch erwartet.
verbose 4 oder 5 im DbRep einschalten, reducelog laufen lassen und die Logausgabe anschauen/posten. Vllt. sieht man dann mehr.

Kommt sofort:
2021.03.08 13:48:24 3: DbRep DbRep_Temperaturen - ################################################################
2021.03.08 13:48:24 3: DbRep DbRep_Temperaturen - ###                    new reduceLog run                     ###
2021.03.08 13:48:24 3: DbRep DbRep_Temperaturen - ################################################################
2021.03.08 13:48:24 4: DbRep DbRep_Temperaturen - -------- New selection ---------
2021.03.08 13:48:24 4: DbRep DbRep_Temperaturen - Command: reduceLog
2021.03.08 13:48:24 4: DbRep DbRep_Temperaturen - FullDay option: 0
2021.03.08 13:48:24 5: DbRep DbRep_Temperaturen - Timestamp begin epocheseconds: 631148400
2021.03.08 13:48:24 4: DbRep DbRep_Temperaturen - Timestamp begin human readable: 1990-01-01 00:00:00
2021.03.08 13:48:24 5: DbRep DbRep_Temperaturen - Timestamp end epocheseconds: 946681200
2021.03.08 13:48:24 4: DbRep DbRep_Temperaturen - Timestamp end human readable: 2000-01-01 00:00:00
2021.03.08 13:48:24 5: DbRep DbRep_Temperaturen - weekday start for selection: Mo  ->  wdadd: 604800
2021.03.08 13:48:25 5: DbRep DbRep_Temperaturen -> Start DbLog_reduceLog
2021.03.08 13:48:25 5: DbRep DbRep_Temperaturen - Devices for operation -
included (1): %
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.03.08 13:48:25 5: DbRep DbRep_Temperaturen - Readings for operation -
included (1): %
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.03.08 13:48:25 5: DbRep DbRep_Temperaturen - IsTimeSet: 1, IsAggrSet: 0
2021.03.08 13:48:25 5: DbRep DbRep_Temperaturen - Devices for operation -
included (1): %
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.03.08 13:48:25 5: DbRep DbRep_Temperaturen - Readings for operation -
included (1): %
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.03.08 13:48:25 4: DbRep DbRep_Temperaturen - SQL execute: SELECT TIMESTAMP,DEVICE,'',READING,VALUE FROM history where  TIMESTAMP >= '1990-01-01 00:00:00' AND TIMESTAMP <= '2000-01-01 00:00:00' ORDER BY TIMESTAMP ASC;
2021.03.08 13:48:25 3: DbRep DbRep_Temperaturen - reduce data older than: 2000-01-01 00:00:00, newer than: 1990-01-01 00:00:00
2021.03.08 13:48:25 3: DbRep DbRep_Temperaturen - reduceLog requested with options: AVERAGE=HOUR INCLUDE -> Devs: % Readings: %
2021.03.08 13:48:25 3: DbRep DbRep_Temperaturen - reduceLog finished. Rows processed: 5, deleted: 0, updated: 0
2021.03.08 13:48:25 5: DbRep DbRep_Temperaturen -> DbRep_reduceLogNbl finished


Hilft das?

DS_Starter

ZitatZitat commandref: "es wird der Name der auszuwertenden DbLog-Datenbankdefinition angegeben nicht der Datenbankname selbst"
Ist so gemeint wie es geschrieben steht. Man kann aber nicht daraus schließen, dass die im DbLog eingestellten Attribute, Regex etc. zwangsläufig berücksichtigt werden.

Zitat
Ich habe mehrere DbLogs. Das würde heissen, ich brauche nur ein DbRep, dass auf irgendeines meiner DbLogs zeigt, richtig?
Habe ich auch. Du brauchst für Datenabankauswertungen für jedes DbLog mindestens ein DbRep. Ich selbst habe wohl ingesamt über 100 DbRep Definitionen.

Zitat
Dann finde ich die Definition unglücklich gelöst, besser wäre direkt auf die DB zu zeigen.
Es werden sehr wohl Informationen aus dem DbLog genommen wie z.B. die credentials oder die verwendeten Breiten der Datenbankfelder. Aber das sind interne Abläufe die den Anwender nicht berühren.

Zitat
Wenn ich es jetzt trotzdem so verwenden wollte, müßte ich die DbLog Definition in die device/reading Felder der DbRep Instanz stecken, richtig?
Nicht einfach blind 1:1. Commandref/Wiki lesen wie etwas wann verwendet wird ! Manche Einstellungen sind sensitiv abhängig von dem ausgeführten Set-Befehl.

Zitat
Hilft das?
Naja nicht wirklich. Ist kein Fehler zu sehen o.ä.
Vllt. komme ich mal dazu es bei mir nachzustellen.
Welchen DB Typ setzt du ein ?
ESXi@NUC+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

Homatrix

Danke für deine Ausführungen!

Ich setze MariaDB ein.

Ich habe es jetzt noch ein paarmal probiert, weil ich dachte, dass es nicht tut, weil die Werte ausserhalb meiner eigentlichen Daten lagen. Aber nein.
Einige Male hat er die Updates gemacht, aber nichts gelöscht. Jetzt geht wieder nichts mehr. :-(

Hiermit habe ich jetzt Daten angelegt:
insert into history values('2017-06-02 15:10:00', 'XYZ', 'Test', 'x=10', 'x', '10', 'leer');
insert into history values('2017-06-02 15:11:00', 'XYZ', 'Test', 'x=11', 'x', '11', 'leer');
insert into history values('2017-06-02 15:12:00', 'XYZ', 'Test', 'x=12', 'x', '12', 'leer');
insert into history values('2017-06-02 15:13:00', 'XYZ', 'Test', 'x=13', 'x', '13', 'leer');
insert into history values('2017-06-02 15:14:00', 'XYZ', 'Test', 'x=14', 'x', '14', 'leer');
insert into history values('2017-06-02 15:15:00', 'XYZ', 'Test', 'x=15', 'x', '15', 'leer');
insert into history values('2017-06-02 15:16:00', 'XYZ', 'Test', 'x=16', 'x', '16', 'leer');
insert into history values('2017-06-02 15:17:00', 'XYZ', 'Test', 'x=17', 'x', '17', 'leer');


Und mein DbRep mit diesen Attributen gefüttert:
attr DbRep_Temperaturen allowDeletion 1
attr DbRep_Temperaturen countEntriesDetail 1
attr DbRep_Temperaturen device XYZ
attr DbRep_Temperaturen reading x
attr DbRep_Temperaturen timestamp_begin 2017-06-02 15:00:00
attr DbRep_Temperaturen timestamp_end 2017-06-02 18:00:00
attr DbRep_Temperaturen verbose 5


Das Ergebnis ist wieder:
2021.03.08 17:09:55 3: DbRep DbRep_Temperaturen - ################################################################
2021.03.08 17:09:55 3: DbRep DbRep_Temperaturen - ###                    new reduceLog run                     ###
2021.03.08 17:09:55 3: DbRep DbRep_Temperaturen - ################################################################
2021.03.08 17:09:55 4: DbRep DbRep_Temperaturen - -------- New selection ---------
2021.03.08 17:09:55 4: DbRep DbRep_Temperaturen - Command: reduceLog
2021.03.08 17:09:55 4: DbRep DbRep_Temperaturen - FullDay option: 0
2021.03.08 17:09:55 5: DbRep DbRep_Temperaturen - Timestamp begin epocheseconds: 1496408400
2021.03.08 17:09:55 4: DbRep DbRep_Temperaturen - Timestamp begin human readable: 2017-06-02 15:00:00
2021.03.08 17:09:55 5: DbRep DbRep_Temperaturen - Timestamp end epocheseconds: 1496419200
2021.03.08 17:09:55 4: DbRep DbRep_Temperaturen - Timestamp end human readable: 2017-06-02 18:00:00
2021.03.08 17:09:55 5: DbRep DbRep_Temperaturen - weekday start for selection: Fr  ->  wdadd: 259200
2021.03.08 17:09:56 5: DbRep DbRep_Temperaturen -> Start DbLog_reduceLog
2021.03.08 17:09:56 5: DbRep DbRep_Temperaturen - Devices for operation -
included (1): XYZ
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.03.08 17:09:56 5: DbRep DbRep_Temperaturen - Readings for operation -
included (1): x
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.03.08 17:09:56 5: DbRep DbRep_Temperaturen - IsTimeSet: 1, IsAggrSet: 0
2021.03.08 17:09:56 5: DbRep DbRep_Temperaturen - Devices for operation -
included (1): XYZ
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.03.08 17:09:56 5: DbRep DbRep_Temperaturen - Readings for operation -
included (1): x
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.03.08 17:09:56 4: DbRep DbRep_Temperaturen - SQL execute: SELECT TIMESTAMP,DEVICE,'',READING,VALUE FROM history where  ( DEVICE = 'XYZ' ) AND ( READING = 'x' ) AND TIMESTAMP >= '2017-06-02 15:00:00' AND TIMESTAMP <= '2017-06-02 18:00:00' ORDER BY TIMESTAMP ASC;
2021.03.08 17:09:56 3: DbRep DbRep_Temperaturen - reduce data older than: 2017-06-02 18:00:00, newer than: 2017-06-02 15:00:00
2021.03.08 17:09:56 3: DbRep DbRep_Temperaturen - reduceLog requested with options: AVERAGE=HOUR INCLUDE -> Devs: XYZ Readings: x
2021.03.08 17:09:56 3: DbRep DbRep_Temperaturen - reduceLog finished. Rows processed: 8, deleted: 0, updated: 0
2021.03.08 17:09:56 5: DbRep DbRep_Temperaturen -> DbRep_reduceLogNbl finished


Die Daten bleiben unverändert.

Kann ich irgendwas 'verstellt' haben? Ich habe ja reduceLog schon eingesetzt und mir wurden die Daten reduziert und gelöscht.
Sind meine Testdaten Müll?

:-\

DS_Starter

Zitat
Kann ich irgendwas 'verstellt' haben?
Kann ich mir nicht vorstellen und sehe auch nichts.

Ich bin mir jetzt grad nicht sicher und müsste mal im Code nachschauen (ist schon so lange her) ob das Verdichten auf den letzten Wert in der Stunde bei nicht numerischen Werten nur für identische Werte gilt, was hier nicht gegeben ist.

Du könntest mal mit Zusatz "average" arbeiten. Dann müsste der Durchschnitt der Stunde bei den numerischen Werten berechnet werden.
ESXi@NUC+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

Homatrix

Ich habe die ganze Zeit average genutzt.
Hier der vorletzte Lauf (alles wie 'immer', es geht nicht):
2021.03.08 18:10:05 3: DbRep DbRep_Temperaturen - ################################################################
2021.03.08 18:10:05 3: DbRep DbRep_Temperaturen - ###                    new reduceLog run                     ###
2021.03.08 18:10:05 3: DbRep DbRep_Temperaturen - ################################################################
2021.03.08 18:10:06 4: DbRep DbRep_Temperaturen - -------- New selection ---------
2021.03.08 18:10:06 4: DbRep DbRep_Temperaturen - Command: reduceLog
2021.03.08 18:10:06 4: DbRep DbRep_Temperaturen - timeOlderThan - year: 1, day: , hour: , min: , sec:
2021.03.08 18:10:06 4: DbRep DbRep_Temperaturen - Year 2020 is leap year
2021.03.08 18:10:06 4: DbRep DbRep_Temperaturen - startMonth: 5 endMonth: 2 lastleapyear:  baseYear: 2020 diffdaylight:0 isdaylight:0
2021.03.08 18:10:06 4: DbRep DbRep_Temperaturen - FullDay option: 0
2021.03.08 18:10:06 5: DbRep DbRep_Temperaturen - Timestamp begin epocheseconds: 1496406600
2021.03.08 18:10:06 4: DbRep DbRep_Temperaturen - Timestamp begin human readable: 2017-06-02 14:30:00
2021.03.08 18:10:06 4: DbRep DbRep_Temperaturen - Time difference to current time for calculating Timestamp end: 31536001 sec
2021.03.08 18:10:06 5: DbRep DbRep_Temperaturen - Timestamp end epocheseconds: 1583687405
2021.03.08 18:10:06 4: DbRep DbRep_Temperaturen - Timestamp end human readable: 2020-03-08 18:10:05
2021.03.08 18:10:06 5: DbRep DbRep_Temperaturen - weekday start for selection: Fr  ->  wdadd: 259200
2021.03.08 18:10:07 5: DbRep DbRep_Temperaturen -> Start DbLog_reduceLog
2021.03.08 18:10:07 5: DbRep DbRep_Temperaturen - Devices for operation -
included (1): XYZ
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.03.08 18:10:07 5: DbRep DbRep_Temperaturen - Readings for operation -
included (1): %
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.03.08 18:10:07 5: DbRep DbRep_Temperaturen - IsTimeSet: 1, IsAggrSet: 0
2021.03.08 18:10:07 5: DbRep DbRep_Temperaturen - Devices for operation -
included (1): XYZ
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.03.08 18:10:07 5: DbRep DbRep_Temperaturen - Readings for operation -
included (1): %
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.03.08 18:10:07 4: DbRep DbRep_Temperaturen - SQL execute: SELECT TIMESTAMP,DEVICE,'',READING,VALUE FROM history where  ( DEVICE = 'XYZ' ) AND TIMESTAMP >= '2017-06-02 14:30:00' AND TIMESTAMP <= '2020-03-08 18:10:05' ORDER BY TIMESTAMP ASC;
2021.03.08 18:10:07 3: DbRep DbRep_Temperaturen - reduce data older than: 2020-03-08 18:10:05, newer than: 2017-06-02 14:30:00
2021.03.08 18:10:07 3: DbRep DbRep_Temperaturen - reduceLog requested with options: AVERAGE=HOUR INCLUDE -> Devs: XYZ Readings: %
2021.03.08 18:10:07 3: DbRep DbRep_Temperaturen - reduceLog finished. Rows processed: 8, deleted: 0, updated: 0
2021.03.08 18:10:07 5: DbRep DbRep_Temperaturen -> DbRep_reduceLogNbl finished


Und, finally, ohne Device, einen, wo es wieder geht:
2021.03.08 18:10:23 3: DbRep DbRep_Temperaturen - ################################################################
2021.03.08 18:10:23 3: DbRep DbRep_Temperaturen - ###                    new reduceLog run                     ###
2021.03.08 18:10:23 3: DbRep DbRep_Temperaturen - ################################################################
2021.03.08 18:10:23 4: DbRep DbRep_Temperaturen - -------- New selection ---------
2021.03.08 18:10:23 4: DbRep DbRep_Temperaturen - Command: reduceLog
2021.03.08 18:10:23 4: DbRep DbRep_Temperaturen - timeOlderThan - year: 1, day: , hour: , min: , sec:
2021.03.08 18:10:23 4: DbRep DbRep_Temperaturen - Year 2020 is leap year
2021.03.08 18:10:23 4: DbRep DbRep_Temperaturen - startMonth: 5 endMonth: 2 lastleapyear:  baseYear: 2020 diffdaylight:0 isdaylight:0
2021.03.08 18:10:23 4: DbRep DbRep_Temperaturen - FullDay option: 0
2021.03.08 18:10:23 5: DbRep DbRep_Temperaturen - Timestamp begin epocheseconds: 1496406600
2021.03.08 18:10:23 4: DbRep DbRep_Temperaturen - Timestamp begin human readable: 2017-06-02 14:30:00
2021.03.08 18:10:23 4: DbRep DbRep_Temperaturen - Time difference to current time for calculating Timestamp end: 31536001 sec
2021.03.08 18:10:23 5: DbRep DbRep_Temperaturen - Timestamp end epocheseconds: 1583687422
2021.03.08 18:10:23 4: DbRep DbRep_Temperaturen - Timestamp end human readable: 2020-03-08 18:10:22
2021.03.08 18:10:23 5: DbRep DbRep_Temperaturen - weekday start for selection: Fr  ->  wdadd: 259200
2021.03.08 18:10:23 5: DbRep DbRep_Temperaturen -> Start DbLog_reduceLog
2021.03.08 18:10:23 5: DbRep DbRep_Temperaturen - Devices for operation -
included (1): %
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.03.08 18:10:23 5: DbRep DbRep_Temperaturen - Readings for operation -
included (1): %
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.03.08 18:10:23 5: DbRep DbRep_Temperaturen - IsTimeSet: 1, IsAggrSet: 0
2021.03.08 18:10:23 5: DbRep DbRep_Temperaturen - Devices for operation -
included (1): %
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.03.08 18:10:23 5: DbRep DbRep_Temperaturen - Readings for operation -
included (1): %
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.03.08 18:10:23 4: DbRep DbRep_Temperaturen - SQL execute: SELECT TIMESTAMP,DEVICE,'',READING,VALUE FROM history where  TIMESTAMP >= '2017-06-02 14:30:00' AND TIMESTAMP <= '2020-03-08 18:10:22' ORDER BY TIMESTAMP ASC;
2021.03.08 18:10:23 3: DbRep DbRep_Temperaturen - reduce data older than: 2020-03-08 18:10:22, newer than: 2017-06-02 14:30:00
2021.03.08 18:10:23 3: DbRep DbRep_Temperaturen - reduceLog requested with options: AVERAGE=HOUR INCLUDE -> Devs: % Readings: %
2021.03.08 18:10:30 3: DbRep DbRep_Temperaturen - reduceLog deleting 7 records of day: 2017-06-02
2021.03.08 18:10:30 4: DbRep DbRep_Temperaturen - DELETE FROM history WHERE (DEVICE=XYZ) AND (READING=x) AND (TIMESTAMP=2017-06-02 15:11:00) AND (VALUE=11)
2021.03.08 18:10:30 4: DbRep DbRep_Temperaturen - DELETE FROM history WHERE (DEVICE=XYZ) AND (READING=x) AND (TIMESTAMP=2017-06-02 15:12:00) AND (VALUE=12)
2021.03.08 18:10:30 4: DbRep DbRep_Temperaturen - DELETE FROM history WHERE (DEVICE=XYZ) AND (READING=x) AND (TIMESTAMP=2017-06-02 15:13:00) AND (VALUE=13)
2021.03.08 18:10:30 4: DbRep DbRep_Temperaturen - DELETE FROM history WHERE (DEVICE=XYZ) AND (READING=x) AND (TIMESTAMP=2017-06-02 15:14:00) AND (VALUE=14)
2021.03.08 18:10:30 4: DbRep DbRep_Temperaturen - DELETE FROM history WHERE (DEVICE=XYZ) AND (READING=x) AND (TIMESTAMP=2017-06-02 15:15:00) AND (VALUE=15)
2021.03.08 18:10:30 4: DbRep DbRep_Temperaturen - DELETE FROM history WHERE (DEVICE=XYZ) AND (READING=x) AND (TIMESTAMP=2017-06-02 15:16:00) AND (VALUE=16)
2021.03.08 18:10:30 4: DbRep DbRep_Temperaturen - DELETE FROM history WHERE (DEVICE=XYZ) AND (READING=x) AND (TIMESTAMP=2017-06-02 15:17:00) AND (VALUE=17)
2021.03.08 18:10:30 3: DbRep DbRep_Temperaturen - reduceLog (hourly-average) updating 1 records of day: 2017-06-02
2021.03.08 18:10:30 4: DbRep DbRep_Temperaturen - UPDATE history SET TIMESTAMP=2017-06-02 15:30:00, EVENT='rl_av_h', VALUE=13.500 WHERE DEVICE=XYZ AND READING=x AND TIMESTAMP=2017-06-02 15:10:00 AND VALUE=10
2021.03.08 18:10:49 3: DbRep DbRep_Temperaturen - reduceLog deleting 666 records of day: 2020-03-08
2021.03.08 18:10:49 4: DbRep DbRep_Temperaturen - DELETE FROM history WHERE (DEVICE=Wetterstation) AND (READING=luminosity) AND (TIMESTAMP=2020-03-08 17:00:44) AND (VALUE=5634.3)
2021.03.08 18:10:49 4: DbRep DbRep_Temperaturen - DELETE FROM history WHERE (DEVICE=Wetterstation) AND (READING=solarradiation) AND (TIMESTAMP=2020-03-08 17:00:44) AND (VALUE=44.47)
........ ganz viele andere DELETEs ......


Ich habe der Reihe nach meine Attribute wieder entfernt. Und nachdem dann Reading und Device weg waren, liefs wieder.
Dass es an der Deviceeinstellung liegt, kann ich mir kaum vorstellen. Kann es vielleicht daran liegen, dass mehr Treffer zusammengekommen sind? Gehts vielleicht immer nicht bei nur einem Update?



Homatrix

Ja, das ist es!

Mit diesen Testdaten (man beachte 15/16 Uhr):
insert into history values('2017-06-02 15:10:00', 'XYZ', 'Test', 'x=10', 'x', '10', 'leer');
insert into history values('2017-06-02 15:11:00', 'XYZ', 'Test', 'x=11', 'x', '11', 'leer');
insert into history values('2017-06-02 15:12:00', 'XYZ', 'Test', 'x=12', 'x', '12', 'leer');
insert into history values('2017-06-02 15:13:00', 'XYZ', 'Test', 'x=13', 'x', '13', 'leer');
insert into history values('2017-06-02 16:14:00', 'XYZ', 'Test', 'x=14', 'x', '14', 'leer');
insert into history values('2017-06-02 16:15:00', 'XYZ', 'Test', 'x=15', 'x', '15', 'leer');
insert into history values('2017-06-02 16:16:00', 'XYZ', 'Test', 'x=16', 'x', '16', 'leer');
insert into history values('2017-06-02 16:17:00', 'XYZ', 'Test', 'x=17', 'x', '17', 'leer');


kommt es zu folgendem Ergebnis (jetzt auch mit einem gesetzten Device):

2021.03.08 18:55:57 3: DbRep DbRep_Temperaturen - ################################################################
2021.03.08 18:55:57 3: DbRep DbRep_Temperaturen - ###                    new reduceLog run                     ###
2021.03.08 18:55:57 3: DbRep DbRep_Temperaturen - ################################################################
2021.03.08 18:55:57 4: DbRep DbRep_Temperaturen - -------- New selection ---------
2021.03.08 18:55:57 4: DbRep DbRep_Temperaturen - Command: reduceLog
2021.03.08 18:55:57 4: DbRep DbRep_Temperaturen - timeOlderThan - year: 1, day: , hour: , min: , sec:
2021.03.08 18:55:57 4: DbRep DbRep_Temperaturen - Year 2020 is leap year
2021.03.08 18:55:57 4: DbRep DbRep_Temperaturen - startMonth: 5 endMonth: 2 lastleapyear:  baseYear: 2020 diffdaylight:0 isdaylight:0
2021.03.08 18:55:57 4: DbRep DbRep_Temperaturen - FullDay option: 0
2021.03.08 18:55:57 5: DbRep DbRep_Temperaturen - Timestamp begin epocheseconds: 1496406600
2021.03.08 18:55:57 4: DbRep DbRep_Temperaturen - Timestamp begin human readable: 2017-06-02 14:30:00
2021.03.08 18:55:57 4: DbRep DbRep_Temperaturen - Time difference to current time for calculating Timestamp end: 31536001 sec
2021.03.08 18:55:57 5: DbRep DbRep_Temperaturen - Timestamp end epocheseconds: 1583690156
2021.03.08 18:55:57 4: DbRep DbRep_Temperaturen - Timestamp end human readable: 2020-03-08 18:55:56
2021.03.08 18:55:57 5: DbRep DbRep_Temperaturen - weekday start for selection: Fr  ->  wdadd: 259200
2021.03.08 18:55:57 5: DbRep DbRep_Temperaturen -> Start DbLog_reduceLog
2021.03.08 18:55:57 5: DbRep DbRep_Temperaturen - Devices for operation -
included (1): XYZ
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.03.08 18:55:57 5: DbRep DbRep_Temperaturen - Readings for operation -
included (1): x
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.03.08 18:55:57 5: DbRep DbRep_Temperaturen - IsTimeSet: 1, IsAggrSet: 0
2021.03.08 18:55:57 5: DbRep DbRep_Temperaturen - Devices for operation -
included (1): XYZ
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.03.08 18:55:57 5: DbRep DbRep_Temperaturen - Readings for operation -
included (1): x
included with wildcard: 
excluded (0): 
excluded with wildcard:
2021.03.08 18:55:57 4: DbRep DbRep_Temperaturen - SQL execute: SELECT TIMESTAMP,DEVICE,'',READING,VALUE FROM history where  ( DEVICE = 'XYZ' ) AND ( READING = 'x' ) AND TIMESTAMP >= '2017-06-02 14:30:00' AND TIMESTAMP <= '2020-03-08 18:55:56' ORDER BY TIMESTAMP ASC;
2021.03.08 18:55:57 3: DbRep DbRep_Temperaturen - reduce data older than: 2020-03-08 18:55:56, newer than: 2017-06-02 14:30:00
2021.03.08 18:55:57 3: DbRep DbRep_Temperaturen - reduceLog requested with options: AVERAGE=HOUR INCLUDE -> Devs: XYZ Readings: x
2021.03.08 18:55:57 3: DbRep DbRep_Temperaturen - reduceLog deleting 3 records of day: 2017-06-02
2021.03.08 18:55:57 4: DbRep DbRep_Temperaturen - DELETE FROM history WHERE (DEVICE=XYZ) AND (READING=x) AND (TIMESTAMP=2017-06-02 15:11:00) AND (VALUE=11)
2021.03.08 18:55:57 4: DbRep DbRep_Temperaturen - DELETE FROM history WHERE (DEVICE=XYZ) AND (READING=x) AND (TIMESTAMP=2017-06-02 15:12:00) AND (VALUE=12)
2021.03.08 18:55:57 4: DbRep DbRep_Temperaturen - DELETE FROM history WHERE (DEVICE=XYZ) AND (READING=x) AND (TIMESTAMP=2017-06-02 15:13:00) AND (VALUE=13)
2021.03.08 18:55:57 3: DbRep DbRep_Temperaturen - reduceLog (hourly-average) updating 1 records of day: 2017-06-02
2021.03.08 18:55:57 4: DbRep DbRep_Temperaturen - UPDATE history SET TIMESTAMP=2017-06-02 15:30:00, EVENT='rl_av_h', VALUE=11.500 WHERE DEVICE=XYZ AND READING=x AND TIMESTAMP=2017-06-02 15:10:00 AND VALUE=10
2021.03.08 18:55:57 3: DbRep DbRep_Temperaturen - reduceLog finished. Rows processed: 8, deleted: 3, updated: 1
2021.03.08 18:55:57 5: DbRep DbRep_Temperaturen -> DbRep_reduceLogNbl finished


Sieht für mich so aus, als würde der letzte Datensatz verschluckt.
..... fehlt wohl irgendwo ein +1 ;-)


DS_Starter

Ja scheint so  ;)
Das muss ich mir mal genauer anshauen.
Schon komisch, die Funktion gibt es nicht erst seit "gestern" ...
ESXi@NUC+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