FHEM Forum

FHEM => Automatisierung => Thema gestartet von: kask am 02 August 2022, 18:13:38

Titel: DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: kask am 02 August 2022, 18:13:38
Hallo,
ich bin auf der Suche über Fhem sämtliche DBLog Einträge eines Tages zu entfernen und nur den größten Wert des Tages zu behalten. Oder den letzten Wert des Tages.
Es geht unter anderem um den Tagesstromverbrauch über ein Tasmotagerät. Ich würde gerne alle Einträge löschen die nur die DB voll müllen.


Es müsste ja eigentlich mit DBrep irgendwie funktionieren. Ich verstehe das aber nicht so recht.
Mit dem Durchschnittswertes einer Stunde/Tages habe ich es hin bekommen.

Hat da schon einer was vorbereitet bzw. umgesetzt der mich teilhaben lassen kann?

Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 02 August 2022, 19:04:54
Zitat
Es müsste ja eigentlich mit DBrep irgendwie funktionieren. Ich verstehe das aber nicht so recht.
Mit dem Durchschnittswertes einer Stunde/Tages habe ich es hin bekommen.

Benutze dafür einfach:

set <dbrep> maxValue deleteOther

Die Attribute stellst du so ein, dass immer der vergangene Tag (also Gestern) bearbeitet wird.

timestamp_begin  = previous_day_begin
timestamp_end     = previous_day_end

Die Attr device / reading natürlich auch entsprechend einstellen.
Mit einem at lässt du das Device z.B. jeden Tag früh um 00:30 laufen und hast immer nur noch den Max-Wert in der DB.
Den laufen Tag kannst du natürlich noch nicht bearbeiten, das Maximum ist ja noch nicht bekannt.
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: kask am 02 August 2022, 23:06:14
Erst einmal danke für die Info.
Wenn ich es ausführe kommt folgendes:
ZitatSet attribute 'allowDeletion' if you want to allow deletion of any database entries. Use it with care !

Und wenn ich das setze dann bleibt kein Wert mehr übrig von dem Tag. Da wird mal kurze15 alles vom Vortag gelöscht was in den readings angegeben ist ;(

Auszug aus dem logfile:
Zitat
2022.08.02 22:52:30 3: DbRep Rep_daily_maxvalue - get initial structure information of database "fhem", remaining attempts: 3
2022.08.02 22:52:30 3: DbRep Rep_daily_maxvalue - Connectiontest to database mysql:database=fhem;host=127.0.0.1;port=3306 with user root
2022.08.02 22:53:43 3: DbRep Rep_daily_maxvalue - WARNING - Index Report_Idx doesn't exist. Please create the index by "set Rep_daily_maxvalue index recreate_Report_Idx" command !
2022.08.02 22:53:44 3: DbRep Rep_daily_maxvalue - Initial data information retrieved - total time used: 73.4094 seconds
2022.08.02 22:53:44 3: DbRep Rep_daily_maxvalue - Connectiontest to db mysql:database=fhem;host=127.0.0.1;port=3306 successful
2022.08.02 22:53:44 3: DbRep Rep_daily_maxvalue - number of lines deleted in "logdb": 5759



Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 03 August 2022, 08:26:42
Kann ich so nicht bestätigen.
Eben nochmal getestet.
Es wurden 859 Einträge gelöscht


2022.08.03 08:16:37.802 4: DbRep Rep.LogDB1 - -------- New selection ---------
2022.08.03 08:16:37.803 4: DbRep Rep.LogDB1 - Command: maxValue deleteOther
2022.08.03 08:16:37.804 4: DbRep Rep.LogDB1 - FullDay option: 0
2022.08.03 08:16:37.805 4: DbRep Rep.LogDB1 - Timestamp begin human readable: 2022-08-02 00:00:00
2022.08.03 08:16:37.806 4: DbRep Rep.LogDB1 - Timestamp end human readable: 2022-08-02 23:59:59
2022.08.03 08:16:37.807 4: DbRep Rep.LogDB1 - Aggregation: no
2022.08.03 08:16:37.830 4: DbRep Rep.LogDB1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2022.08.03 08:16:37.834 4: DbRep Rep.LogDB1 - SQL execute: SELECT VALUE,TIMESTAMP FROM history where ( DEVICE = 'MySTP_5000' ) AND ( READING = 'total_pac' ) AND TIMESTAMP >= '2022-08-02 00:00:00' AND TIMESTAMP <= '2022-08-02 23:59:59' ORDER BY TIMESTAMP;
2022.08.03 08:16:38.134 4: DbRep Rep.LogDB1 - SQL execute: delete FROM history where ( DEVICE = 'MySTP_5000' ) AND ( READING = 'total_pac' ) AND TIMESTAMP >= '2022-08-02 00:00:00' AND TIMESTAMP <= '2022-08-02 23:59:59' AND (TIMESTAMP,VALUE) != ('2022-08-02_13-22-55','4.723');
2022.08.03 08:16:38.542 3: DbRep Rep.LogDB1 - number of lines deleted in "LogDB1": 859


Übrig geblieben ist der Max Wert:


2022.08.03 08:23:08.910 4: DbRep Rep.LogDB1 - -------- New selection ---------
2022.08.03 08:23:08.911 4: DbRep Rep.LogDB1 - Command: fetchrows history
2022.08.03 08:23:08.912 4: DbRep Rep.LogDB1 - FullDay option: 0
2022.08.03 08:23:08.912 5: DbRep Rep.LogDB1 - Timestamp begin epocheseconds: 1659391200
2022.08.03 08:23:08.913 4: DbRep Rep.LogDB1 - Timestamp begin human readable: 2022-08-02 00:00:00
2022.08.03 08:23:08.913 5: DbRep Rep.LogDB1 - Timestamp end epocheseconds: 1659477599
2022.08.03 08:23:08.913 4: DbRep Rep.LogDB1 - Timestamp end human readable: 2022-08-02 23:59:59
2022.08.03 08:23:08.914 5: DbRep Rep.LogDB1 - weekday start for selection: Di  ->  wdadd: 518400
2022.08.03 08:23:08.928 5: DbRep Rep.LogDB1 - BlockingCall with PID "27103" started
2022.08.03 08:23:09.299 4: DbRep Rep.LogDB1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2022.08.03 08:23:09.302 5: DbRep Rep.LogDB1 - IsTimeSet: 1, IsAggrSet: 0
2022.08.03 08:23:09.303 5: DbRep Rep.LogDB1 - Devices for operation -
included (1): MySTP_5000
included with wildcard: 
excluded (0): 
excluded with wildcard:
2022.08.03 08:23:09.304 5: DbRep Rep.LogDB1 - Readings for operation -
included (1): total_pac
included with wildcard: 
excluded (0): 
excluded with wildcard:
2022.08.03 08:23:09.304 4: DbRep Rep.LogDB1 - SQL execute: SELECT DEVICE,READING,TIMESTAMP,VALUE,UNIT FROM history where ( DEVICE = 'MySTP_5000' ) AND ( READING = 'total_pac' ) AND TIMESTAMP >= '2022-08-02 00:00:00' AND TIMESTAMP <= '2022-08-02 23:59:59' ORDER BY TIMESTAMP DESC LIMIT 2001;
2022.08.03 08:23:10.933 5: DbRep Rep.LogDB1 -> row result list:
MySTP_5000_ESC_total_pac_ESC_2022-08-02_ESC_13:22:55_ESC_4.723_ESC_

2022.08.03 08:23:10.936 5: DbRep Rep.LogDB1 - BlockingCall PID "27103" finished
2022.08.03 08:23:10.937 5: DbRep Rep.LogDB1 - row_array decoded:
MySTP_5000_ESC_total_pac_ESC_2022-08-02_ESC_13:22:55_ESC_4.723_ESC_


-> 2022.08.03 08:23:10.933 5: DbRep Rep.LogDB1 -> row result list:
MySTP_5000_ESC_total_pac_ESC_2022-08-02_ESC_13:22:55_ESC_4.723_ESC_

Hast du die aktuellste DbRep Version ? Welche DB (bei mir ist es MariaDB) ?

Grüße,
Heiko
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 03 August 2022, 15:30:45
Ich habe einen Fehler festgestellt, der sich nur bei Verwendung von SQLite zeigt.
Er ist in meinem contrib korrigiert. Bitte teste diese Version.

Zum Download in der FHEMWEB Kommandozeile inklusive der Anführungszeichen angeben und danach FHEM restarten:


"wget -qO ./FHEM/93_DbRep.pm https://svn.fhem.de/fhem/trunk/fhem/contrib/DS_Starter/93_DbRep.pm"


Sorry für die Unannehmlichkeiten.

Grüße,
Heiko
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: kask am 03 August 2022, 20:13:19
Sorry aber es ist so, da muss doch was falsch bei mir sein.

ich nutze aber mariadb!

ich habe das update ausgeführt.

Zitat
| 2022-08-02 23:55:04 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.549 | ENERGY_Today | 3.549 |      |
| 2022-08-02 23:56:04 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.549 | ENERGY_Today | 3.549 |      |
| 2022-08-02 23:57:04 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.549 | ENERGY_Today | 3.549 |      |
| 2022-08-02 23:58:03 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.549 | ENERGY_Today | 3.549 |      |
| 2022-08-02 23:59:04 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.549 | ENERGY_Today | 3.549 |      |
+---------------------+-------------------+--------------+---------------------+--------------+-------+------+
1436 rows in set (0.688 sec)

MariaDB [fhem]> select * from history where DEVICE = "MQTT2_DVES_361BA0" and reading = "ENERGY_Today" and date(timestamp) = '2022-08-02';
Empty set (0.011 sec)

..und soviele einträge bleiben über von den 1436 mit den parametern aus dem Bild!

Zitat2022-08-03_20:05:17 Logfile clear
2022.08.03 20:05:37 1: RMDIR: ./restoreDir/save/2022-07-30
2022.08.03 20:06:01 3: DbRep Rep_daily_maxvalue - get initial structure information of database "fhem", remaining attempts: 3
2022.08.03 20:06:01 3: DbRep Rep_daily_maxvalue - Connectiontest to database mysql:database=fhem;host=127.0.0.1;port=3306 with user root
2022.08.03 20:07:15 3: DbRep Rep_daily_maxvalue - WARNING - Index Report_Idx doesn't exist. Please create the index by "set Rep_daily_maxvalue index recreate_Report_Idx" command !
2022.08.03 20:07:15 3: DbRep Rep_daily_maxvalue - Initial data information retrieved - total time used: 73.6005 seconds
2022.08.03 20:07:15 3: DbRep Rep_daily_maxvalue - Connectiontest to db mysql:database=fhem;host=127.0.0.1;port=3306 successful
2022.08.03 20:07:15 3: DbRep Rep_daily_maxvalue - number of lines deleted in "logdb": 5743

..und dem logfile
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 03 August 2022, 20:22:55
Zitat
..und soviele einträge bleiben über von den 1436 mit den parametern aus dem Bild!
Was bleibt übrig ?  1436 rows oder was genau ?
Wenn es so ist, dann liegt es daran dass alle diese rows exakt den Maximalwert von 3.549 aufweisen.

Um solche überflüssigen Einträge zu vermeiden kann man event-on-change-reading im Device MQTT2_DVES_361BA0 für das Reading ENERGY_Today setzen. Dann werden nur Werte in die DB geschrieben wenn sie sich auch ändern.
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: kask am 03 August 2022, 20:52:33
es bleigt ein empty set über...nichts mehr.

und es waren vorher auch andere werte enthalten.
Zitat| 2022-08-02 19:15:03 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.529 | ENERGY_Today | 3.529 |      |
| 2022-08-02 19:16:03 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.529 | ENERGY_Today | 3.529 |      |
| 2022-08-02 19:17:03 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.530 | ENERGY_Today | 3.530 |      |
| 2022-08-02 19:18:03 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.530 | ENERGY_Today | 3.530 |      |
| 2022-08-02 19:19:03 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.530 | ENERGY_Today | 3.530 |      |
| 2022-08-02 19:20:04 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.531 | ENERGY_Today | 3.531 |      |
| 2022-08-02 19:21:03 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.531 | ENERGY_Today | 3.531 |      |
| 2022-08-02 19:22:03 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.531 | ENERGY_Today | 3.531 |      |
| 2022-08-02 19:23:03 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.532 | ENERGY_Today | 3.532 |      |
| 2022-08-02 19:24:03 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.532 | ENERGY_Today | 3.532 |      |
| 2022-08-02 19:25:03 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.532 | ENERGY_Today | 3.532 |      |
| 2022-08-02 19:26:03 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.532 | ENERGY_Today | 3.532 |      |
| 2022-08-02 19:27:03 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.533 | ENERGY_Today | 3.533 |      |
| 2022-08-02 19:28:03 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.533 | ENERGY_Today | 3.533 |      |
| 2022-08-02 19:29:03 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.533 | ENERGY_Today | 3.533 |      |
| 2022-08-02 19:30:03 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.534 | ENERGY_Today | 3.534 |      |
| 2022-08-02 19:31:03 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.534 | ENERGY_Today | 3.534 |      |
| 2022-08-02 19:32:03 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 3.534 | ENERGY_Today | 3.534 |     
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: kask am 03 August 2022, 21:16:44
Kann es vieleicht daran liegen das die Uhrzeit im tasmota nicht stimmt und die erste Stunde höhere werte hat?
(das hattee ich gestern erst gefixt)

Zitat| 2022-08-02 00:56:39 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 2.173 | ENERGY_Today | 2.173 |      |
| 2022-08-02 00:57:39 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 2.173 | ENERGY_Today | 2.173 |      |
| 2022-08-02 00:58:39 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 2.173 | ENERGY_Today | 2.173 |      |
| 2022-08-02 00:59:39 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 2.173 | ENERGY_Today | 2.173 |      |
| 2022-08-02 01:00:39 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 0.000 | ENERGY_Today | 0.000 |      |
| 2022-08-02 01:01:39 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 0.000 | ENERGY_Today | 0.000 |      |
| 2022-08-02 01:02:39 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 0.000 | ENERGY_Today | 0.000 |      |
| 2022-08-02 01:03:39 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 0.000 | ENERGY_Today | 0.000 |      |
| 2022-08-02 01:04:39 | MQTT2_DVES_361BA0 | MQTT2_DEVICE | ENERGY_Today: 0.000 | ENERGY_Today | 0.000 |      |
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 03 August 2022, 21:39:18
Zitat
Kann es vieleicht daran liegen das die Uhrzeit im tasmota nicht stimmt und die erste Stunde höhere werte hat?
Nein, dann würde dieser Max Wert in der DB verbleiben.


Wie geschrieben, kann ich bei es mir nicht nachvollziehen.
Hier nochmal ein schrittweises Beispiel.
Dieses DbRep wird für die nachfolgenden Aktionen verwendet:


defmod Rep.fhemtest1 DbRep LogDB1
attr Rep.fhemtest1 aggregation no
attr Rep.fhemtest1 allowDeletion 1
attr Rep.fhemtest1 device MySTP_5000
attr Rep.fhemtest1 event-on-update-reading state
attr Rep.fhemtest1 reading total_pac
attr Rep.fhemtest1 room DbLog
attr Rep.fhemtest1 showproctime 1
attr Rep.fhemtest1 timestamp_begin 2022-07-30 00:00:00
attr Rep.fhemtest1 timestamp_end 2022-07-30 23:59:59
attr Rep.fhemtest1 verbose 4


Es wird Device / Reading  MySTP_5000 / total_pac verwendet, das ist die gemessene Leistung des Wechselrichters.

Zunächst ein countEntries um die aktuell vorhandenen Datensätze zu zählen:


2022.08.03 21:02:58.866 4: DbRep Rep.fhemtest1 - -------- New selection ---------
2022.08.03 21:02:58.867 4: DbRep Rep.fhemtest1 - Command: countEntries history
2022.08.03 21:02:58.867 4: DbRep Rep.fhemtest1 - FullDay option: 0
2022.08.03 21:02:58.868 4: DbRep Rep.fhemtest1 - Timestamp begin human readable: 2022-07-30 00:00:00
2022.08.03 21:02:58.868 4: DbRep Rep.fhemtest1 - Timestamp end human readable: 2022-07-30 23:59:59
2022.08.03 21:02:58.869 4: DbRep Rep.fhemtest1 - Aggregation: no
2022.08.03 21:02:58.890 4: DbRep Rep.fhemtest1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2022.08.03 21:02:58.895 4: DbRep Rep.fhemtest1 - SQL execute: SELECT COUNT(*) FROM history where ( DEVICE = 'MySTP_5000' ) AND ( READING = 'total_pac' ) AND TIMESTAMP >= '2022-07-30 00:00:00' AND TIMESTAMP <= '2022-07-30 23:59:59' ;


Ergebnis sind 763:


   READINGS:
     2022-08-03 21:02:59   2022-07-30__COUNT_history__no_aggregation 763
     2022-08-03 21:02:59   background_processing_time 0.9327
     2022-08-03 21:02:59   sql_processing_time 0.9277
     2022-08-03 21:02:59   state           done


Jetzt zeige ich den Max Wert an mit maxValue display:


2022.08.03 21:08:45.719 4: DbRep Rep.fhemtest1 - -------- New selection ---------
2022.08.03 21:08:45.720 4: DbRep Rep.fhemtest1 - Command: maxValue display
2022.08.03 21:08:45.720 4: DbRep Rep.fhemtest1 - FullDay option: 0
2022.08.03 21:08:45.721 4: DbRep Rep.fhemtest1 - Timestamp begin human readable: 2022-07-30 00:00:00
2022.08.03 21:08:45.721 4: DbRep Rep.fhemtest1 - Timestamp end human readable: 2022-07-30 23:59:59
2022.08.03 21:08:45.722 4: DbRep Rep.fhemtest1 - Aggregation: no
2022.08.03 21:08:45.746 4: DbRep Rep.fhemtest1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2022.08.03 21:08:45.749 4: DbRep Rep.fhemtest1 - SQL execute: SELECT VALUE,TIMESTAMP FROM history where ( DEVICE = 'MySTP_5000' ) AND ( READING = 'total_pac' ) AND TIMESTAMP >= '2022-07-30 00:00:00' AND TIMESTAMP <= '2022-07-30 23:59:59' ORDER BY TIMESTAMP


Ergebnis ist 1.1790 um 2022-07-30_15-29-27:


   READINGS:
     2022-08-03 21:08:46   2022-07-30_15-29-27__MySTP_5000__total_pac__MAX__no_aggregation 1.1790
     2022-08-03 21:08:46   background_processing_time 1.1393
     2022-08-03 21:08:46   sql_processing_time 1.1318
     2022-08-03 21:08:46   state           done


Jetzt werden außer dem Maxwert alle anderen gelöscht mit maxValue deleteOther


2022.08.03 21:12:36.700 4: DbRep Rep.fhemtest1 - -------- New selection ---------
2022.08.03 21:12:36.701 4: DbRep Rep.fhemtest1 - Command: maxValue deleteOther
2022.08.03 21:12:36.701 4: DbRep Rep.fhemtest1 - FullDay option: 0
2022.08.03 21:12:36.702 4: DbRep Rep.fhemtest1 - Timestamp begin human readable: 2022-07-30 00:00:00
2022.08.03 21:12:36.702 4: DbRep Rep.fhemtest1 - Timestamp end human readable: 2022-07-30 23:59:59
2022.08.03 21:12:36.703 4: DbRep Rep.fhemtest1 - Aggregation: no
2022.08.03 21:12:36.722 4: DbRep Rep.fhemtest1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2022.08.03 21:12:36.726 4: DbRep Rep.fhemtest1 - SQL execute: SELECT VALUE,TIMESTAMP FROM history where ( DEVICE = 'MySTP_5000' ) AND ( READING = 'total_pac' ) AND TIMESTAMP >= '2022-07-30 00:00:00' AND TIMESTAMP <= '2022-07-30 23:59:59' ORDER BY TIMESTAMP;
2022.08.03 21:12:37.505 4: DbRep Rep.fhemtest1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2022.08.03 21:12:37.507 4: DbRep Rep.fhemtest1 - begin transaction
2022.08.03 21:12:37.507 4: DbRep Rep.fhemtest1 - SQL execute: delete FROM history where ( DEVICE = 'MySTP_5000' ) AND ( READING = 'total_pac' ) AND TIMESTAMP >= '2022-07-30 00:00:00' AND TIMESTAMP <= '2022-07-30 23:59:59' AND (TIMESTAMP,VALUE) != ("2022-07-30 15:29:27","1.179");
2022.08.03 21:12:37.930 4: DbRep Rep.fhemtest1 - transaction committed
2022.08.03 21:12:37.931 3: DbRep Rep.fhemtest1 - number of lines deleted in "LogDB1": 762


Es wurden also 762 gelöscht, vorganden waren (siehe oben) 763.

Zum check nochmal ein countEntries nach dem Löschen:


   READINGS:
     2022-08-03 21:33:35   2022-07-30__COUNT_history__no_aggregation 1
     2022-08-03 21:33:35   background_processing_time 1.8349
     2022-08-03 21:33:35   sql_processing_time 1.8309
     2022-08-03 21:33:35   state           done


1 Datensatz blieb übrig. Um noch zu vergleichen welcher geblieben ist mache ich ein fetchrows:


   READINGS:
     2022-08-03 21:34:56   2022-07-30_15-29-27__1__MySTP_5000__total_pac 1.179
     2022-08-03 21:34:56   background_processing_time 1.6397
     2022-08-03 21:34:56   number_fetched_rows 1
     2022-08-03 21:34:56   sql_processing_time 1.6355
     2022-08-03 21:34:56   state           done


Wie erwartet verblieb der Datensatz  2022-07-30_15-29-27 mit  1.179 in der DB.

Vllt. hilft dir diese Vorgehensweise für einen Vergleich.
Momentan fehlt mir die Phantasie was bei dir falsch laufen könnte.
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: kask am 03 August 2022, 22:26:50
Ok, ich bin weiter gekommen.
Die readings kommasepariert funktionieren so wohl nicht. Wenn ich nur ein reading nehme z.B."ENERGY_Total" funktioniert es.


Raw definition:
Zitat
defmod Rep_daily_maxvalue DbRep logdb
attr Rep_daily_maxvalue aggregation no
attr Rep_daily_maxvalue allowDeletion 1
attr Rep_daily_maxvalue device MQTT2_DVES_17C0D3
attr Rep_daily_maxvalue event-on-update-reading state
attr Rep_daily_maxvalue reading ENERGY_Today,ENERGY_Total,ENERGY_Yesterday
attr Rep_daily_maxvalue room log
attr Rep_daily_maxvalue showproctime 1
attr Rep_daily_maxvalue timestamp_begin 2022-07-29 00:00:00
attr Rep_daily_maxvalue timestamp_end 2022-07-29 23:59:59
attr Rep_daily_maxvalue verbose 4

Vor dem Aufruf:
Zitat
MariaDB [fhem]> select count(timestamp) from history where DEVICE = "MQTT2_DVES_17C0D3" and reading = "ENERGY_Today" and date(timestamp) = '2022-07-29';
+------------------+
| count(timestamp) |
+------------------+
|             1442 |
+------------------+
1 row in set (0.149 sec)

MariaDB [fhem]> select count(timestamp) from history where DEVICE = "MQTT2_DVES_17C0D3" and reading = "ENERGY_Total" and date(timestamp) = '2022-07-29';
+------------------+
| count(timestamp) |
+------------------+
|             1442 |
+------------------+
1 row in set (0.151 sec)

MariaDB [fhem]> select count(timestamp) from history where DEVICE = "MQTT2_DVES_17C0D3" and reading = "ENERGY_Yesterday" and date(timestamp) = '2022-07-29';
+------------------+
| count(timestamp) |
+------------------+
|             1442 |
+------------------+
1 row in set (0.200 sec)

Nach der dbrep ausführung:
Zitat
MariaDB [fhem]> select count(timestamp) from history where DEVICE = "MQTT2_DVES_17C0D3" and reading = "ENERGY_Today" and date(timestamp) = '2022-07-29';
+------------------+
| count(timestamp) |
+------------------+
|                1 |
+------------------+
1 row in set (0.212 sec)

MariaDB [fhem]> select count(timestamp) from history where DEVICE = "MQTT2_DVES_17C0D3" and reading = "ENERGY_Total" and date(timestamp) = '2022-07-29';
+------------------+
| count(timestamp) |
+------------------+
|                0 |
+------------------+
1 row in set (0.146 sec)

MariaDB [fhem]> select count(timestamp) from history where DEVICE = "MQTT2_DVES_17C0D3" and reading = "ENERGY_Yesterday" and date(timestamp) = '2022-07-29';
+------------------+
| count(timestamp) |
+------------------+
|                0 |
+------------------+
1 row in set (0.205 sec)



logfile:
Zitat
2022.08.03 22:11:08 4: DbRep Rep_daily_maxvalue - -------- New selection ---------
2022.08.03 22:11:08 4: DbRep Rep_daily_maxvalue - Command: minValue deleteOther
2022.08.03 22:11:08 4: DbRep Rep_daily_maxvalue - FullDay option: 0
2022.08.03 22:11:08 4: DbRep Rep_daily_maxvalue - Timestamp begin human readable: 2022-07-29 00:00:00
2022.08.03 22:11:08 4: DbRep Rep_daily_maxvalue - Timestamp end human readable: 2022-07-29 23:59:59
2022.08.03 22:11:08 4: DbRep Rep_daily_maxvalue - Aggregation: no
2022.08.03 22:11:08 4: DbRep Rep_daily_maxvalue - Database connect - user: root, UTF-8 option set: yes
2022.08.03 22:11:08 4: DbRep Rep_daily_maxvalue - SQL execute: SELECT VALUE,TIMESTAMP FROM history where ( DEVICE = 'MQTT2_DVES_17C0D3' ) AND ( READING IN ('ENERGY_Today','ENERGY_Total','ENERGY_Yesterday') ) AND TIMESTAMP >= '2022-07-29 00:00:00' AND TIMESTAMP <= '2022-07-29 23:59:59' ORDER BY TIMESTAMP;
2022.08.03 22:11:09 4: DbRep Rep_daily_maxvalue - Database connect - user: root, UTF-8 option set: yes
2022.08.03 22:11:09 4: DbRep Rep_daily_maxvalue - begin transaction
2022.08.03 22:11:09 4: DbRep Rep_daily_maxvalue - SQL execute: delete FROM history where ( DEVICE = 'MQTT2_DVES_17C0D3' ) AND ( READING IN ('ENERGY_Today','ENERGY_Total','ENERGY_Yesterday') ) AND TIMESTAMP >= '2022-07-29 00:00:00' AND TIMESTAMP <= '2022-07-29 23:59:59' AND (TIMESTAMP,VALUE) != ("2022-07-29 01:00:31","0.001");
2022.08.03 22:11:09 4: DbRep Rep_daily_maxvalue - transaction committed
2022.08.03 22:11:09 3: DbRep Rep_daily_maxvalue - number of lines deleted in "logdb": 4325

Das funktioniert nicht.
Zitat
reading - Selection of particular or several readings. More than one reading can be specified by a comma separated list.
SQL wildcard (%) can be used.
If the reading or the reading list is prepended by "EXCLUDE=", those readings are not included.

    Examples:
    attr <name> reading etotal
    attr <name> reading et%
    attr <name> reading etotal,etoday
    attr <name> reading eto%,Einspeisung EXCLUDE=etoday
    attr <name> reading etotal,etoday,Ein% EXCLUDE=%Wirkleistung
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 03 August 2022, 22:30:21
Das ist eine Spur. Danke, das schaue ich mir morgen mal an.
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: kask am 04 August 2022, 23:19:53
Das gleiche ist auch bei den kommaseparierten Devices.
Hast du das mal probiert? Mit mehreren Devices und/oder Readings?

Ich habe mir die 93_DbRep.pm angeschaut.
Ich vermute das das garnicht geht bzw. nicht mehr geht egal wo angewendet.
Es werden zumindest im maxvalue und minvalue immer alle devices und alle readings verodert.
Eigentlich müsste doch jedes device mit jedem reading separat geprüft werden.
Also bei z.B. 2 devices und 2 readings sollten es 4 durchläufe sein.
1. dev1&read1
2. dev1&read2
3. dev2&read1
4. dev2&read2

Aber es gibt nur eine Abfrage mit ((dev1 oder dev 2) und (read1 oder read2)). Und dann bleibt am Ende aus allen matched rows nur die über die den größten absoluten Wert hat.

Mit wildcards habe ich es nicht versucht. Ich habe nur absolute parameter getestet.

Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 05 August 2022, 07:38:45
Zitat
Es werden zumindest im maxvalue und minvalue immer alle devices und alle readings verodert.
So ist es gewollt und richtig.

Zitat
Ich vermute das das garnicht geht bzw. nicht mehr geht egal wo angewendet.
Eigentlich müsste doch jedes device mit jedem reading separat geprüft werden.
Also bei z.B. 2 devices und 2 readings sollten es 4 durchläufe sein.
1. dev1&read1
2. dev1&read2
3. dev2&read1
4. dev2&read2
Nein, wenn der User mehrere (oder alle!) device bzw readings angibt, dann werden in dem Lauf auch alle angegebenen items berücksichtigt.
Es werden nicht die devices bzw. readings einzeln betrachtet und schon garnicht in allen möglichen Kombinationen zueinander.
Es ist auch nirgendwo beschrieben dass es so gemacht werden würde wie du es annimmst.
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 05 August 2022, 07:57:19
Jetzt habe ich maxValue deleteOther mit der Angabe von 2 devices ('MySTP_5000','SMA_Energymeter') und 2 Readings ('total_pac','Bezug_Wirkleistung') getestet.

Es wurden wie erwartet aus dieser Selektion alle Datensätze gelöscht außer dem Max Wert, in diesem Fall 3201.4 des
SMA_Energymeter device und dem Reading Bezug_Wirkleistung:

Zitat
   READINGS:
     2022-08-05 07:44:34   2022-07-30_11-05-59__1__SMA_Energymeter__Bezug_Wirkleistung 3201.4 W
     2022-08-05 07:44:34   background_processing_time 0.4464
     2022-08-05 07:44:34   number_fetched_rows 1
     2022-08-05 07:44:34   sql_processing_time 0.4407
     2022-08-05 07:44:34   state           done

Aus deinem vorher geschriebenen weiß ich jetzt auch, dass du davon ausgehst, dass alle möglichen Kombinationen der device und reading einzeln durchgerechnet werden.
Dem ist nicht so.
In dem Beispiel wird der Max Wert aller selektierten Datensätze, die sich aus der Inklusion der Attr device MySTP_5000,SMA_Energymeter bzw. dem Attr reading total_pac,Bezug_Wirkleistung ergeben, ermittelt und dann alle anderen Datensätze gelöscht.
Deswegen gibt man in den Attributen nur die Items an die man berücksichtigen will bzw. nicht will (siehe EXCLUDE=).
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: kask am 05 August 2022, 18:53:14
Na gut, dann funktioniert ja alles wie es soll.
Leider so für mich nicht wirklich brauchbar. Schade!
Ich bräuchte eher was wie reducelog mit maxvalue anstatt dem avarage.
Werde es dann über ein bash script lösen. Perl is nicht so meins.
Danke für deine Mühe und Sondierung.
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 05 August 2022, 19:59:16
Gerne, reducelog arbeitet aber auch so dass alle Datensätze der ausgewählten devices / readings selektiert werden.
Nur die zusammengehörigen Device / Reading Kombinationen werden dann entsprechend behandelt und nicht "jeder" mit "jedem".

Im Prinzip brauchst du nur hinreichend viele DbReps anzulegen/kopieren, in jedem eine zutreffende device/reading Kombination einstellen die du behandeln möchtest und das DbRep regelmäßig laufen lassen.
Das ist alles.

Aber vllt. übersehe ich deine komplexe Anforderung nicht, kann natürlich sein.
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: kask am 05 August 2022, 22:28:37
Ja das wäre möglich.
Aber ich finde es besser das einmal zu machen und nicht für jedes reading und jedes device ein dbrep anzufertigen in dem ich dann kopierfehler reinmache.
Ich habe mal ein bashscript so erst einmal gebastelt.
Ich benötige ja nur den letzten Wert des Tages und nicht den maximalen (ist ja logischerweise der letzte des tages bei dem tagesverbrauch z.b.)


#!/bin/bash

####################################
### Databasename                 
####################################
db="fhem2"
 
####################################
### mariaDB call in bash with params
####################################
dbcall="mysql -N -e"

####################################
#Database Field "TYPE"
####################################
devtype="MQTT2_DEVICE"

####################################
#Database Field "DEVICE" with wildcards
####################################
devlike="MQTT2_DVES_%"
 
####################################
#Database Field READING as Array
####################################
readings=("ENERGY_Today" "ENERGY_Total")

### Parameter 1 is date
#2022-12-31
vd=$1
d=${vd:8:2}
m=${vd:5:2}
Y=${vd:0:4};
day="$Y-$m-$d"
 
if date -d $day &> /dev/null; then
     echo "year=$Y, month=$m, day=$d"
echo $day
else
     echo "parameter 1 is an invalid date: "$day
exit 1
fi

### Parameter 2 is daysamount 0=only date of param1, -9= nine days before to param1 date included, 11= eleven days from param1 date included to 11 days later
if [[ "$2" =~ ^[0-9]+$ ]]; then
    dayamount=$2
echo "dayamount:"$dayamount
else
    echo "parameter 2 is not a valid number"
exit 1
fi

if [ $dayamount -ge 0 ]; then
   startd=0
   stopd=$dayamount
else
   startd=$dayamount
   stopd=0
fi

KeepDailyLast()
{
   sqlstr="Select TIMESTAMP from history where DEVICE = '$1' and reading = '$2' and Date(TIMESTAMP) = DATE_ADD('$3', INTERVAL $4 DAY) order by timestamp desc limit 1;"
   valdate=$($dbcall "USE $db; $sqlstr")
   
   if [ ${#valdate} -gt 1 ] ; then
   
     sqlstr="select count(timestamp) from history where DEVICE = '$1' and reading = '$2' and Date(TIMESTAMP) = DATE_ADD('$3', INTERVAL $4 DAY);"
     valvount=$($dbcall "USE $db; $sqlstr")

     if [ ${valvount} -gt 1 ] ; then

       echo "$devx#$valdate"
   sqlstr="delete from history where DEVICE = '$1' and reading = '$2' and Date(TIMESTAMP) = DATE_ADD('$3', INTERVAL $4 DAY) and timestamp <> '$valdate';"
       valvount=$($dbcall "USE $db; $sqlstr")
   
else

   echo "$devx#$valdate#$valvount"
   
fi
   fi
}

devlist=$($dbcall "USE $db; SELECT DISTINCT(device) from current where TYPE = '$devtype' and device like '$devlike';")

for ((dayx=$startd;dayx<=$stopd;dayx++)); do
for devx in $devlist; do
for readx in ${readings[@]}; do
echo $devx.$readx: $dayx;
KeepDailyLast $devx $readx $day $dayx
done
done
done

exit 0


ausgabe sieht dann so aus:
Zitat
pi@RPiHome /opt/fhem/scripte $ ./test.sh 2022-07-01 3
year=2022, month=07, day=01
2022-07-01
dayamount:3
MQTT2_DVES_17C21C.ENERGY_Today: 0
MQTT2_DVES_17C21C#2022-07-01 23:59:50#1
MQTT2_DVES_17C21C.ENERGY_Total: 0
MQTT2_DVES_17C21C#2022-07-01 23:59:50#1
MQTT2_DVES_17C0D3.ENERGY_Today: 0
MQTT2_DVES_17C0D3#2022-07-01 23:59:40#1
MQTT2_DVES_17C0D3.ENERGY_Total: 0
MQTT2_DVES_17C0D3#2022-07-01 23:59:40
MQTT2_DVES_17400B.ENERGY_Today: 0
MQTT2_DVES_17400B#2022-07-01 23:59:28#1
MQTT2_DVES_17400B.ENERGY_Total: 0
MQTT2_DVES_17400B#2022-07-01 23:59:28
MQTT2_DVES_16DB81.ENERGY_Today: 0
MQTT2_DVES_16DB81#2022-07-01 23:59:11#1
MQTT2_DVES_16DB81.ENERGY_Total: 0
MQTT2_DVES_16DB81#2022-07-01 23:59:11
MQTT2_DVES_173E0E.ENERGY_Today: 0
MQTT2_DVES_173E0E#2022-07-01 23:59:42#1
MQTT2_DVES_173E0E.ENERGY_Total: 0
MQTT2_DVES_173E0E#2022-07-01 23:59:42
MQTT2_DVES_170ABE.ENERGY_Today: 0
MQTT2_DVES_170ABE#2022-07-01 23:59:51#1
MQTT2_DVES_170ABE.ENERGY_Total: 0
MQTT2_DVES_170ABE#2022-07-01 23:59:51
MQTT2_DVES_174BFD.ENERGY_Today: 0
MQTT2_DVES_174BFD#2022-07-01 23:59:49#1
MQTT2_DVES_174BFD.ENERGY_Total: 0
MQTT2_DVES_174BFD#2022-07-01 23:59:49
MQTT2_DVES_16A37B.ENERGY_Today: 0
MQTT2_DVES_16A37B#2022-07-01 23:59:14#1
MQTT2_DVES_16A37B.ENERGY_Total: 0
MQTT2_DVES_16A37B#2022-07-01 23:59:14
MQTT2_DVES_361086.ENERGY_Today: 0
MQTT2_DVES_361086.ENERGY_Total: 0
MQTT2_DVES_616CC7.ENERGY_Today: 0
MQTT2_DVES_616CC7.ENERGY_Total: 0
MQTT2_DVES_C46C2C.ENERGY_Today: 0
MQTT2_DVES_C46C2C.ENERGY_Total: 0
MQTT2_DVES_08FE8A.ENERGY_Today: 0
MQTT2_DVES_08FE8A.ENERGY_Total: 0
MQTT2_DVES_B50038.ENERGY_Today: 0
MQTT2_DVES_B50038#2022-07-01 23:59:03#1
MQTT2_DVES_B50038.ENERGY_Total: 0
MQTT2_DVES_B50038#2022-07-01 23:59:03
MQTT2_DVES_2F4731.ENERGY_Today: 0
MQTT2_DVES_2F4731.ENERGY_Total: 0
MQTT2_DVES_C46C22.ENERGY_Today: 0
MQTT2_DVES_C46C22#2022-07-01 23:59:33#1
MQTT2_DVES_C46C22.ENERGY_Total: 0
MQTT2_DVES_C46C22#2022-07-01 23:59:33
MQTT2_DVES_17C21C.ENERGY_Today: 1
MQTT2_DVES_17C21C#2022-07-02 23:59:50#1
MQTT2_DVES_17C21C.ENERGY_Total: 1
MQTT2_DVES_17C21C#2022-07-02 23:59:50#1
MQTT2_DVES_17C0D3.ENERGY_Today: 1
MQTT2_DVES_17C0D3#2022-07-02 23:59:40#1
MQTT2_DVES_17C0D3.ENERGY_Total: 1
MQTT2_DVES_17C0D3#2022-07-02 23:59:40
MQTT2_DVES_17400B.ENERGY_Today: 1
MQTT2_DVES_17400B#2022-07-02 23:59:28#1
MQTT2_DVES_17400B.ENERGY_Total: 1
MQTT2_DVES_17400B#2022-07-02 23:59:28
MQTT2_DVES_16DB81.ENERGY_Today: 1
MQTT2_DVES_16DB81#2022-07-02 23:59:11#1
MQTT2_DVES_16DB81.ENERGY_Total: 1
MQTT2_DVES_16DB81#2022-07-02 23:59:11
MQTT2_DVES_173E0E.ENERGY_Today: 1
MQTT2_DVES_173E0E#2022-07-02 23:59:42#1
MQTT2_DVES_173E0E.ENERGY_Total: 1
MQTT2_DVES_173E0E#2022-07-02 23:59:42
MQTT2_DVES_170ABE.ENERGY_Today: 1
MQTT2_DVES_170ABE#2022-07-02 23:59:51#1
MQTT2_DVES_170ABE.ENERGY_Total: 1
MQTT2_DVES_170ABE#2022-07-02 23:59:51
MQTT2_DVES_174BFD.ENERGY_Today: 1
MQTT2_DVES_174BFD#2022-07-02 23:59:49#1
MQTT2_DVES_174BFD.ENERGY_Total: 1
MQTT2_DVES_174BFD#2022-07-02 23:59:49
MQTT2_DVES_16A37B.ENERGY_Today: 1
MQTT2_DVES_16A37B#2022-07-02 23:59:16#1
MQTT2_DVES_16A37B.ENERGY_Total: 1
MQTT2_DVES_16A37B#2022-07-02 23:59:16
MQTT2_DVES_361086.ENERGY_Today: 1
MQTT2_DVES_361086.ENERGY_Total: 1
MQTT2_DVES_616CC7.ENERGY_Today: 1
MQTT2_DVES_616CC7.ENERGY_Total: 1
MQTT2_DVES_C46C2C.ENERGY_Today: 1
MQTT2_DVES_C46C2C.ENERGY_Total: 1
MQTT2_DVES_08FE8A.ENERGY_Today: 1
MQTT2_DVES_08FE8A.ENERGY_Total: 1
MQTT2_DVES_B50038.ENERGY_Today: 1
MQTT2_DVES_B50038#2022-07-02 23:59:06#1
MQTT2_DVES_B50038.ENERGY_Total: 1
MQTT2_DVES_B50038#2022-07-02 23:59:06
MQTT2_DVES_2F4731.ENERGY_Today: 1
MQTT2_DVES_2F4731.ENERGY_Total: 1
MQTT2_DVES_C46C22.ENERGY_Today: 1
MQTT2_DVES_C46C22#2022-07-02 23:59:36#1
MQTT2_DVES_C46C22.ENERGY_Total: 1
MQTT2_DVES_C46C22#2022-07-02 23:59:36
MQTT2_DVES_17C21C.ENERGY_Today: 2
MQTT2_DVES_17C21C#2022-07-03 23:59:50#1
MQTT2_DVES_17C21C.ENERGY_Total: 2
MQTT2_DVES_17C21C#2022-07-03 23:59:50
MQTT2_DVES_17C0D3.ENERGY_Today: 2
MQTT2_DVES_17C0D3#2022-07-03 23:59:40
MQTT2_DVES_17C0D3.ENERGY_Total: 2
MQTT2_DVES_17C0D3#2022-07-03 23:59:40
MQTT2_DVES_17400B.ENERGY_Today: 2
MQTT2_DVES_17400B#2022-07-03 23:59:28
MQTT2_DVES_17400B.ENERGY_Total: 2
MQTT2_DVES_17400B#2022-07-03 23:59:28
MQTT2_DVES_16DB81.ENERGY_Today: 2
MQTT2_DVES_16DB81#2022-07-03 23:59:12
MQTT2_DVES_16DB81.ENERGY_Total: 2
MQTT2_DVES_16DB81#2022-07-03 23:59:12
MQTT2_DVES_173E0E.ENERGY_Today: 2
MQTT2_DVES_173E0E#2022-07-03 23:59:42
MQTT2_DVES_173E0E.ENERGY_Total: 2
MQTT2_DVES_173E0E#2022-07-03 23:59:42
MQTT2_DVES_170ABE.ENERGY_Today: 2
MQTT2_DVES_170ABE#2022-07-03 23:59:52
MQTT2_DVES_170ABE.ENERGY_Total: 2
MQTT2_DVES_170ABE#2022-07-03 23:59:52
MQTT2_DVES_174BFD.ENERGY_Today: 2
MQTT2_DVES_174BFD#2022-07-03 23:59:48
MQTT2_DVES_174BFD.ENERGY_Total: 2
MQTT2_DVES_174BFD#2022-07-03 23:59:48
MQTT2_DVES_16A37B.ENERGY_Today: 2
MQTT2_DVES_16A37B#2022-07-03 23:59:15
MQTT2_DVES_16A37B.ENERGY_Total: 2
MQTT2_DVES_16A37B#2022-07-03 23:59:15
MQTT2_DVES_361086.ENERGY_Today: 2
MQTT2_DVES_361086.ENERGY_Total: 2
MQTT2_DVES_616CC7.ENERGY_Today: 2
MQTT2_DVES_616CC7.ENERGY_Total: 2
MQTT2_DVES_C46C2C.ENERGY_Today: 2
MQTT2_DVES_C46C2C.ENERGY_Total: 2
MQTT2_DVES_08FE8A.ENERGY_Today: 2
MQTT2_DVES_08FE8A.ENERGY_Total: 2
MQTT2_DVES_B50038.ENERGY_Today: 2
MQTT2_DVES_B50038#2022-07-03 23:59:10
MQTT2_DVES_B50038.ENERGY_Total: 2
MQTT2_DVES_B50038#2022-07-03 23:59:10
MQTT2_DVES_2F4731.ENERGY_Today: 2
MQTT2_DVES_2F4731.ENERGY_Total: 2
MQTT2_DVES_C46C22.ENERGY_Today: 2
MQTT2_DVES_C46C22#2022-07-03 23:59:40
MQTT2_DVES_C46C22.ENERGY_Total: 2
MQTT2_DVES_C46C22#2022-07-03 23:59:40
MQTT2_DVES_17C21C.ENERGY_Today: 3
MQTT2_DVES_17C21C#2022-07-04 23:59:50#1
MQTT2_DVES_17C21C.ENERGY_Total: 3
MQTT2_DVES_17C21C#2022-07-04 23:59:50
MQTT2_DVES_17C0D3.ENERGY_Today: 3
MQTT2_DVES_17C0D3#2022-07-04 23:59:39
MQTT2_DVES_17C0D3.ENERGY_Total: 3
MQTT2_DVES_17C0D3#2022-07-04 23:59:39
MQTT2_DVES_17400B.ENERGY_Today: 3
MQTT2_DVES_17400B#2022-07-04 23:59:27
MQTT2_DVES_17400B.ENERGY_Total: 3
MQTT2_DVES_17400B#2022-07-04 23:59:27
MQTT2_DVES_16DB81.ENERGY_Today: 3
MQTT2_DVES_16DB81#2022-07-04 23:59:12
MQTT2_DVES_16DB81.ENERGY_Total: 3
MQTT2_DVES_16DB81#2022-07-04 23:59:12
MQTT2_DVES_173E0E.ENERGY_Today: 3
MQTT2_DVES_173E0E#2022-07-04 23:59:42
MQTT2_DVES_173E0E.ENERGY_Total: 3
MQTT2_DVES_173E0E#2022-07-04 23:59:42
MQTT2_DVES_170ABE.ENERGY_Today: 3
MQTT2_DVES_170ABE#2022-07-04 23:59:52
MQTT2_DVES_170ABE.ENERGY_Total: 3
MQTT2_DVES_170ABE#2022-07-04 23:59:52
MQTT2_DVES_174BFD.ENERGY_Today: 3
MQTT2_DVES_174BFD#2022-07-04 23:59:48
MQTT2_DVES_174BFD.ENERGY_Total: 3
MQTT2_DVES_174BFD#2022-07-04 23:59:48
MQTT2_DVES_16A37B.ENERGY_Today: 3
MQTT2_DVES_16A37B#2022-07-04 23:59:14
MQTT2_DVES_16A37B.ENERGY_Total: 3
MQTT2_DVES_16A37B#2022-07-04 23:59:14
MQTT2_DVES_361086.ENERGY_Today: 3
MQTT2_DVES_361086.ENERGY_Total: 3
MQTT2_DVES_616CC7.ENERGY_Today: 3
MQTT2_DVES_616CC7.ENERGY_Total: 3
MQTT2_DVES_C46C2C.ENERGY_Today: 3
MQTT2_DVES_C46C2C.ENERGY_Total: 3
MQTT2_DVES_08FE8A.ENERGY_Today: 3
MQTT2_DVES_08FE8A.ENERGY_Total: 3
MQTT2_DVES_B50038.ENERGY_Today: 3
MQTT2_DVES_B50038#2022-07-04 23:59:14
MQTT2_DVES_B50038.ENERGY_Total: 3
MQTT2_DVES_B50038#2022-07-04 23:59:14
MQTT2_DVES_2F4731.ENERGY_Today: 3
MQTT2_DVES_2F4731.ENERGY_Total: 3
MQTT2_DVES_C46C22.ENERGY_Today: 3
MQTT2_DVES_C46C22#2022-07-04 23:59:43
MQTT2_DVES_C46C22.ENERGY_Total: 3
MQTT2_DVES_C46C22#2022-07-04 23:59:43
pi@RPiHome /opt/fhem/scripte $

Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 05 August 2022, 22:41:21
Zitat
....  in dem ich dann kopierfehler reinmache.
Oh je ....  :o

Aber wenn du mit deinem Skript so klarkommst ist es ja gut.  ;)

Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: dirk.k am 06 August 2022, 21:16:45
hallo,
ich hänge mich hier mal mit rein.
Ich habe das Problem, dass mir reduceLogNbl 7 seltene Spitzen eines Tages löscht bzw. reduceLogNbl 7 average diese wegkürzt. Ich benötige aber den MAX Wert der Stunde / eines Tages.
Wäre es nicht möglich entsprechend dem Zusatzparameter "average" einen entsprechenden parameter "max" bzw. "max=day" einzubauen ...

   
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 06 August 2022, 21:38:59
Mit maxValue kannst du doch das schon erreichen.
Wenn du z.B. die aggregation=hour einstellst und ein "maxValue writeToDB" ausführst, wird für jede Stunde der Maxwert (innerhalb der Zeitgrenzen bestimmt durch die time* -Attribute) mit einem neuen Readingnamen in die DB geschrieben.
Die "alten" Readings kannst du dann ausdünnen oder vllt. ganz löschen, je nach Bedarf.
Alternativ kannst du auch nur mit "maxValue deleteOther" alles außer den MaxWert jeder Stunde löschen.

Gleiches gilt dann mit aggregation=day für tägliche Werte, aggregation=week für wöchentliche, aggregation=month für monatliche, aggregation=minute für minütliche und aggregation=year für jährliche Werte.
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: kask am 07 August 2022, 09:18:19
Zitat von: DS_Starter am 05 August 2022, 22:41:21
Oh je ....  :o

Aber wenn du mit deinem Skript so klarkommst ist es ja gut.  ;)

Oh je?
"Soviel wie nötig, so wenig wie möglich" ist da eher meine Devise.
Das DBRep Modul ist schon Klasse, hast du gut gemacht. Aber es deckt halt leider nicht meinen Bedarf ab. Du kannst es auch meine Faulheit nennen. Wie du magst ;)
Ich decke mit dem Script (im Post oben) 16 devices mit 2 (bei mir jetzt 4) readings ab. Würde 64 DBREp Instanzen bedeuten.
Zudem habe ich auch noch andere Devices mit readings. 34*3=102, 6*2=12, 1*9=9 (In 3 weiteren Scripten jetzt). Das wären in Summe 187 DBRep Instanzen.
Diese müssen jetzt erst einmal Fehlerfrei angelegt werden, da ja "leider" in der DBRep das ganze nur mit einem Device und einem Reading funktioniert.
Zudem bringt es den Vorteil das wenn Devices nachträglich eingefügt werden diese automatisch mit abgearbeitet werden.
Zumindest bei gleicher Namensgebungsphilosophie.

Wenn ich Perl beherschen würde, wie ich andere Sprachenbehersche, dann hätte ich das sicher in Perl programmiert.
Vieleicht mache ich das ja noch. Ist ja eigentlich ein schönes Projekt um eine Sprache bzw. Syntax zu lernen.
Nur mit meinem jetzigen Wissenstand ging es mit einem bash script eindeutig schneller.

Ich habe FHEM erst anfang des Jahres aufgebaut. Und damit das erste mal richtig Kontakt mit Perl bekommen. (Was man auch mindestens rudimentär benötigt für FHEM durch die massiven Möglichkeiten)
Meine Datenbank war aber durch mein nicht Wissen schon auf 16GB angewachsen.
Mit DBrep bzw. reducelog und die Scripte sind es "nur noch" 6Gb.
Und in Zukunft durch die Event anpassungen wird diese weniger schnell wachsen.
Es sind bei mir mittlerweile auch 90 devices die sich mitteilen wollen bzw. auch sollen. Manche sind geschwätziger (Shelly3em) andere weniger (Sonoff SNZB-04)
Durch diesen Thread habe ich wieder was gelernt und meine Events weiter optimiert um weniger bzw. ausreichender zu loggen. Danke auch dafür.

Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 07 August 2022, 09:41:51
Eins verstehe ich nicht. Wenn du von so vielen Devices und Readings jeweils nur den letzten Eintrag des Tages benötigst (den Max-Wert suchst du ja in deinem Script überhaupt nicht) , wieso loggst du nicht einfach von jedem interessierenden Item z.B. um 23:59:45 jeden Tages diese Werte und sparst dir diesen ganzen Aufwand und Overhead ?

Das ginge ganz einfach im DbLog mit dem addLog-Kommando in einem at-Device.
Und darüber hinaus brauchst du keine Events von diesen Devs/Readings

Nur mal so als Anregung.

Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: kask am 07 August 2022, 09:51:41
Wie bekomme ich den um 23:59:59 den letzten Wert des Readings ohne dessen event?
Helf mir da doch bitte. Ich habe keine lösung gefunden. Deshalb logge ich minimal jede stunde und behalte den letzten wert des Tages.

Edit: STOP. "Bäume und Wald". Könnte ich umsetzen. Sehr guter Ansatz. Ich suche nicht expliziet den höchsten Wert sondern den letzten, da dieser ja den höchsten entspricht bei einem saldierenden Wert.
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 07 August 2022, 10:05:24
Im DbLog gibt es doch den Befehl:


set ... addLog <devspec>:<Reading> [Value] [CN=<caller name>] [!useExcludes]


<devspec>:<Reading> - Das Device kann als Geräte-Spezifikation (http://fhem.de/commandref_DE.html#devspec) angegeben werden.
Die Angabe von "Reading" wird als regulärer Ausdruck ausgewertet.
Wenn du dir jetzt ein at-Device anlegst, z.B.:

define logitems at *23:59:59 set <dblog> addLog <devspec>:<Reading>

Ggf. noch die optionalen Angaben zu addLog beachten.Damit würden die angegebenen Items um die angegebene Zeit jeden Tag abgefragt und in die DB geschrieben.Betonung liegt hier auf abgefragt, weil kein Event nötig ist und die Items aktiv ausgelesen werden. Wenn diese Events nicht für andere Zwecke benötigt werden, brauchst du auch keine erezugen lassen für das Logging.Auch eine Spezifizierung in dem DEF von DbLog wäre nicht nötig.
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: kask am 07 August 2022, 10:10:40
Und da spiegelten sich auch wieder meine Problematiken  ;)
Zitat..massiven Möglichkeiten)..
gepaart mit
Zitat..mein nicht Wissen..

Danke für dein mitdenken.
Man fragt ja leider nur soviel wie man das ganze aufzäumen/aufbauen will bzw. wie man sich denkt das man es in den Griff bekommt.
Zu dem Thema "addlog" finde ich eine Menge über Plotabrisse aber nichts zum letzten/max Tageswert auf die schnelle.
Aber das ist glaub ich mein Freund bei dem Vorhaben.
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 07 August 2022, 10:12:12
Zitat
Danke für dein mitdenken.
Gerne  :)
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 07 August 2022, 10:26:17
@dirk.k

Zitat
Wäre es nicht möglich entsprechend dem Zusatzparameter "average" einen entsprechenden parameter "max" bzw. "max=day" einzubauen
Ich denke doch mal darüber nach, kann in dem hier diskutierten Kontext sinnvoll sein.
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: kask am 07 August 2022, 10:52:35
Zitat von: kask am 05 August 2022, 18:53:14
Na gut, dann funktioniert ja alles wie es soll.
Leider so für mich nicht wirklich brauchbar. Schade!
Ich bräuchte eher was wie reducelog mit maxvalue anstatt dem avarage.
Werde es dann über ein bash script lösen. Perl is nicht so meins.
Danke für deine Mühe und Sondierung.

Wären da ja schon 2 gewesen die das wollen ;)
Das ist mit sicherheit nützlich.
Und irgendwo in der PM ist es sicher nur ein wechsel zwischen AVG() und MAX()..dann kann man sicher noch ein MIN() und SUM() einpflegen ;)
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 07 August 2022, 11:50:26
So einfach ist das leider nicht. Kannst ja mal einen Blick in die .pm werfen  ;)
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 11 August 2022, 10:11:02
Ich habe reduceLog für die Erweiterung vorbereitet und komplett überarbeitet.
Wer die neue V testen möchte schaut bitte hier: https://forum.fhem.de/index.php/topic,53584.msg1231080.html#msg1231080
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 11 August 2022, 17:38:28
Ich habe die Möglichkeit für reduceLog max bzw. reduceLog max=day eingebaut -> https://forum.fhem.de/index.php/topic,53584.msg1231131.html#msg1231131
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: dirk.k am 14 August 2022, 18:15:23
Danke für den Aufwand.
Ich habe es mehrfach probiert ... erhalte aber nach 7-8 Minuten einen Fehler:
DBD::SQLite::st execute failed: database is locked at ./FHEM/93_DbRep.pm line 9286.

Mein Befehl:
set DbRep.logdb reduceLog 1 max include=%:Relay,MAX_SC_02543a:onoff,MAX_SC_02543a:on_off_ticker

Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 14 August 2022, 19:47:04
Je nach Performance kann es notwendig sein die SQLite vor parallelen Schreibprozessen (DbLog) zu
schützen.
Man kann mit den Attributen im DbRep die DbLog temporär während der Laufzeit von reduceLog sperren.
DbLog sollte asynchron eingestellt sein.


executeBeforeProc  set <DbLog Device> reopen 3600
executeAfterProc  set <DbLog Device> reopen
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: Motivierte linke Hände am 15 August 2022, 17:00:48
Nur zum Verständnis nochmal: Verstehe ich diesen Faden dahingehend richtig, dass DbRep aktuell, wenn ich für diffValue, averageValue etc. das Attribut "devices" auf mehrere Devices setze, die Aktion nicht für jedes Device einzeln, sondern einmal aggregiert über alle Devices ausführt?

D.h. ich muss mir, wenn ich 20 Geräte habe, für die ich Differenzwerte in die DB schreiben möchte, mir 20 DbReps anlegen - oder für ein DbRep vor jedem Aufruf die Attribute ändern?

Und wenn ich das richtig verstanden habe: Geht was kaputt (weil DbRep Datenbankanfragen NBL ausführt, ich aber rapide Attribute ändere und DbRep-Anfragen auslöse), wenn ich mir eine Perl-Schleife wie die folgende baue:


[...]
foreach my $dev (sort keys %defs) {
    if($defs{$dev}{TYPE} eq 'MQTT2_DEVICE') {
      if (AttrVal($defs{$dev}{NAME},'model','err') eq 'shellyPlus_1pm') {
        fhem("attr myDbRep device $defs{$dev}{NAME}";
        fhem("attr myDbRep device energy_total");
        fhem('set myDBRep diffValue writeToDB");
      } elsif (AttrVal($defs{$dev}{NAME},'model','err') eq 'shelly3em') {
        fhem("attr myDbRep device $defs{$dev}{NAME}";
        fhem("attr myDbRep device emeter_sum_total");
        fhem('set myDBRep diffValue writeToDB");
      }
    }
  }
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 15 August 2022, 17:38:51
Zitat
Verstehe ich diesen Faden dahingehend richtig, dass DbRep aktuell, wenn ich für diffValue, averageValue etc. das Attribut "devices" auf mehrere Devices setze, die Aktion nicht für jedes Device einzeln, sondern einmal aggregiert über alle Devices ausführt?
Ja das ist richtig. Die gesetzten devices und/ oder readings werden wie angegeben in der DB Abfrage includiert (bzw. excludiert) und aus dem Selektionsergebnis der Wert average, min, max ... ermittelt.

Zitat
D.h. ich muss mir, wenn ich 20 Geräte habe, für die ich Differenzwerte in die DB schreiben möchte, mir 20 DbReps anlegen - oder für ein DbRep vor jedem Aufruf die Attribute ändern?
Ja, normalerweise kopiert man sich einfach ein angelegtes Rep und ändert die Attribute wie gewünscht bzw. benötigt.
Das lässt man dann regelmäßig über die DB arbeiten.
Ein DbRep anzulegen und dann immer die Attr zu ändern würde zwar gehen, war aber von mir nie so gedacht für den produktiven Einsatz.

Zitat
Geht was kaputt (weil DbRep Datenbankanfragen NBL ausführt, ich aber rapide Attribute ändere und DbRep-Anfragen auslöse), wenn ich mir eine Perl-Schleife wie die folgende baue:
Es geht zwar technisch nichts kaputt, aber das verwendete Device bringt in seinen Readings nicht nachvollziehbare Ergebnisse.
Also besser so nicht machen.
Außerdem würdest du massiv parallele Prozesse starten, die je nach verfügbarer Hardware zu Engpässen führen könnte.
Stimmt nicht, genau das habe ich per Design verboten, d.h. das Device würde erst einen neuen Prozess starten wenn der laufende beendet ist.
Besser mehrere DbRep anlegen und zeitlich "entzerrt" ausführen.
Es gibt noch die Möglichkeit eine Chain aufzubauen, die sebständig nacheinander die Aufgaben ausführt: https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten#Abarbeitung_einer_sequentiellen_Befehlskette_mittels_non-blocking_sqlCmd-Kommandos
Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: dirk.k am 17 August 2022, 19:09:45
Hallo,
als Erstes ... es sieht so aus, als bekäme ich die gewünschten Maximalwerte.
Aber ich scheine noch Probleme bei der Geräteauswahl zu haben ...
mein Befehl:
set DbRep.logdb reduceLog 1 max include=%:Relay,MAX_SC_02543a:onoff,MAX_SC_02543a:on_off_ticker

Dieser scheint sich aber auch auf Devices bzw Werte auszuwirken, welche ich gar nicht abgegeben habe.
Die folgende Kurve ist weder relay noch von einem MAX-device

Vermutungen... muss INCLUDE großgeschrieben werden? Und kann ich überhaupt mehrere readings auf einmal wählen?
 


Titel: Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 17 August 2022, 20:04:06
Zitat
Vermutungen... muss INCLUDE großgeschrieben werden?
Das ist korrekt -> siehe Commandref

Zitat
Und kann ich überhaupt mehrere readings auf einmal wählen?
Hier ist zu unterscheiden, ob Operatoren in der Befehlszeile angegeben werden oder nicht.
In der Commandref gibt es die Beschreibung der Arbeitsweise mit Angabe von Operatoren in der Befehlszeile oder nicht was dann zur Verwendung der Einträge in den Attributen device und reading führt. Die Beschreibung der Befehlszeilenoperatoren sind exakt zu befolgen und nicht "frei" zu interpretieren, d.h. in dem Fall sind nicht mehrere Readings angebbar.
Die Verwendung der Attr device und reading statt dessen ist sehr viel flexibler als die Befehlszeilenoperatoren, mehrere Readings sind angebbar.
Titel: Aw: DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: cbl am 26 Juni 2023, 10:16:12
Ich hänge mich an dieses alte Thema, da ich exakt das gleiche Problem habe. Ich bin dem Beispiel von DS_Starter gefolgt (DANKE!) und bei mir werden alle Einträge gelöscht.

Zitat von: DS_Starter am 03 August 2022, 21:39:18Hier nochmal ein schrittweises Beispiel.
Dieses DbRep wird für die nachfolgenden Aktionen verwendet:

defmod Rep.fhemtest1 DbRep LogDB1
attr Rep.fhemtest1 aggregation no
attr Rep.fhemtest1 allowDeletion 1
attr Rep.fhemtest1 device MySTP_5000
attr Rep.fhemtest1 event-on-update-reading state
attr Rep.fhemtest1 reading total_pac
attr Rep.fhemtest1 room DbLog
attr Rep.fhemtest1 showproctime 1
attr Rep.fhemtest1 timestamp_begin 2022-07-30 00:00:00
attr Rep.fhemtest1 timestamp_end 2022-07-30 23:59:59
attr Rep.fhemtest1 verbose 4

Es wird Device / Reading  MySTP_5000 / total_pac verwendet, das ist die gemessene Leistung des Wechselrichters.

Zunächst ein countEntries um die aktuell vorhandenen Datensätze zu zählen:

2022.08.03 21:02:58.866 4: DbRep Rep.fhemtest1 - -------- New selection ---------
2022.08.03 21:02:58.867 4: DbRep Rep.fhemtest1 - Command: countEntries history
2022.08.03 21:02:58.867 4: DbRep Rep.fhemtest1 - FullDay option: 0
2022.08.03 21:02:58.868 4: DbRep Rep.fhemtest1 - Timestamp begin human readable: 2022-07-30 00:00:00
2022.08.03 21:02:58.868 4: DbRep Rep.fhemtest1 - Timestamp end human readable: 2022-07-30 23:59:59
2022.08.03 21:02:58.869 4: DbRep Rep.fhemtest1 - Aggregation: no
2022.08.03 21:02:58.890 4: DbRep Rep.fhemtest1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2022.08.03 21:02:58.895 4: DbRep Rep.fhemtest1 - SQL execute: SELECT COUNT(*) FROM history where ( DEVICE = 'MySTP_5000' ) AND ( READING = 'total_pac' ) AND TIMESTAMP >= '2022-07-30 00:00:00' AND TIMESTAMP <= '2022-07-30 23:59:59' ;

Ergebnis sind 763:

  READINGS:
    2022-08-03 21:02:59  2022-07-30__COUNT_history__no_aggregation 763
    2022-08-03 21:02:59  background_processing_time 0.9327
    2022-08-03 21:02:59  sql_processing_time 0.9277
    2022-08-03 21:02:59  state          done

Jetzt zeige ich den Max Wert an mit maxValue display:

2022.08.03 21:08:45.719 4: DbRep Rep.fhemtest1 - -------- New selection ---------
2022.08.03 21:08:45.720 4: DbRep Rep.fhemtest1 - Command: maxValue display
2022.08.03 21:08:45.720 4: DbRep Rep.fhemtest1 - FullDay option: 0
2022.08.03 21:08:45.721 4: DbRep Rep.fhemtest1 - Timestamp begin human readable: 2022-07-30 00:00:00
2022.08.03 21:08:45.721 4: DbRep Rep.fhemtest1 - Timestamp end human readable: 2022-07-30 23:59:59
2022.08.03 21:08:45.722 4: DbRep Rep.fhemtest1 - Aggregation: no
2022.08.03 21:08:45.746 4: DbRep Rep.fhemtest1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2022.08.03 21:08:45.749 4: DbRep Rep.fhemtest1 - SQL execute: SELECT VALUE,TIMESTAMP FROM history where ( DEVICE = 'MySTP_5000' ) AND ( READING = 'total_pac' ) AND TIMESTAMP >= '2022-07-30 00:00:00' AND TIMESTAMP <= '2022-07-30 23:59:59' ORDER BY TIMESTAMP

Ergebnis ist 1.1790 um 2022-07-30_15-29-27:

  READINGS:
    2022-08-03 21:08:46  2022-07-30_15-29-27__MySTP_5000__total_pac__MAX__no_aggregation 1.1790
    2022-08-03 21:08:46  background_processing_time 1.1393
    2022-08-03 21:08:46  sql_processing_time 1.1318
    2022-08-03 21:08:46  state          done

Jetzt werden außer dem Maxwert alle anderen gelöscht mit maxValue deleteOther

2022.08.03 21:12:36.700 4: DbRep Rep.fhemtest1 - -------- New selection ---------
2022.08.03 21:12:36.701 4: DbRep Rep.fhemtest1 - Command: maxValue deleteOther
2022.08.03 21:12:36.701 4: DbRep Rep.fhemtest1 - FullDay option: 0
2022.08.03 21:12:36.702 4: DbRep Rep.fhemtest1 - Timestamp begin human readable: 2022-07-30 00:00:00
2022.08.03 21:12:36.702 4: DbRep Rep.fhemtest1 - Timestamp end human readable: 2022-07-30 23:59:59
2022.08.03 21:12:36.703 4: DbRep Rep.fhemtest1 - Aggregation: no
2022.08.03 21:12:36.722 4: DbRep Rep.fhemtest1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2022.08.03 21:12:36.726 4: DbRep Rep.fhemtest1 - SQL execute: SELECT VALUE,TIMESTAMP FROM history where ( DEVICE = 'MySTP_5000' ) AND ( READING = 'total_pac' ) AND TIMESTAMP >= '2022-07-30 00:00:00' AND TIMESTAMP <= '2022-07-30 23:59:59' ORDER BY TIMESTAMP;
2022.08.03 21:12:37.505 4: DbRep Rep.fhemtest1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2022.08.03 21:12:37.507 4: DbRep Rep.fhemtest1 - begin transaction
2022.08.03 21:12:37.507 4: DbRep Rep.fhemtest1 - SQL execute: delete FROM history where ( DEVICE = 'MySTP_5000' ) AND ( READING = 'total_pac' ) AND TIMESTAMP >= '2022-07-30 00:00:00' AND TIMESTAMP <= '2022-07-30 23:59:59' AND (TIMESTAMP,VALUE) != ("2022-07-30 15:29:27","1.179");
2022.08.03 21:12:37.930 4: DbRep Rep.fhemtest1 - transaction committed
2022.08.03 21:12:37.931 3: DbRep Rep.fhemtest1 - number of lines deleted in "LogDB1": 762

Es wurden also 762 gelöscht, vorganden waren (siehe oben) 763.

Zum check nochmal ein countEntries nach dem Löschen:

  READINGS:
    2022-08-03 21:33:35  2022-07-30__COUNT_history__no_aggregation 1
    2022-08-03 21:33:35  background_processing_time 1.8349
    2022-08-03 21:33:35  sql_processing_time 1.8309
    2022-08-03 21:33:35  state          done

1 Datensatz blieb übrig. Um noch zu vergleichen welcher geblieben ist mache ich ein fetchrows:

  READINGS:
    2022-08-03 21:34:56  2022-07-30_15-29-27__1__MySTP_5000__total_pac 1.179
    2022-08-03 21:34:56  background_processing_time 1.6397
    2022-08-03 21:34:56  number_fetched_rows 1
    2022-08-03 21:34:56  sql_processing_time 1.6355
    2022-08-03 21:34:56  state          done

Wie erwartet verblieb der Datensatz  2022-07-30_15-29-27 mit  1.179 in der DB.

Die Abweichung ist bei mir die Device- und Reading-Definition:

Im Device möchte ich mit einem DBRep alle gleichartigen Devices behandeln. Daher habe ich dort "strom.*" gesetzt, um alle ElectricityCalculator-Instanzen zu erwischen.
Beim Reading habe ich "%_EnergyCostDay", um bei den unterschiedlichen Devices die unterschiedlichen Readings, die alle so enden, zu erwischen.
Beim Testen gestern lief das erfolgreich und es blieb mit
set DbRepDevice maxValue deleteOthergenau der Maximum-Eintrag übrig.

Nun habe ich über Nacht genau den Befehl mit einem DOIF ausgeführt und es sind alle Werte von gestern weg.



define dbrep.energieverbrauchszaehler.energycostday DbRep dblog
attr dbrep.energieverbrauchszaehler.energycostday aggregation no
attr dbrep.energieverbrauchszaehler.energycostday allowDeletion 1
attr dbrep.energieverbrauchszaehler.energycostday device strom.*
attr dbrep.energieverbrauchszaehler.energycostday reading %_EnergyCostDay
attr dbrep.energieverbrauchszaehler.energycostday room System
attr dbrep.energieverbrauchszaehler.energycostday timestamp_begin previous_day_begin
attr dbrep.energieverbrauchszaehler.energycostday timestamp_end previous_day_end
#  DATABASE  fhem
#  DEF        dblog
#  FUUID      64982e6f-f33f-ae1f-157d-7dd49ca6a8da12d5
#  FVERSION  93_DbRep.pm:v8.52.7-s27577/2023-05-16
#  LASTCMD    maxValue deleteOther
#  MODEL      Client
#  NAME      dbrep.energieverbrauchszaehler.energycostday
#  NOTIFYDEV  global,dbrep.energieverbrauchszaehler.energycostday
#  NR        3934
#  NTFY_ORDER 50-dbrep.energieverbrauchszaehler.energycostday
#  ROLE      Client
#  STATE      done
#  TYPE      DbRep
#  UTF8      1
#  eventCount 6
#  HELPER:
#    DBLOGDEVICE dblog
#    GRANTS    USAGE,ALL PRIVILEGES
#    IDRETRIES  2
#    MINTS      2022-04-30 07:42:16
#    PACKAGE    main
#    VERSION    8.52.7
#    CV:
#      aggregation no
#      aggsec    1
#      destr      2023-06-25
#      dsstr      2023-06-25
#      epoch_seconds_end 1687730399
#      mestr      06
#      msstr      06
#      testr      23:59:59
#      tsstr      00:00:00
#      wdadd      86400
#      yestr      2023
#      ysstr      2023
#    DBREPCOL:
#      COLSET    1
#      DEVICE    64
#      EVENT      0
#      READING    64
#      TYPE      64
#      UNIT      32
#      VALUE      128
#  Helper:
#    DBLOG:
#      2023-06-25_10-37-03__strom./__/_EnergyCostDay__MAX__no_aggregation:
#        dblog:
#          TIME      1687732207.23272
#          VALUE      1982.9460
#      connectionEncoding:
#        dblog:
#          TIME      1687732202.91498
#          VALUE      utf8mb4
#      dbEncoding:
#        dblog:
#          TIME      1687732202.91498
#          VALUE      utf8mb4
#      db_lines_processed:
#        dblog:
#          TIME      1687732207.23272
#          VALUE      954
#      indexState:
#        dblog:
#          TIME      1687732202.91498
#          VALUE      Index Report_Idx exists
#      state:
#        dblog:
#          TIME      1687732207.36492
#          VALUE      done
#      timestamp_oldest_dataset:
#        dblog:
#          TIME      1687732202.91498
#          VALUE      2022-04-30 07:42:16
#      userRights:
#        dblog:
#          TIME      1687732202.91498
#          VALUE      USAGE,ALL PRIVILEGES
#  OLDREADINGS:
#  READINGS:
#    2023-06-26 00:30:07  2023-06-25_10-37-03__strom./__/_EnergyCostDay__MAX__no_aggregation 1982.9460
#    2023-06-26 00:30:07  db_lines_processed 954
#    2023-06-26 00:30:07  state          done
#  powerMap:
#  readingsDesc:
#    pM_consumption:
#      rtype      w
#    pM_energy:
#      rtype      whr
#
setstate dbrep.energieverbrauchszaehler.energycostday done
setstate dbrep.energieverbrauchszaehler.energycostday 2023-06-26 05:56:57 .associatedWith strom strom.netzbezug strom.netzbezug.ohnepv strom.netzeinspeisung strom.produktion strom.verbrauch strom.waermepumpe.bezug strom.waermepumpe.produktion
setstate dbrep.energieverbrauchszaehler.energycostday 2023-06-26 00:30:07 2023-06-25_10-37-03__strom./__/_EnergyCostDay__MAX__no_aggregation 1982.9460
setstate dbrep.energieverbrauchszaehler.energycostday 2023-06-26 00:30:07 db_lines_processed 954
setstate dbrep.energieverbrauchszaehler.energycostday 2023-06-26 00:30:07 state done


Im DOIF steht nur
set dbrep.energieverbrauchszaehler.energycostday maxValue deleteOther

Wo liegt mein Fehler?


Danke und Gruß
Christian
Titel: Aw: DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: cbl am 27 Juni 2023, 20:01:07
Zitat von: cbl am 26 Juni 2023, 10:16:12Ich hänge mich an dieses alte Thema, da ich exakt das gleiche Problem habe. Ich bin dem Beispiel von DS_Starter gefolgt (DANKE!) und bei mir werden alle Einträge gelöscht.

Zitat von: DS_Starter am 03 August 2022, 21:39:18Hier nochmal ein schrittweises Beispiel.
Dieses DbRep wird für die nachfolgenden Aktionen verwendet:

defmod Rep.fhemtest1 DbRep LogDB1
attr Rep.fhemtest1 aggregation no
attr Rep.fhemtest1 allowDeletion 1
attr Rep.fhemtest1 device MySTP_5000
attr Rep.fhemtest1 event-on-update-reading state
attr Rep.fhemtest1 reading total_pac
attr Rep.fhemtest1 room DbLog
attr Rep.fhemtest1 showproctime 1
attr Rep.fhemtest1 timestamp_begin 2022-07-30 00:00:00
attr Rep.fhemtest1 timestamp_end 2022-07-30 23:59:59
attr Rep.fhemtest1 verbose 4

Es wird Device / Reading  MySTP_5000 / total_pac verwendet, das ist die gemessene Leistung des Wechselrichters.

Zunächst ein countEntries um die aktuell vorhandenen Datensätze zu zählen:

2022.08.03 21:02:58.866 4: DbRep Rep.fhemtest1 - -------- New selection ---------
2022.08.03 21:02:58.867 4: DbRep Rep.fhemtest1 - Command: countEntries history
2022.08.03 21:02:58.867 4: DbRep Rep.fhemtest1 - FullDay option: 0
2022.08.03 21:02:58.868 4: DbRep Rep.fhemtest1 - Timestamp begin human readable: 2022-07-30 00:00:00
2022.08.03 21:02:58.868 4: DbRep Rep.fhemtest1 - Timestamp end human readable: 2022-07-30 23:59:59
2022.08.03 21:02:58.869 4: DbRep Rep.fhemtest1 - Aggregation: no
2022.08.03 21:02:58.890 4: DbRep Rep.fhemtest1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2022.08.03 21:02:58.895 4: DbRep Rep.fhemtest1 - SQL execute: SELECT COUNT(*) FROM history where ( DEVICE = 'MySTP_5000' ) AND ( READING = 'total_pac' ) AND TIMESTAMP >= '2022-07-30 00:00:00' AND TIMESTAMP <= '2022-07-30 23:59:59' ;

Ergebnis sind 763:

  READINGS:
    2022-08-03 21:02:59  2022-07-30__COUNT_history__no_aggregation 763
    2022-08-03 21:02:59  background_processing_time 0.9327
    2022-08-03 21:02:59  sql_processing_time 0.9277
    2022-08-03 21:02:59  state          done

Jetzt zeige ich den Max Wert an mit maxValue display:

2022.08.03 21:08:45.719 4: DbRep Rep.fhemtest1 - -------- New selection ---------
2022.08.03 21:08:45.720 4: DbRep Rep.fhemtest1 - Command: maxValue display
2022.08.03 21:08:45.720 4: DbRep Rep.fhemtest1 - FullDay option: 0
2022.08.03 21:08:45.721 4: DbRep Rep.fhemtest1 - Timestamp begin human readable: 2022-07-30 00:00:00
2022.08.03 21:08:45.721 4: DbRep Rep.fhemtest1 - Timestamp end human readable: 2022-07-30 23:59:59
2022.08.03 21:08:45.722 4: DbRep Rep.fhemtest1 - Aggregation: no
2022.08.03 21:08:45.746 4: DbRep Rep.fhemtest1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2022.08.03 21:08:45.749 4: DbRep Rep.fhemtest1 - SQL execute: SELECT VALUE,TIMESTAMP FROM history where ( DEVICE = 'MySTP_5000' ) AND ( READING = 'total_pac' ) AND TIMESTAMP >= '2022-07-30 00:00:00' AND TIMESTAMP <= '2022-07-30 23:59:59' ORDER BY TIMESTAMP

Ergebnis ist 1.1790 um 2022-07-30_15-29-27:

  READINGS:
    2022-08-03 21:08:46  2022-07-30_15-29-27__MySTP_5000__total_pac__MAX__no_aggregation 1.1790
    2022-08-03 21:08:46  background_processing_time 1.1393
    2022-08-03 21:08:46  sql_processing_time 1.1318
    2022-08-03 21:08:46  state          done

Jetzt werden außer dem Maxwert alle anderen gelöscht mit maxValue deleteOther

2022.08.03 21:12:36.700 4: DbRep Rep.fhemtest1 - -------- New selection ---------
2022.08.03 21:12:36.701 4: DbRep Rep.fhemtest1 - Command: maxValue deleteOther
2022.08.03 21:12:36.701 4: DbRep Rep.fhemtest1 - FullDay option: 0
2022.08.03 21:12:36.702 4: DbRep Rep.fhemtest1 - Timestamp begin human readable: 2022-07-30 00:00:00
2022.08.03 21:12:36.702 4: DbRep Rep.fhemtest1 - Timestamp end human readable: 2022-07-30 23:59:59
2022.08.03 21:12:36.703 4: DbRep Rep.fhemtest1 - Aggregation: no
2022.08.03 21:12:36.722 4: DbRep Rep.fhemtest1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2022.08.03 21:12:36.726 4: DbRep Rep.fhemtest1 - SQL execute: SELECT VALUE,TIMESTAMP FROM history where ( DEVICE = 'MySTP_5000' ) AND ( READING = 'total_pac' ) AND TIMESTAMP >= '2022-07-30 00:00:00' AND TIMESTAMP <= '2022-07-30 23:59:59' ORDER BY TIMESTAMP;
2022.08.03 21:12:37.505 4: DbRep Rep.fhemtest1 - Database connect - user: fhemtest1, UTF-8 option set: yes
2022.08.03 21:12:37.507 4: DbRep Rep.fhemtest1 - begin transaction
2022.08.03 21:12:37.507 4: DbRep Rep.fhemtest1 - SQL execute: delete FROM history where ( DEVICE = 'MySTP_5000' ) AND ( READING = 'total_pac' ) AND TIMESTAMP >= '2022-07-30 00:00:00' AND TIMESTAMP <= '2022-07-30 23:59:59' AND (TIMESTAMP,VALUE) != ("2022-07-30 15:29:27","1.179");
2022.08.03 21:12:37.930 4: DbRep Rep.fhemtest1 - transaction committed
2022.08.03 21:12:37.931 3: DbRep Rep.fhemtest1 - number of lines deleted in "LogDB1": 762

Es wurden also 762 gelöscht, vorganden waren (siehe oben) 763.

Zum check nochmal ein countEntries nach dem Löschen:

  READINGS:
    2022-08-03 21:33:35  2022-07-30__COUNT_history__no_aggregation 1
    2022-08-03 21:33:35  background_processing_time 1.8349
    2022-08-03 21:33:35  sql_processing_time 1.8309
    2022-08-03 21:33:35  state          done

1 Datensatz blieb übrig. Um noch zu vergleichen welcher geblieben ist mache ich ein fetchrows:

  READINGS:
    2022-08-03 21:34:56  2022-07-30_15-29-27__1__MySTP_5000__total_pac 1.179
    2022-08-03 21:34:56  background_processing_time 1.6397
    2022-08-03 21:34:56  number_fetched_rows 1
    2022-08-03 21:34:56  sql_processing_time 1.6355
    2022-08-03 21:34:56  state          done

Wie erwartet verblieb der Datensatz  2022-07-30_15-29-27 mit  1.179 in der DB.

Die Abweichung ist bei mir die Device- und Reading-Definition:

Im Device möchte ich mit einem DBRep alle gleichartigen Devices behandeln. Daher habe ich dort "strom.*" gesetzt, um alle ElectricityCalculator-Instanzen zu erwischen.
Beim Reading habe ich "%_EnergyCostDay", um bei den unterschiedlichen Devices die unterschiedlichen Readings, die alle so enden, zu erwischen.
Beim Testen gestern lief das erfolgreich und es blieb mit
set DbRepDevice maxValue deleteOthergenau der Maximum-Eintrag übrig.

Nun habe ich über Nacht genau den Befehl mit einem DOIF ausgeführt und es sind alle Werte von gestern weg.



define dbrep.energieverbrauchszaehler.energycostday DbRep dblog
attr dbrep.energieverbrauchszaehler.energycostday aggregation no
attr dbrep.energieverbrauchszaehler.energycostday allowDeletion 1
attr dbrep.energieverbrauchszaehler.energycostday device strom.*
attr dbrep.energieverbrauchszaehler.energycostday reading %_EnergyCostDay
attr dbrep.energieverbrauchszaehler.energycostday room System
attr dbrep.energieverbrauchszaehler.energycostday timestamp_begin previous_day_begin
attr dbrep.energieverbrauchszaehler.energycostday timestamp_end previous_day_end
#  DATABASE  fhem
#  DEF        dblog
#  FUUID      64982e6f-f33f-ae1f-157d-7dd49ca6a8da12d5
#  FVERSION  93_DbRep.pm:v8.52.7-s27577/2023-05-16
#  LASTCMD    maxValue deleteOther
#  MODEL      Client
#  NAME      dbrep.energieverbrauchszaehler.energycostday
#  NOTIFYDEV  global,dbrep.energieverbrauchszaehler.energycostday
#  NR        3934
#  NTFY_ORDER 50-dbrep.energieverbrauchszaehler.energycostday
#  ROLE      Client
#  STATE      done
#  TYPE      DbRep
#  UTF8      1
#  eventCount 6
#  HELPER:
#    DBLOGDEVICE dblog
#    GRANTS    USAGE,ALL PRIVILEGES
#    IDRETRIES  2
#    MINTS      2022-04-30 07:42:16
#    PACKAGE    main
#    VERSION    8.52.7
#    CV:
#      aggregation no
#      aggsec    1
#      destr      2023-06-25
#      dsstr      2023-06-25
#      epoch_seconds_end 1687730399
#      mestr      06
#      msstr      06
#      testr      23:59:59
#      tsstr      00:00:00
#      wdadd      86400
#      yestr      2023
#      ysstr      2023
#    DBREPCOL:
#      COLSET    1
#      DEVICE    64
#      EVENT      0
#      READING    64
#      TYPE      64
#      UNIT      32
#      VALUE      128
#  Helper:
#    DBLOG:
#      2023-06-25_10-37-03__strom./__/_EnergyCostDay__MAX__no_aggregation:
#        dblog:
#          TIME      1687732207.23272
#          VALUE      1982.9460
#      connectionEncoding:
#        dblog:
#          TIME      1687732202.91498
#          VALUE      utf8mb4
#      dbEncoding:
#        dblog:
#          TIME      1687732202.91498
#          VALUE      utf8mb4
#      db_lines_processed:
#        dblog:
#          TIME      1687732207.23272
#          VALUE      954
#      indexState:
#        dblog:
#          TIME      1687732202.91498
#          VALUE      Index Report_Idx exists
#      state:
#        dblog:
#          TIME      1687732207.36492
#          VALUE      done
#      timestamp_oldest_dataset:
#        dblog:
#          TIME      1687732202.91498
#          VALUE      2022-04-30 07:42:16
#      userRights:
#        dblog:
#          TIME      1687732202.91498
#          VALUE      USAGE,ALL PRIVILEGES
#  OLDREADINGS:
#  READINGS:
#    2023-06-26 00:30:07  2023-06-25_10-37-03__strom./__/_EnergyCostDay__MAX__no_aggregation 1982.9460
#    2023-06-26 00:30:07  db_lines_processed 954
#    2023-06-26 00:30:07  state          done
#  powerMap:
#  readingsDesc:
#    pM_consumption:
#      rtype      w
#    pM_energy:
#      rtype      whr
#
setstate dbrep.energieverbrauchszaehler.energycostday done
setstate dbrep.energieverbrauchszaehler.energycostday 2023-06-26 05:56:57 .associatedWith strom strom.netzbezug strom.netzbezug.ohnepv strom.netzeinspeisung strom.produktion strom.verbrauch strom.waermepumpe.bezug strom.waermepumpe.produktion
setstate dbrep.energieverbrauchszaehler.energycostday 2023-06-26 00:30:07 2023-06-25_10-37-03__strom./__/_EnergyCostDay__MAX__no_aggregation 1982.9460
setstate dbrep.energieverbrauchszaehler.energycostday 2023-06-26 00:30:07 db_lines_processed 954
setstate dbrep.energieverbrauchszaehler.energycostday 2023-06-26 00:30:07 state done


Im DOIF steht nur
set dbrep.energieverbrauchszaehler.energycostday maxValue deleteOther

Problem selbst gelöst. Die Antwort stand irgendwo weiter oben im Thread:

Bei mehreren Devices wird der MaxValue über _alle_ Devices ermittelt und nur der bleibt übrig. Ich muss also für jedes Device ein eigenes DbRep-Device anlegen.
Titel: Aw: DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: loetmeister am 19 Juli 2023, 23:24:17
Zitat von: DS_Starter am 17 August 2022, 20:04:06
ZitatVermutungen... muss INCLUDE großgeschrieben werden?
Das ist korrekt -> siehe Commandref

Hallo,

bin auch grade darüber gestolpert.... und leider "include=" statt INCLUDE= benutzt.
Hier:
https://fhem.de/commandref.html#DbRepset
https://fhem.de/commandref_DE.html#DbRepset
ist leider kein Hinweis das es in Großbuchstaben sein muss... eventuell könnte das überarbeitet werden?  O:-)

Gruß,
Thomas
Titel: Aw: DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 20 Juli 2023, 00:08:42
Hallo Thomas,

Zitatist leider kein Hinweis das es in Großbuchstaben sein muss... eventuell könnte das überarbeitet werden?

In der Commandref ist die Syntax doch genau angegeben:

reduceLog [<no>[:<nn>]] [mode] [EXCLUDE=device1:reading1,device2:reading2,...] [INCLUDE=device:reading]

Wie man sieht, ist die Großschreibung von EXCLUDE / INCLUDE eindeutig vorgegeben.
Ich könnte höchstens noch schreiben dass man bitte die Syntax einhalten soll, jedoch sollte das eigentlich selbstverständlich sein.  ;)

Grüße,
Heiko

Titel: Aw: DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: loetmeister am 20 Juli 2023, 00:33:21
Hallo Heiko,

Danke, ja so ist es verständlich. :⁠-⁠)
Vermutlich schauen wir uns verschiedene Commandrefs an...? Auf https://fhem.de/commandref.html#DbRepset steht:

Zitatset <name> reduceLog <no>[:<nn>] [average[=day]] [exclude=device1:reading1,device2:reading2,...]

Reduces historical records older than <no> days and (optionally) newer than <nn> days to one record (the first) per hour per device & reading.
Inside device/reading SQL wildcards "%" and "_" can be used.

The optional specification of 'average' or 'average=day' not only cleans the database, but also reduces all numerical values of an hour or a day are reduced to a single average value.

Optionally, the last parameter "exclude=device1:reading1,device2:reading2,...." can be specified to exclude device/reading combinations from reduceLog.
Instead of "exclude", "include=device:reading" can be specified as the last parameter in order to limit the SELECT query executed on the database. This reduces the RAM load and increases performance. The option "include" can only be specified with a device:reading combination.

Examples:
set <name> reduceLog 270 average include=Luftdaten_remote:%
set <name> reduceLog 100:200 average exclude=SMA_Energymeter:Bezug_Wirkleistung

Gruß,
Thomas
Titel: Aw: DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: DS_Starter am 20 Juli 2023, 08:08:33
Moin Thomas,

den Link muß ich korrigieren, der funktioniert nicht.

Jedoch ist die von dir gezeigte ComRef die vom DbLog reducelog und nicht die vom DbRep.

Benutzt du reducelog von DbLog oder DbRep ?
Titel: Aw: DBLog höchster Wert des Tages behalten rest verwerfen/löschen
Beitrag von: loetmeister am 20 Juli 2023, 10:44:25
Ah, verflixt. Das ist Erklärung...
Ja, ich nutze DbRep und bin vom Wiki https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten für die "Set" Befehle zur Commandref gekommen... Da hab ich dann aber den falschen Abschnitt erwischt.  :-[
Hatte ich nicht gesehen das DbLog und DbRep den selben Befehl haben.


Gruß,
Thomas