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

ZitatEigentlich müßte ich die Werte für 'Gasverbrauch_gestern' um 1 Tag nach vorn verschieben. Aber 1. weiß ich wieder mal nicht, wie man das anstellt.
Den Timestamp des DB Eintrages kannst du direkt beim Logging verändern. Dazu gibt es die Variable $TIMESTAMP im Attr DbLogValueFn.


{
  if ($READING eq "Gasverbrauch_gestern" {
      $TIMESTAMP = "yyyy-mm-dd hh:mm:ss";
  }
}


Jetzt braucht es nur ein wenig Hirnschmalz wie man "yyyy-mm-dd hh:mm:ss" bei jedem Log-Vorgang bestinmmt, ist aber auch kein großes Problem.

LG
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

Beta-User

...vielleicht werfe ich jetzt doch mal das Stichwort "statistics" in den Raum. Das kann uU. auch helfen, Tages- oder Monatsendwerte zu loggen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

DS_Starter

Na wenn wir schon dabei sind braucht man auch nur ein diffValue Auswertung für einen beliebigen Zeitraum (Tag, Woche, Monat, Jahr etc. ) mit DbRep über die Datenbank zu fahren.  :)
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

hmmmm...
[Exkurs-Anfang]
Ein Student (ich) steht auf dem Flur vor der Mensa zwischen 2 Professoren und lauscht der Diskussion der beiden.
Beide Profs haben ihren linken Arm angewinkelt, in der linken Handfläche ruht der rechte Ellbogen.
Mit Daumen und Zeigefinger der rechten Hand stützen die Profs ihr Kinn ... und fachsimpeln.
Der Student hat den Kopf leicht nach links geneigt und sein Mund steht halb offen.
Der Student stellt nach kurzer Zeit fest, dass er von der Diskussion nicht so richtig viel versteht.
Er bemerkt, dass es ihm wohl nicht an Hirnschmalz fehlt. Ihm fehlt einfach nur Hirn.  ???
[Exkurs-Ende]

@DS_Starter:
Klar, Du hast mich wieder am Haken.... ;)
Habe mal so'n Stündchen nach 'perl change timestamp' und ähnlichem gegoogled und nichts gefunden, das ich verstehe.
Könntest Du mir evtl. zum Thema "dd-1 im Timestamp" die letztliche Codierung verraten?
3x raspi + cam-Modul mit mmal-motion - 2x raspi mit KODI - 1x raspi mit FHEM + FTUI

Beta-User

 ;D

Hmmm, also bis zu einem gewissen Grad ist so ein Hirn auch nur ein Muskel, der mit etwas Training wächst...

(Bei manchem, was ich vor Jahren geschrieben habe, denke ich heute auch: nun ja, ... also, öhm  ::) )

Das Format ist doch das "normale" Zeitstempelformat in FHEM => ergo gibt's auch eine Funktion dafür in fhem.pl...
{FmtDateTime(time)}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

DS_Starter

Könnt mich schmeißen ...  ;D

Zitat
Habe mal so'n Stündchen nach 'perl change timestamp' und ähnlichem gegoogled und nichts gefunden, das ich verstehe.
Könntest Du mir evtl. zum Thema "dd-1 im Timestamp" die letztliche Codierung verraten?

Es müßte so gehen (Attr valueFn !!, nur valueFn wird bei addLog ausgewertet wenn du addLog verwenden willst):

{
  if ($READING eq "Gasverbrauch_gestern" {
      $TIMESTAMP = strftime "%Y-%m-%d %H:%M:%S", localtime(time-86400);
  }
}

time gibt die Anzahl der Sekunden seit Beginn der Epoche (1970) zurück. Das substrahiert mit 86400 (1 Tag) vermindet den Timestamp um einen Tag. Das strftime  (POSIX) wandelt den Timstamp zurück und formatiert ihn wie benötigt.
Hoffe es stimmt alles so wie ich es schnell ausgedacht habe ...

LG
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

Beta-User

Zitat von: DS_Starter am 25 November 2021, 15:07:56
Könnt mich schmeißen ...  ;D
[...]
Das substrahiert mit 86400 (1 Tag)  [...]

;D ... da war doch was mit der Zeitumstellung...
*duck und weg*
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

DS_Starter

Äh , ja ... Wenn man den Wert früh vor um 02:00 loggt sollte eine Subtraktion von 86400 immer im Vortag landen wenn ich keinen Knoten im Hirn habe. Eigentlich ist es egal wenn man nicht gerade am Abend 23:00 loggt und ausgerechnet die Zeitverschiebung mit dem 23-Stundentag erwischt ... Da wird einem ja ganz schwindelig  ;)
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

Beta-User

 ;D ja, müßte passen, wenn man das Zeitfenster zwischen 00:00 Uhr und einschl. 02:00:00 Uhr erwischt. Hatte nur neulich "Spaß" mit dem Thema bei statistics, offenbar ist da der Knoten in meinem Hirn noch nicht ganz weg (das Problem in statistics aber hoffentlich schon, *Kinnreib*)...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

ulobo60

... komme gerade aus der Mensa...
Im Ernst - habe in den letzten 2 Stunden erfolglos versucht, das Tag-Verschiebungsproblem mit Euren bis dato - Hinweisen zu lösen.
Keine Chance für mich...
Dann kam mir der entscheidende Gedanke: schau doch mal in's Forum, vielleicht gibt's was Neues. Und siehe da - es gab was Neues: die Copy/Paste-Hilfe von DS_Starter. Thx a lot dafür. Wenn man den Programm-Schnipsel mit POSIX dann so vor sich sieht, macht alles Sinn. Es ist dann so einleuchtend.
Habe die Codierung gerade perfekt eingebaut ;).

Jetzt heißt's wieder warten auf morgen früh und das Ergebnis begutachten.
Melde mich morgen früh wieder.
Thx a lot Euch Beiden.

P.S.: Bin jetzt wieder in der Mensa...
3x raspi + cam-Modul mit mmal-motion - 2x raspi mit KODI - 1x raspi mit FHEM + FTUI

Beta-User

Zitat von: DS_Starter am 25 November 2021, 15:20:42
Äh , ja ... Wenn man den Wert früh vor um 02:00 loggt sollte eine Subtraktion von 86400 immer im Vortag landen wenn ich keinen Knoten im Hirn habe. Eigentlich ist es egal wenn man nicht gerade am Abend 23:00 loggt und ausgerechnet die Zeitverschiebung mit dem 23-Stundentag erwischt ... Da wird einem ja ganz schwindelig  ;)
...offenbar doch zu schwindelig: 00:nn Uhr minus DAYSECONDS ergibt vorgestern, wenn man nach der Zeitumstellung im März (23 h-Tag) prüft...

Vielleicht habe ich jetzt wieder einen Dreher drin, vielleicht auch nicht, wer weiß...
  if ($READING eq "Gasverbrauch_gestern" {
      my $now = time;
      my $then = $now - 86400 - 3600*((localtime($now))[8] - (localtime($now - 86400.))[8]);
      $TIMESTAMP = FmtDateTime($then);
  }

(Ohne das "use POSIX;", aber ggf. muss man dann die fhem.pl-Funktion importieren, wenn man gepackaged ist  :P ...)

Guten Appetit in der Mensa!

EDIT: Man könnte aber auch der Einfachheit halber nur 23 h abziehen, wenn man sicher ist, dass man nicht nach 22:00 Uhr dran ist...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

DS_Starter

DbLog habe ich nicht gepackaged, da sind die fhem.pl Funktionen verfügbar. Und POSIX wird in fhem.pl geladen.
Passt soweit. Die Zeitumstellung sollte mal kassiert werden. Dann wäre uns allen geholfen.  :)
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

Beta-User

Zitat von: DS_Starter am 25 November 2021, 17:42:24
DbLog habe ich nicht gepackaged, da sind die fhem.pl Funktionen verfügbar.
Habe zwischenzeitlich alles gepackaged, was ich als Maintainer zu verantworten habe, und kann das nur weiterempfehlen... Kein Hackel mit unbeabsichtigten Doppelbenennungen bei Variablen (oder gar Code-Referenzen), teilweise "atomisierter Code", "use List::Util 1.45 qw(max min uniq);"

Zitat
Und POSIX wird in fhem.pl geladen.
...was Rudi wohl heute nicht mehr so lösen würde, wenn ich seine diesbezüglichen Äußerungen richtig deute (und dass das (ohne Einschränkung via qw) auch noch x andere Module in main ziehen, ist auch nicht glücklich...).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

DS_Starter

ZitatHabe zwischenzeitlich alles gepackaged, ...
Ja mache ich bei auch so. Außer bei DbLog, da bin ich sehr vorsichtig.
DbRep kommt noch dran, aber auch da keine Eile.

Wird jetzt aber langsam OT  ;)
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

[Exkurs-Anfang]
Als der Student am frühen Nachmittag aus der Mensa kam, waren die beiden Profs verschwunden.
Der Student beschloss, noch schnell mal in die Sauna zu gehen.
Als er die Saunatür öffnete, teilte sich die heiße Luft vor ihm.
Er sah die beiden Profs in entspannter Kutscherhaltung auf der höchsten Pritsche sitzen.
Der Student suchte sich einen Platz auf der untersten Reihe.
Die 2 Profs diskutierten unter anderem über das Posix. Das kannte der Student - aus seiner Bodybuilder-Zeit.
Der Student erfuhr auch noch so nebenbei, dass einer der Profs gepackaged sei, der andere aber nicht.
Es wurde viel diskutiert über das Problem mit der Zeitumstellung im März, und dass "00:nn Uhr minus DAYSECONDS vorgestern ergibt".
Für einen kleinen Augenblick nahm der Student seine gewohnte Haltung ein: Kopf leicht nach links geneigt und Mund halb offen.
Dies aber nur für eine sehr kurze Zeit.
Die heiße Luft machte den Studenten schläfrig.
Er nahm sein Handtuch, ging auf seine Bude und dort direkt zu seinem Schreibtisch.
Darüber hängt seine Pinnwand mit den wichtigsten Notizen - so ca. 127 Stück.
Er nahm seine Einkaufsliste von der Pinnwand. Der letzte Punkt - erst vor kurzem hinzugefügt - war: "1kg Gehirnschmalz kaufen".
Auf die Rückseite des Zettels schrieb er:
"Nach der Zeitumstellung im März 2022 prüfen, ob der Einfachheit halber nur 23 h abzuziehen sind, wenn man sicher ist, dass man nicht nach 22:00 Uhr dran ist."
Mit einem zufriedenen Lächeln im Gesicht schlief der Student ein - mit der Gewissheit, die beiden Profs morgen wieder vor der Mensa zu treffen.
[Exkurs-Ende]

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