Ein bestimmtes Reading soll täglich nur 1mal geloggt werden => DbLogValueFn ?

Begonnen von ulobo60, 23 November 2021, 20:20:17

Vorheriges Thema - Nächstes Thema

DS_Starter

Ich glaub ich komme vor Lachen nicht in den Schlaf  ;D

gute Nacht !
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

ulobo60

Schade, hat leider nicht funktioniert (siehe angehängter Screenshot).
Im log ist natürlich nix zu erkennen, da aktuell Verbose=1.

Hier das aktuelle Listing der attributes von 'vitoconnect':

Attributes:
   DbLogInclude .*(Aussentemperatur|Gasverbrauch_gestern)
   DbLogValueFn {
  if ($READING eq "Gasverbrauch_gestern" {
      $TIMESTAMP = strftime "%Y-%m-%d %H:%M:%S", localtime(time-86400);
  }
}
   room       Heizung
   userReadings Gasverbrauch_gestern:Gasverbrauch_Total/Tag.* { (split /,/, ReadingsVal($name,'Gasverbrauch_Total/Tag',0))[1] if (localtime)[2] < 1 || ReadingsAge($name,'Gasverbrauch_gestern', DAYSECONDS) > DAYSECONDS - 1800 }


Es wäre schön, wenn Ihr mein Coding mal prüfen könntet.
Muss jetzt gleich leider meinen 92jährigen Schwiegervater ins Heim bringen  :'(.
Bin daher leider heute erst gegen 22:00 Uhr wieder in der Nähe meines PCs.
Vorausgesetzt im Code sind keine Fehler - soll ich kurz vor Mitternacht verbose auf 5 stellen und morgen berichten?

Euch einen schönen Tag +
lg
Ulf

3x raspi + cam-Modul mit mmal-motion - 2x raspi mit KODI - 1x raspi mit FHEM + FTUI

DS_Starter

Hallo Ulf,

da hatte ich eine Klammer vergessen "..."Gasverbrauch_gestern") " , sorry ... und baue in das DbLogValueFn mal ein Log ein:


{
  if ($READING eq "Gasverbrauch_gestern") {
      my $told = $TIMESTAMP;
      $TIMESTAMP = strftime "%Y-%m-%d %H:%M:%S", localtime(time-86400);
      Log(1, "DbLogValueFn > alter TS: $told / neuer TS: $TIMESTAMP");
  }
}


Damit sieht man den originalen und den adaptierten Timestamp. Stelle außerdem im DbLog Device verbose 2.
Das reicht aus um eventuelle Fehler zu sehen.

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

ulobo60

hi Heiko,
bin früher zurück - Schwiegervater ist im Heim gut und problemlos gelandet.

Neee, das mit der Klammer ist meine Schuld.
Die Prüfung auf Klammer-Vollzähligkeit und -Art ist eigentlich das mindeste, das wir als Nutzer Eurer Experten-Tipps und -Vorlagen durchführen sollten.
Ich habe Deine Codierung ungeprüft übernommen. Mea culpa !

Habe gerade Deine aktuellen Optimierungen eingebaut (Klammern überprüft: okay) und Verbose = 2.
Deine Idee mit dem Logging des originalen und des adaptierten Timestamps ist klasse.

Ich melde mich morgen Vormittag und werde berichten.
Gut's Nächtle
Ulf
3x raspi + cam-Modul mit mmal-motion - 2x raspi mit KODI - 1x raspi mit FHEM + FTUI

ulobo60

hi Heiko,
das Leben hat doch in der Tat manchmal seine eigenen Gesetze...
Schwiegervater war gestern froh, im Heim zu sein - heute will er wieder nach Hause... etc., etc.
Das Ganze spielt sich derzeit in meiner Familie auch noch über 70km Entfernung ab.
1 Stunde mit dem Auto hin, 1 Stunde zurück, zwischendurch mit Caritas und Heimleitungen verhandeln, diskutieren ....
Rin in die Kartoffeln, raus aus die Kartoffeln...

Ich muss leider das Thema hier erst mal mindestens für ein paar Tage ruhen lassen.
Was empfiehlst Du mir: diesen Beitrag als GELÖST kennzeichnen oder einfach offen lassen?

lg
Ulf
3x raspi + cam-Modul mit mmal-motion - 2x raspi mit KODI - 1x raspi mit FHEM + FTUI

DS_Starter

Mach dir keinen Stress und lass es laufen ...  wir werden sehen.
Dir / euch alles Beste bis dahin !

LG,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

ulobo60

3x raspi + cam-Modul mit mmal-motion - 2x raspi mit KODI - 1x raspi mit FHEM + FTUI

ulobo60

[Exkurs-Anfang]
...komme gerade aus der Mensa.
Seit heute Mittag hängt dort ein Schild:
"Verkauf von Toilettenpapier nur an Geimpfte und Genesene !"
Seit heute Mittag ist die Schlange vor dem Corona-Impfzelt auf dem Campus ca. 10mal so lang wie heute morgen...
[Exkurs-Ende]

Ich werde heute Nacht den Beitrag als gelöst abschließen, da alles zu meiner Zufriedenheit funktioniert.
Habe noch ein paar kleinere Änderungen vorgenommen.
Hintergrund: Vissmann hat wohl in den letzten Nächten 2mal die Aktualisierung des Readings "Gasverbrauch_Total/Tag" erst ab 1:00 Uhr vorgenommen.
Also habe ich...
1. das Aktualisierungs-Intervall von 'Vitoconnect' auf 10800 (3 Stunden) gesetzt und es...
2. so gestartet, dass es vor Mitternacht gegen 22:14 Uhr und nach Mitternacht 01:14 Uhr die Daten abholt.
(MYSQL-Daten-Auszug siehe unten 1_mysql.jpg)
Es werden damit zwar nur 8 Daten je Tag gespeichert, aber das Chart dazu wird ja erst nach 1 Jahr so richtig interessant (Vergleich zum Vorjahr , u.ä.)
(Aktuelle Grafik siehe unten 2_chart.jpg).
Das Loggen von altem und neuem Timestamp klappt zwar nicht (habe Verbose=2). Ist m.E. aber auch nicht unbedingt nötig.

Der Ordnung halber hier das aktuelle Coding meiner Vitoconnect-Attribute:

attr vitoconnect DbLogInclude .*(Aussentemperatur|Gasverbrauch_gestern)

attr vitoconnect DbLogValueFn {\
  if ($READING eq "Gasverbrauch_gestern") {\
      my $told = $TIMESTAMP;;\
      $TIMESTAMP = strftime "%Y-%m-%d %H:%M:%S", localtime(time-86400);;\
      Log(1, "DbLogValueFn > alter TS: $told / neuer TS: $TIMESTAMP");;\
  }\
}

attr vitoconnect userReadings Gasverbrauch_gestern:Gasverbrauch_Total/Tag.* { (split /,/, ReadingsVal($name,'Gasverbrauch_Total/Tag',0))[1] if (localtime)[2] < 2 || ReadingsAge($name,'Gasverbrauch_gestern', DAYSECONDS) > DAYSECONDS - 1800 }


@DS_Starter + Beta-User:
Vielen , vielen Dank für Eure Mühen mit mir und Eure für mich wertvollen Anregungen, Hinweise, Codings + Erläuterungen.
Ihr habt mir sehr geholfen.
3x raspi + cam-Modul mit mmal-motion - 2x raspi mit KODI - 1x raspi mit FHEM + FTUI

Damian

Da du mit 86400 hantierst. Hast du an die Zeitumstellung zweimal im Jahr gedacht?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ulobo60

@damian
ja, ist hier ab 'Anwort #21' hier ergiebig behandelt worden  ;)
Ich werde es nach dem Moto "EDV zu Fuß" lösen:
Habe mir bereits 2 Erinnerungen in meinem Kalender für's nächste Jahr angelegt, une werde die Werte manuell ändern  :).
Danke Dir, Damian
3x raspi + cam-Modul mit mmal-motion - 2x raspi mit KODI - 1x raspi mit FHEM + FTUI