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

Offline kask

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

Offline kask

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

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8083
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #16 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.
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: 24
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #17 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 $

« Letzte Änderung: 05 August 2022, 22:34:48 von kask »

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8083
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #18 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.  ;)

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 dirk.k

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

   

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8083
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #20 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.
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: 24
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #21 am: 07 August 2022, 09:18:19 »
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.

« Letzte Änderung: 07 August 2022, 09:49:35 von kask »

Offline DS_Starter

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

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: 24
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #23 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.
« Letzte Änderung: 07 August 2022, 09:55:15 von kask »

Offline DS_Starter

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

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8083
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #26 am: 07 August 2022, 10:12:12 »
Zitat
Danke für dein mitdenken.
Gerne  :)
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: 8083
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #27 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.
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: 24
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #28 am: 07 August 2022, 10:52:35 »
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 ;)
« Letzte Änderung: 07 August 2022, 10:55:38 von kask »

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8083
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #29 am: 07 August 2022, 11:50:26 »
So einfach ist das leider nicht. Kannst ja mal einen Blick in die .pm werfen  ;)
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: 8083
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #30 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
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: 8083
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #31 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
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 dirk.k

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


Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8083
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #33 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
« Letzte Änderung: 14 August 2022, 21:06:52 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 Motivierte linke Hände

  • Sr. Member
  • ****
  • Beiträge: 588
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #34 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");
      }
    }
  }
FHEM 6.0 in einer KVM VM mit Ubuntu
HM-CFG-USB2, 2xHM-CFG-HMLAN, HM-HMUARTLGW mit 100+ HomeMatic Devices, Geofencing, Fritzbox, Unifi, HUE, Harmony-Hub, Denon-Receiver-Modul, SSCAM, Calendar, GardenaSmartDevice, homebridge-fhem, Shelly und ein wenig 1Wire.

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8083
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #35 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
« Letzte Änderung: 15 August 2022, 20:28:03 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 dirk.k

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



Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8083
Antw:DBLog höchster Wert des Tages behalten rest verwerfen/löschen
« Antwort #37 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.
« Letzte Änderung: 17 August 2022, 20:06:52 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