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

Offline kask

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

 

decade-submarginal