Autor Thema: DBLog höchster Wert des Tages behalten rest verwerfen/löschen  (Gelesen 1963 mal)

Offline kask

  • New Member
  • *
  • Beiträge: 29
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?


Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8480
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #1 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.
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter
Zustimmung Zustimmung x 1 Liste anzeigen

Offline kask

  • New Member
  • *
  • Beiträge: 29
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #2 am: 02 August 2022, 23:06:14 »
Erst einmal danke für die Info.
Wenn ich es ausführe kommt folgendes:
Zitat
Set 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




Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8480
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #3 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
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8480
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #4 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
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline kask

  • New Member
  • *
  • Beiträge: 29
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #5 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!

Zitat
2022-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

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8480
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #6 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.
« Letzte Änderung: 03 August 2022, 20:28:48 von DS_Starter »
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline kask

  • New Member
  • *
  • Beiträge: 29
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #7 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 |     

Offline kask

  • New Member
  • *
  • Beiträge: 29
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #8 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 |      |

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8480
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #9 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.
« Letzte Änderung: 03 August 2022, 22:03:22 von DS_Starter »
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline kask

  • New Member
  • *
  • Beiträge: 29
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #10 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

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8480
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #11 am: 03 August 2022, 22:30:21 »
Das ist eine Spur. Danke, das schaue ich mir morgen mal an.
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline kask

  • New Member
  • *
  • Beiträge: 29
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #12 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.

« Letzte Änderung: 04 August 2022, 23:25:28 von kask »

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8480
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #13 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.
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8480
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #14 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=).
« Letzte Änderung: 05 August 2022, 08:01:16 von DS_Starter »
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

 

decade-submarginal