Readings werden um 00:00 IMMER mit altem Wert (UND ALTEM DATUM) initialisiert

Begonnen von thommythekid, 15 Oktober 2021, 10:42:17

Vorheriges Thema - Nächstes Thema

thommythekid

Hallo,

ich bin neu hier und spiele seit einiger Zeit mit FHEM rum, um meinen intelligenten Stromzähler
regelmäßig auszulesen und die Werte in 5 Min Intervallen zu speichern.

Nun habe ich folgendes Problem:

Ich habe ein Dummy erstellt, soweit ich rumprobiert habe, kann man bei einem dummy ja nur den State setzen,
aber nicht auslesen und daher habe ich eine Readingsgroup auf dem dummy definiert, und so kann ich mit
setreading   dummyname.readingname ein beliebiges Reading unterhalb des dummys bzw. in der Readingsgroup
setzen und auch wieder auslesen.

Ich muss sagen, dass ich schon viele Versionen meiner Anwendung gebaut habe, aber aktuell
habe ich 2 AT Kommandos, eines alle 5 Minuten, das nur ein Reading setzt (counter_current_iskra)
und ein anderes, welches um Mitternacht läuft und 2 Readings liest (start_day und counter_current_iskra),
die Differenz berechnet und start_day mit dem gelesenen Wert von counter_current_iskra setzt.

my $last = ReadingsVal( "Zaehlerwerte_ISKRA", "start_day", 0);
my $val = ReadingsVal( "Zaehlerwerte_ISKRA", "counter_current_iskra", 0);
my $diff = sprintf("%i",($val - $last)*1000) ;

fhem ("setreading Zaehlerwerte_ISKRA start_day $val");


der $diff wird in eine Datei geschrieben, sonst passiert da nichts.

Nun zu meinem Problem:

Es werden um Mitternacht jedes Mal irgendwelche alten Readings gesetzt, obwohl
die in einer früheren Version des Codes mal vorhanden waren, aber im aktuellen nicht
mehr drin sind ! Außerdem haben die Werte, wie man sieht, ein veraltetes Datum
(24. Spetember) und einen veralteten Wert, der immer gleich ist. Und das, obwohl
um 00:00 das AT durchlaufen wird, welches den Wert counter_current_iskra in das
Reading start_day schreibt. Die beiden alten Readings diff_day und end_day kommen
gar nicht mehr vor im Code.

Zählerwerte_ISKRA
Zaehlerwerte_ISKRA:counter_current_iskra    855.6421  2021-10-15 10:30:01
Zaehlerwerte_ISKRA:diff_day                      11485         2021-09-24 00:00:00
Zaehlerwerte_ISKRA:end_day                      503.1022    2021-09-24 00:00:00
Zaehlerwerte_ISKRA:start_day                    514.5877    2021-09-24 00:00:00


Hat jemand eine Idee, an was das liegen kann ?

viele Grüße und vielen Dank im Voraus

Thommy





KölnSolar

Willkommen im Forum.

Mir scheint, dass Du einen Gedankenfehler hast. Zumindest las ich nirgendwo, dass Du die alten readings auch mal gelöscht hattest. Also mal ein deletereading Zählerwerte_ISKRA .*_dayausführen. Dann sind die 3 .*day readings schon einmal weg.

Warum das
Zitatfhem ("setreading Zaehlerwerte_ISKRA start_day $val");
nicht tut, was es soll, sehe ich gerade nicht.  :'(

Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

jhohmann

Auch willkommen.
Du kannst bei einem Dummy natürlich auch den State setzen.
Ich habe z.B. einen Dummy angelegt, um die Tageshelligkeit abzubilden und zwischenzeitig vieles andere mehr durch eigene Readings, so dass der Name jetzt eigentlich falsch ist. Aber das zu ändern, ist viel Arbeit und fehlerträchtig. Also sollten Namen gut überlegt sein  ;).
if (ReadingsVal("Tag", "state", "") eq "sonnig" && ReadingsNum("EsszimmerRolladen", "position", 0) == 0) {
    fhem("set Tag hell");
}

Mit ReadingsVal("Tag", "state", "") kann ich den aktuellen Wert auslesen und mit fhem("set Tag hell") auch verändern.
Die ReadingsGroup "brauchst" du dann, wenn du neben dem State auch die anderen Werte in einfacher Form sehen willst, ohne immer wieder den Dummy selbst anzuklicken.
Mach doch mal ein List von deinem Dummy und stelle das Ergebnis hier ein.
Jürgen
Raspberry Pi 4 - bookworm / EnOcean - Rollo+Licht, deCONZ - Licht+Sensoren, ZWave - CO Messung, HMCCU mit piVCCU - Heizung+Rollo
plus dovecot, minidlna

thommythekid

Hallo,

super, vielen Dank für die Antworten.

ZitatAlso mal ein
Code: [Auswählen]
deletereading Zählerwerte_ISKRA .*_day
ausführen. Dann sind die 3 .*day readings schon einmal weg.

Das hab ich natürlich schon gemacht ! Dann waren die Readings natürlich weg !
Aber das Problem, was ich nicht verstehe: am Nächsten Tag sind sie wieder da !
Mit einem uralten Datum (24.9) ! Und es gibt keinen Code von mir, der das macht !

Meine Vermutung ist irgendwie, dass das AT um 00:00 schon ausgeführt wird,
dann aber noch irgendwas passiert, was den Wert start_day nochmal umsetzt
(auf den Wert vom 24.9) und die Werte end_day und diff_day auch !
Denn diese erscheinen wieder, obwohl es kein Coding gibt, das diese setzt !
Es muss auch irgend einem alten Leichencoding kommen - aber das genau
will ich ja herausfinden.

Ich muss dazusagen, dass es frühere Versionen des AT um Mitternacht gab, die
sehr wohl diese Readings gesetzt haben. Zuvor habe ich S0 Impulse aufaddiert
um zu dem Zählerstand zu kommen. Da hatte ich mir den Angangswert jedes
Tages gemerkt. Im Juli hatte ich einen Stromzählertausch und jetzt kann ich den
Absolutwert des Zählers direkt auslesen. Weil nach 00:00 bereits der nächste Tag
ist, müsste ich ins log des Vortages schauen, um die Tagessumme des gerade
abgelaufenen Tages zu ermitteln. Da hab ich es einfacher gefunden, den start_day
mir immer um 00:00 zu merken - hab jetzt aber dieses überlagerne Schreiben
mit den alten Werten...

Gruß
Thommy

betateilchen

Das Mitternachts-at würde ich um ein paar Sekunden verschieben (z.B. auf 00:00:05)

Ein Log-Auszug für den Zeitraum 23:59:00 - 00:01:00 wäre hilfreich um zu erkennen, ob irgendwas außergewöhnliches passiert.
Kann es sein, dass Dein FHEM um Mitternacht von irgendwoher neu gestartet wird und dabei ein altes statefile eingelesen wird? Irgendwo müssen die alten Werte ja herkommen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

thommythekid

ZitatDas Mitternachts-at würde ich um ein paar Sekunden verschieben (z.B. auf 00:00:05)
Ah, gute Idee: es ist ja auch so, dass dich das AT alle 5 Minuten und das AT um Mitternacht auch überlagern.
Da denke ich, wird es zeitlich mal etwas entzerrt.

Auch hab ich im Log was gefunden, was in Richtung deiner Vermutung (Neustart) gehen könnte.

Undefined subroutine &main::Dumper called at ./FHEM/73_ElectricityCalculator.pm line 475.
Danach einige Zeilen, die aussehen wie ein neuer Startup

Da der ElectricityCalculator ja ebenfalls zur alten Implementierung mit dem S0 Counter gehört, hab ich
den jetzt auch mal abgeräumt. Mal sehen, wie es dann heute Nacht aussieht ...

Vielen Dank

Thommy

betateilchen

Zitat von: thommythekid am 15 Oktober 2021, 13:57:52
Undefined subroutine &main::Dumper called at ./FHEM/73_ElectricityCalculator.pm line 475.

Das ist ein Programmfehler, den Du auf jeden Fall im korrekten Unterforum zum Modul 73_ElectricityCalculator.pm melden solltest, damit sich der Modulautor darum kümmert.
(und zwar unabhängig davon, ob Du das Modul weiterhin benutzt oder nicht!)

Problem an der Stelle ist, dass eine Funktion aus dem Perl-Modul Data::Dumper aufgerufen wird, dieses Modul aber nicht vorher geladen wurde.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

thommythekid

Hallo,

das mit meinen beiden Änderungen hat funktioniert ! Vielen Dank für die Tips.

Ich denke, es lag hauptsächlich an dem Löschen des anderen alten Krams, der
den Electricitycalculator benutzt hat und vermutlich einen Restart von FHEM
ausgelöst hat.

Zum Posten des Problems im geeigneten Unterforum müsstet ihr mir noch helfen.
Ich hab gesucht und nichts zu speziellen Modulen gefunden.

Gruß
Thommy

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!