SVG FixedRange Year mit Jahreswechsel der Dezember fehlt

Begonnen von mkraus81, 01 Januar 2026, 09:25:48

Vorheriges Thema - Nächstes Thema

mkraus81

Hi,

und ein frohes neues Jahr!
ich habe für Stromzähler usw. das Statistics-Modul im Einsatz
Ich zeige mir die Daten "last Month" in einer SVG an... heute viel mir (mal wieder) auf, dass der Dezember nicht angezeigt wird.
Ich vermute es liegt daran, dass das Statistics Modul den Eintrag am 1.1.2026 geschrieben hat...

Was muss ich tun, wenn ich das Komplette letzte Jahr angezeigt haben möchte?
Ich habe mit fixesoffset rumprobiert aber keine Lösung gefudnen.

DANKE


Nobbynews

#1
Zitat von: mkraus81 am 01 Januar 2026, 09:25:48Was muss ich tun, wenn ich das Komplette letzte Jahr angezeigt haben möchte?
Bisschen dürftige Informationen.
Kannst ja mal im SVG-device probieren:
attr <SVG-device> fixedrange 2025-01-01 2025-12-31Dann fehlt aber alles ab dem 1.1.26.

Vom aktuellen Datum aus das zurückliegende Jahr (370 d, nicht auf konkretes Datum festgelegt):
attr <SVG-device> fixedrange 370days
Das setzt aber voraus, dass das Log-File mit dem Attribut createGluedFile 1 erzeugt wird.

betateilchen

#2
Zitat von: Nobbynews am 01 Januar 2026, 09:35:16Das setzt aber voraus, dass das Log-File mit dem Attribut createGluedFile 1 erzeugt wird.

...oder dass man DbLog verwendet.
Dann kann man sehr einfach den von statistics geschriebenen ersten Wert 2026 auf den 31.12. des Vorjahres "korrigieren".
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Nobbynews

Zitat von: betateilchen am 01 Januar 2026, 10:18:43Dann kann man sehr einfach den von statistics geschriebenen ersten Wert 2026 auf den 31.12. des Vorjahres "korrigieren".
Meine Energiewerte ermittle ich ohne sonstige Module und zwar immer um 23:59 Uhr. Damit entfällt auch das.

rudolfkoenig

Ich mache auch mal mit beim Raten: "attr FileLog createGluedFile 1".

mkraus81

Hi, Sorry.. für die "wenigen" Informationen.

Ich habe alle Einträge im DBLog

RAW:
defmod SVG_GasMonat SVG DBLogging:SVG_GasMonat:HISTORY
attr SVG_GasMonat alias Gasverbrauch pro Monat
attr SVG_GasMonat fixedrange year
attr SVG_GasMonat label "Gasverbrauch pro Monat: Letzer Monat $data{currval1} Durchschnitt $data{avg1}"
attr SVG_GasMonat room Haus

setstate SVG_GasMonat initialized

SVG

# Created by FHEM/98_SVG.pm, 2025-11-28 12:35:50
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<L1>'
set ytics
set y2tics
set grid
set ylabel "Verbrauch [kWh]"
set y2label "Verbrauch [kWh]"

#DBLogging GaszaehlerCalc:gaszaehler_Counter1_EnergyMonthLast:::
#lp DbLog:DBLogging,offset=365*(60*60*24):GaszaehlerCalc:gaszaehler_Counter1_EnergyMonthLast::

plot "<IN>" using 1:2 axes x1y1 title 'Jahr' ls l0fill lw 1 with bars,\
     "<IN>" using 1:2 axes x1y1 title 'Vorjahr' ls l2fill lw 1 with bars

betateilchen

#6
Zitat von: mkraus81 am 01 Januar 2026, 15:59:37#DBLogging GaszaehlerCalc:gaszaehler_Counter1_EnergyMonthLast:::
#lp DbLog:DBLogging,offset=365*(60*60*24):GaszaehlerCalc:gaszaehler_Counter1_EnergyMonthLast::

Wenn man mit logproxy arbeitet, muss man im gplot-file ALLE Werte durch logproxy ersetzen, auch die aus FileLog oder DbLog.

Die commandref schreibt dazu:

Zitat
To use any of the logProxy features with an existing plot the associated SVG file hast to be changed to use the logProxy device and the .gplot file has to be changed in the following way:
All existing #FileLog and #Dblog lines have to be changed to #logProxy lines and
the column_spec of these line has to be prepended by FileLog:<log device>: or DbLog:<log device>:
respectively.
Examples:
#DbLog <myDevice>:<myReading>
#FileLog 4:<SPEC1>:power\x3a::
#FileLog 4:<SPEC1>:consumption\x3a::

will become:

#logProxy DbLog:<myDb>:<myDevice>:<myReading>
#logProxy FileLog:FileLog_<SPEC1>:4:<SPEC1>.power\x3a::
#logProxy FileLog:FileLog_<SPEC1>:4:<SPEC1>.consumption\x3a::


Vielleicht hilft das schon weiter.

Ansonsten wäre interessant, was unter "Show preprocessed input" aufgelistet wird.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

mkraus81

Show Proccessed input zeigt folgendes

get DBLogging HISTORY INT 2025-01-01_00:00:00 2025-12-31_23:59:59 GaszaehlerCalc:gaszaehler_Counter1_EnergyMonthLast:::

2025-01-01_00:04:24 3345.531
2025-02-01_00:06:41 3855.491
2025-03-01_00:07:54 3373.694
2025-04-01_04:34:33 2358.133
2025-05-01_04:34:43 1395.098
2025-06-01_04:35:10 1165.432
2025-07-01_04:35:21 913.190
2025-08-01_05:35:27 723.421
2025-09-01_05:36:10 468.497
2025-10-01_05:06:20 638.037
2025-11-01_05:01:03 1241.875
2025-12-01_00:23:52 1918.469
#GaszaehlerCalc:gaszaehler_Counter1_EnergyMonthLast:::

get lp CURRENT INT 2025-01-01_00:00:00 2025-12-31_23:59:59 DbLog:DBLogging,offset=365*(60*60*24):GaszaehlerCalc:gaszaehler_Counter1_EnergyMonthLast::

2025-01-31_05:01:30 3615.207
2025-03-01_05:01:43 2565.671
2025-04-01_05:01:39 2448.546
2025-05-01_05:02:12 2127.460
2025-06-01_04:32:16 1044.731
2025-07-01_05:07:40 712.804
2025-08-01_05:35:49 634.796
2025-09-01_04:47:15 537.453
2025-10-01_04:32:14 768.908
2025-11-01_04:33:07 1579.949
2025-12-01_00:04:24 2531.025
#GaszaehlerCalc:gaszaehler_Counter1_EnergyMonthLast:::

Der Wert mit dem Timestamp 2025-12-01... ist der Wert in der Grafik für November
es fehlt halt der Eintrag mit Timestamp 2026-01-01... der den Wert für Dezember enthält


betateilchen

Naja, das ist eben das, was ich oben schon geschrieben hatte. Du musst dafür sorgen, dass der Wert für Dezember auch noch mit einem Timestamp von Dezember in das Log geschrieben.

Der svg plot fragt die Daten für diesen Zeitraum ab:

Zitatget DBLogging HISTORY INT 2025-01-01_00:00:00 2025-12-31_23:59:59

Der Wert für Dezember wird aber vermutlich erst am 01.01.26 in das Log geschrieben, deshalb steht er für den Plot nicht zur Verfügung.

Lösungsvorschlag:

Lies den Wert für Dezember aus dem DbLog aus und schreibe ihn mit dem Timestamp 2025-12-31_23:59:59 in das DbLog. Dazu kannst Du ein DbRep device verwenden.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!