Verständnisproblem "Tages-, Monats- und Jahresstatistik für Strom-, Gas-..."

Begonnen von tndx, 08 November 2023, 07:55:18

Vorheriges Thema - Nächstes Thema

tndx

Moin,

nach dem das Doif nach dem Fixen des Event-Problems zwei Tage unauffällig lief, stelle ich fest, dass heute es offenbar wieder irgendwo klemmt.

So sind zum Beispiel keine Einspeisewerte vom Vortag eingetragen, gestern hat es die noch gegeben. Außerdem steht in sämtlichen Diagrammen unter "letzte" 0. Beim Bezug fehlen sowohl die Werte vom Vortag als auch die aktuellen, denn der Bezug über Nacht war da.

Da der Rechner nachts lief, kann ich sehen, dass die Funktion "midnight" offenbar 2-mal hintereinander aufgerufen wurde und demzufolge die Readings "last_day" von was Sinnvollem auf 0 gesetzt wurden, warum?
2023-11-08 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.last_day: 4.089
2023-11-08 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.day: 0
2023-11-08 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.month: 31.819
2023-11-08 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.year: 31.819
2023-11-08 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_day: 6.859
2023-11-08 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.day: 0
2023-11-08 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.month: 20.49
2023-11-08 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.year: 20.49
2023-11-08 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.last_day: 0
2023-11-08 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.day: 0
2023-11-08 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.month: 31.819
2023-11-08 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.year: 31.819
2023-11-08 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_day: 0
2023-11-08 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.day: 0
2023-11-08 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.month: 20.49
2023-11-08 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.year: 20.49

Aber ich bin mir auch nicht sicher, ob ich die Intention der Diagramme komplett verstehe, immerhin habe ich im moment nicht genug Daten für eine sinnvolle Anzeige. Ist das korrekt, dass in jedem Diagramm jeweils der aktuelle Werte und die 2 letzten Werten (vom Vortag, Vormonat, Vorjahr) als Balken dargestellt werden sollen?
Unter "letzte" steht der Wert der letzten Stunde/Monat/Jahr numerisch und unter "aktuelle" der Wert, der sich gerade in der Berchnung befindet für die aktuelle Stunde/Monat/Jahr?

Habt ihr eine Idee? Wie gehabt, ich würde gerne die Ausgabe von List posten, aber die ist über mehrere Seiten, deswegen sagt Bescheid, was genau evtl. für die Fehlersuche benötigt wird.

Damian

Unter "letzter" ist der letzte Balken gemeint, bei dir ist der letzte Balken immer Null gewesen, daher steht da NULL drin. Der aktuelle Wert der Stunde wird nur oben in der Zeile des jeweiligen Diagramms angezeigt, nicht aber als Balken. Der aktuelle Zeitpunkt wird mit einem weißen Punkt in der Grafik markiert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

tndx

Dann habe ich das soweit richtig aufgefasst und so hat es ja auch ein-zwei Tage funktioniert. Ich hatte gehofft, dass es sich vielleicht um Mitternacht heilen würde, aber leider immer noch das gleiche Bild, s. Anhang.

Die Werte bei "aktuell" ändern sich zwar, aber es werden keine Balken mehr aufgetragen, auch die vom Vorvortag (vorgestern lief das noch) nicht.

Was ist hier aus dem Tritt geraten?

Und "midnight" wurde offenbar wieder doppelt ausgeführt:
2023-11-09 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.last_day: 4.09
2023-11-09 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.day: 0
2023-11-09 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.month: 35.91
2023-11-09 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.year: 35.91
2023-11-09 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_day: 19.85
2023-11-09 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.day: 0
2023-11-09 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.month: 40.34
2023-11-09 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.year: 40.34
2023-11-09 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.last_day: 0
2023-11-09 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.day: 0
2023-11-09 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.month: 35.91
2023-11-09 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.year: 35.91
2023-11-09 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_day: 0
2023-11-09 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.day: 0
2023-11-09 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.month: 40.34
2023-11-09 00:01:00 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.year: 40.34

Sailor

Hi tndx

Zitat von: tndx am 09 November 2023, 07:34:53Dann habe ich das soweit richtig aufgefasst und so hat es ja auch ein-zwei Tage funktioniert. Ich hatte gehofft, dass es sich vielleicht um Mitternacht heilen würde, aber leider immer noch das gleiche Bild, s. Anhang.

Hast du dir schon den ElectricityCalculator angeschaut?

Gruss
    Sailor
******************************
Man wird immer besser...

Damian

Möglicherweise hängt es wieder mit fehlenden Events zusammen. Bei mir funktioniert diese Definition mit allen möglichen Devices.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

tndx

@Sailor: Danke für den Tipp, kannte ich noch nicht. Würde ich mir ggf. als Nächstes anschauen, wenn ich das nicht ans Laufen kriege.

@Damian: Immerhin lief es ja 2 tage lang. Die gefixten Events funktionieren nach wie vor:
2023-11-09 15:58:12 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.hour: 0.06
2023-11-09 15:58:12 DOIF di_counter_new HWR_Stromzaehler_IEC_01.energyIEC_kWh.hour: 0.06
2023-11-09 15:58:12 CUL_HM HWR_Stromzaehler_IEC_01 energyIEC_kWh: 283.94
2023-11-09 15:58:12 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.hour: 0.029
2023-11-09 15:58:12 DOIF di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.hour: 0.029
2023-11-09 15:58:12 CUL_HM HWR_Stromzaehler_IEC_02 energyIEC_kWh: 1528.56
Was mich hier wieder stutzig macht, dass auch hier offenbar das Doif 2x pro Event aktiv wird.
Aber alle anderen Berechnungen werden ja timergesteuert stündlich, monatlich oder jährlich durchgeführt, dafür sind keine Events nötig, und sie werden ja auch laut Event-Monitor durchgeführt. Nur offenbar doppelt, warum auch immer, könnte das das Verhalten erklären?

cwagner

Hier kann ich nur eine - leider auf anderen Systemen nicht sauber reproduzierbare - Erfahrung beisteuern: Bei mir läuft das DOIF fehlerfrei und feuert seine Events wunschgemäß so lange bis der Rechner neu gestartet wird.
Wenn ich aber nach einem Neustart die Definition des DOIF auch nur ein Leer- oder Kommentarzeichen hinzufüge oder lösche, werden zur nächsten Mitternacht wieder die Events gefeuert, jeden Tag.

Inzwischen ist es bei mir Routine, nach einem Neustart eine solche "Scheinänderung" zu machen - nur Definition öffnen und speichern reicht bei mir nicht.
Velleicht kommen wir ja zusammen durch Beobachtung auf zwei Systemen der Ursache auf die Spur.

Christian

PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

tndx

Guten Morgen,

nachdem ich gestern den Post von cwagner gelesen habe, kam ich auf die Idee, das Doif neu zu starten. Also einmal attr disable = 0
attr disable = 1
(so ähnlich jedenfalls, in der Web-GUI) und siehe da, die Balken wierden wieder aufgetragen. Was kann hier der Grund gewesen sein? Offenbar lief die Berechnung der Werte, nur der grafische Teil hing.

Vermutlich werden jetzt auf die Fehlenden Balken aufgetragen, wenn ich "get_data" ausführe, denn die Log-files sind ja weiterhin gefüllt worden, oder mache ich damit irgendwas kaputt?

Damian

Zitat von: tndx am 10 November 2023, 07:40:26Guten Morgen,

nachdem ich gestern den Post von cwagner gelesen habe, kam ich auf die Idee, das Doif neu zu starten. Also einmal attr disable = 0
attr disable = 1
(so ähnlich jedenfalls, in der Web-GUI) und siehe da, die Balken wierden wieder aufgetragen. Was kann hier der Grund gewesen sein? Offenbar lief die Berechnung der Werte, nur der grafische Teil hing.

Vermutlich werden jetzt auf die Fehlenden Balken aufgetragen, wenn ich "get_data" ausführe, denn die Log-files sind ja weiterhin gefüllt worden, oder mache ich damit irgendwas kaputt?

Normalerweise reagiert eine uiTable-Definition auf Events und aktualisiert intern die Werte für die Darstellung. Mit get_data kann man Daten aus dem Log holen, damit macht man nichts kaputt. Wenn die Daten zu alt sind und außerhalb des Darstellungsbereiches, dann werden diese natürlich nicht angezeigt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

tndx

Heute den ganzen Tag ist zwar der Bezug aufgetragen worden, aber nicht die Einspeisung, obwohl ich beobachten konnte, dass sich unter "aktuell" was ansammelte und hätte eigentlich zur nächsten vollen Stunde als Balken dargestellt werden müssen. Unter letzter Stand dann aber doch wieder "0" und es wurde nichts aufgetragen. Ich kann hier leider kein Muster erkennen, denn bei Bezug klappt es wie gesagt...

Ich werde gleich als nächstes "get_data" ausführen und weiterschauen.

P.S.: auf welche Events reagiert genau uiTable-Definition?

Edit: "get_data" hat leider nichts gebracht, dafür sehe ich folgendes im Log:
2023-11-10_10:00:00 di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_hour: 0.3
2023-11-10_10:00:00 di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_hour: 0
2023-11-10_11:00:00 di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_hour: 0.319
2023-11-10_11:00:00 di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_hour: 0
2023-11-10_12:00:00 di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_hour: 3.019
2023-11-10_12:00:00 di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_hour: 0
2023-11-10_13:00:00 di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_hour: 1.68
2023-11-10_13:00:00 di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_hour: 0
2023-11-10_14:00:00 di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_hour: 1.009
2023-11-10_14:00:00 di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_hour: 0
2023-11-10_15:00:00 di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_hour: 0.099
2023-11-10_15:00:00 di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_hour: 0
2023-11-10_16:00:00 di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_hour: 0.009
2023-11-10_16:00:00 di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_hour: 0
2023-11-10_17:00:00 di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_hour: 0.009
2023-11-10_17:00:00 di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_hour: 0

Das ist das Muster, was ich schon weiter oben gesehen habe, die Funktionen werden doppelt ausgeführt, und die eigentlich plausiblen Werte mit "0" überschrieben. Wenn ich jetzt die 0-Zwischenzeilen löschen würde, würde es bestimmt laufen?! Also habe ich irgendwo dopellte Events? Aber die Funktion wird doch timergesteuert ausgeführt?

Edit2: Ich habe nun die doppelten Zeilen mit "0" per Hand aus den Logs entfernt (nur für heute), "get_data" ausgeführt und et voila:
Du darfst diesen Dateianhang nicht ansehen.
Jetzt fehlt mir nur noch die Idee, wie ich die doppelte Ausführung unterbinden kann ???

Damian

In den Templates siehst du das, was bei den Cards angegeben ist. Das sind Readings, die das DOIF-Device selbst generiert: wie ...day, ...last_hour, ...hour, ...last_day, last_month usw.

siehe:

DEF TPL_single (\
##card([$SELF:$2.$3.day:col1w],"$1",undef,$4,$5,$10,$11,"$12",undef,"1","130,fixedscaling,,footer,noycolor,halfring,220","0,0,0,0,2")| Wochendarstellung\
card([[$SELF:$2.$3.last_hour:bar2day-10],[$SELF:$2.$3.hour]],"$1 in $12/h",undef,$4/12,$5/12,$10,$11,["letzte","aktuell"],undef,"2","130,fixedscaling,,footer,noycolor,halfring,220","0,0,0,0,2")|\
card([[$SELF:$2.$3.last_day:bar2month-300],[$SELF:$2.$3.day]],"$12/Tag",undef,$4,$5,$10,$11,["letzter","aktuell"],undef,"1","130,fixedscaling,,footer,noycolor,halfring,220","0,0,0,0,2")|\
card([[$SELF:$2.$3.last_month:bar2year-300],[$SELF:$2.$3.month]],"$12/Monat",undef,$6,$7,$10,$11,["letzter","aktuell"],undef,"0","130,fixedscaling,,footer,noycolor,halfring,220","0,0,0,0,2")|\
card([[$SELF:$2.$3.last_year:bar2decade-300],[$SELF:$2.$3.year]],"$12/Jahr",undef,$8,$9,$10,$11,["letzter","aktuell"],undef,"0","130,fixedscaling,,footer,noycolor,halfring,220","0,0,0,0,2")\
)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

tndx

Nach meinem Verständnis passiert diese Generierung aber doppelt, wobei beim 2. Durchgang die Berechnung zunichte gemacht wird. Diese Generierung wird in der Definition des Doifs timergesteuert angestoßen:
hour {[:00];
... hour(...) ...}
midnight {[00:01];
... midnight(...) ...}

Bei mir im Log sieht es aber so aus, als werden diese Blöcke jeweils doppelt ausgeführt, anders ist ja die doppelte Wertberechnung nicht zu erklären?! Z.B.:
2023-11-10_14:00:00 di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_hour: 1.009
2023-11-10_14:00:00 di_counter_new HWR_Stromzaehler_IEC_02.energyIEC_kWh.last_hour: 0

Damian

Möglicherweise hängt der ganze Spuck bei euch beiden mit der Selbsttriggerung und den fhem-Mechanismen zusammen. Ihr könntet zum Ausprobieren die cards-Darstellung in ein anderes DOIF übertragen, sodass die Berechnung im ursprünglichen DOIF stattfindet und die Darstellung in einem separaten. Dazu müsste man den Inhalt des uiTable-Attributes in das neue DOIF verlagern und dort in den Templates $SELF gegen den Namen des ursprünglichen DOIFs ersetzen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF