Datum von Reading modifizieren

Begonnen von Hackstall, 05 Januar 2022, 22:10:08

Vorheriges Thema - Nächstes Thema

Hackstall

Hallo,

Kurze Frage:

Kann man das Datum eines Readings aendern.
Ich fuehre ein Reading lastWeek und wuerde gerne
den Wert am Ende einer Woche auf das Datum Anfang
Woche aendern. Ich benoetige diese fuer die Darstellung
eines weekly Bargraphes .
Danke Andreas

Frank_Huber

Schau dir mal in einer RAW DEF die setstate Kommandos an.
Damit sollte es gehen.

Auch wenn ich den Sinn dahinter nicht verstehe was du vorhast....

Hackstall

Sorry aber verstehe ich nicht ganz was Du meinst.

Also ich würde gern ein Jahresbalkendiagramm darstellen.
Es wird immer am Monatsanfang der Verbrauchswert des Vormonats berechnet.

Diesen würde ich gerne als datieren auf Monatsanfang damit der Verbrauchsmonat dem richtigen Monat
zugeordnet wird und nicht dem Berechnungsmonat.

Danke Andreas

betateilchen

Zitat von: Hackstall am 06 Januar 2022, 17:38:53
Sorry aber verstehe ich nicht ganz was Du meinst.

Deine Fragestellung ist auch ziemlich unklar.
Mach doch mal ein list des devices, in dem man die Readings sehen kann und beschreibe dann in dem List, was Du gerne wo stehen haben möchtest.

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

Hackstall

Gerne also
ich möchte folgendes Reading (siehe unten List)

2022-01-01 00:00:01   IP_S0_Zaehler_IP_S0_Z_15_EnergyMonthLast 5075.557

auf das Datum 2021-12-01 setzen so das es folgendermassen aussieht:

2021-12-01 00:00:01   IP_S0_Zaehler_IP_S0_Z_15_EnergyMonthLast 5075.557

Gruss Andreas



Internals:
   DEF        IP_S0_Zaehler:IP_S0_Z_15.*
   FUUID      608ee341-f33f-7267-025d-fb21152a5a84a31d
   NAME       GasVerb_GC
   NOTIFYDEV  IP_S0_Zaehler
   NR         274
   NTFY_ORDER 10-GasVerb_GC
   REGEXP     IP_S0_Zaehler:IP_S0_Z_15.*
   STATE      active
   TYPE       GasCalculator
   READINGS:
     2022-01-06 19:00:00   CounterHourLast 57156.380
     2022-01-02 01:00:00   CounterWeek1st  57082.420
     2022-01-06 19:00:00   EnergyCostWeek  38.2787790175995
     2022-01-02 01:00:00   EnergyCostWeekLast 52.687665007998
     2022-01-06 19:00:00   EnergyHourLast  0
     2022-01-06 19:00:00   EnergyWeek      753.519271999991
     2022-01-02 01:00:00   EnergyWeekLast  1037.15875999996
     2022-01-06 19:35:26   IP_S0_Zaehler_IP_S0_Z_15_EnergyCostDay 7.365
     2022-01-06 00:00:01   IP_S0_Zaehler_IP_S0_Z_15_EnergyCostDayLast 5.947
     2022-01-06 19:35:26   IP_S0_Zaehler_IP_S0_Z_15_EnergyCostMeter 303.979
     2021-12-01 00:00:01   IP_S0_Zaehler_IP_S0_Z_15_EnergyCostMeterLast 663.347
     2022-01-06 19:35:26   IP_S0_Zaehler_IP_S0_Z_15_EnergyCostMonth 46.141
     2022-01-01 00:00:01   IP_S0_Zaehler_IP_S0_Z_15_EnergyCostMonthLast 257.838
     2022-01-06 19:35:26   IP_S0_Zaehler_IP_S0_Z_15_EnergyCostYear 46.141
     2022-01-01 00:00:01   IP_S0_Zaehler_IP_S0_Z_15_EnergyCostYearLast 921.185
     2022-01-06 19:35:26   IP_S0_Zaehler_IP_S0_Z_15_EnergyDay 144.978
     2022-01-06 00:00:01   IP_S0_Zaehler_IP_S0_Z_15_EnergyDayLast 117.062
     2022-01-06 19:35:26   IP_S0_Zaehler_IP_S0_Z_15_EnergyMeter 5983.836
     2021-12-01 00:00:01   IP_S0_Zaehler_IP_S0_Z_15_EnergyMeterLast 13058.012
     2022-01-06 19:35:26   IP_S0_Zaehler_IP_S0_Z_15_EnergyMonth 908.278
     2022-01-01 00:00:01   IP_S0_Zaehler_IP_S0_Z_15_EnergyMonthLast 5075.557
     2022-01-06 19:35:26   IP_S0_Zaehler_IP_S0_Z_15_EnergyYear 908.278
     2022-01-01 00:00:01   IP_S0_Zaehler_IP_S0_Z_15_EnergyYearLast 18133.570
     2022-01-06 19:35:26   IP_S0_Zaehler_IP_S0_Z_15_FinanceReserve -45.979
     2022-01-06 19:35:26   IP_S0_Zaehler_IP_S0_Z_15_Meter 57156.380
     2022-01-06 19:35:26   IP_S0_Zaehler_IP_S0_Z_15_MonthMeterReading 2
     2022-01-06 19:35:26   IP_S0_Zaehler_IP_S0_Z_15_PowerCurrent 0.000
     2022-01-06 19:35:26   IP_S0_Zaehler_IP_S0_Z_15_PowerDayAver 0.007
     2022-01-06 04:57:26   IP_S0_Zaehler_IP_S0_Z_15_PowerDayMax 0.049
     2022-01-06 00:00:01   IP_S0_Zaehler_IP_S0_Z_15_PowerDayMin 0.000
     2022-01-06 00:00:01   IP_S0_Zaehler_IP_S0_Z_15_Vol1stDay 57142.15
     2021-12-01 00:00:01   IP_S0_Zaehler_IP_S0_Z_15_Vol1stMeter 56569.050
     2022-01-01 00:00:01   IP_S0_Zaehler_IP_S0_Z_15_Vol1stMonth 57067.230
     2022-01-01 00:00:01   IP_S0_Zaehler_IP_S0_Z_15_Vol1stYear 57067.230
     2022-01-06 00:00:01   IP_S0_Zaehler_IP_S0_Z_15_VolLastDay 57142.150
     2021-12-01 00:00:01   IP_S0_Zaehler_IP_S0_Z_15_VolLastMeter 56569.050
     2022-01-01 00:00:01   IP_S0_Zaehler_IP_S0_Z_15_VolLastMonth 57067.230
     2022-01-01 00:00:01   IP_S0_Zaehler_IP_S0_Z_15_VolLastYear 57067.230
     2021-05-05 17:42:22   IP_S0_Zaehler_IP_S0_Z_15_WFRDayMax 0
     2021-05-05 17:42:22   IP_S0_Zaehler_IP_S0_Z_15_WFRDayMin 0
     2022-01-06 19:35:00   VerbrauchDay    14.2299999999959
     2022-01-05 23:59:00   VerbrauchLastDay 11.489999999998
     2021-06-06 16:40:00   VolumeDay       0
   system:
     DecimalPlace %.3f
     SiPrefixPowerFactor 1000
Attributes:
   BasicPricePerAnnum 0.00
   Currency   €
   DecimalPlace 3
   GasCounterOffset 0
   GasCubicPerCounts 0.01
   GasNominalHeatingValue 11,274
   GasPricePerKWh 0.0508
   GaszValue  0.9262
   MonthOfAnnualReading 12
   MonthlyPayment 129.00
   ReadingDestination CalculatorDevice
   SiPrefixPower kW
   Volume     m³
   disable    0
   room       Statistic




betateilchen

auch wenn das Vorhaben für mich überhaupt keinen Sinn macht, da ich der Meinung bin, man sollte eine solche Aufgabe eher mit Logik lösen statt mit der Brechstange...

setstate GasVerb_GC 2021-12-01 00:00:01 IP_S0_Zaehler_IP_S0_Z_15_EnergyMonthLast 5075.557

Genau dieser Weg wurde Dir weiter oben schon vorgeschlagen:

Zitat von: Frank_Huber am 05 Januar 2022, 22:19:45
Schau dir mal in einer RAW DEF die setstate Kommandos an.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Sany

Hi,

ich mache etwas ähnliches: Den Wärmemengenzähler an der Fernwärmestation kann ich (noch?) nicht automatisiert auslesen, deshalb gehe ich am Monatanfang in den Keller und lese den im Zähler gespeicherten Vormonatswert aus. Den tippe ich dann in mein DOIF, welches den Tagesletzen des Vormonats errechnet und dann mittes
Zitatsetreading $SELF <YYYY-MM-(Monatsletzter) 23:59:55 Zaehlerreading Wert
den Wert in ein Reading im DOIF schreibt. Es wird dabei ein Event erzeugt und das Reading gelogged, daraus wird dann ein Plot über 14Monate erstellt, welcher mir schön den Monatsverbrauch an Wärme zeigt.
Also, einfach gesprochen: mit setreading kannst Du ein Timespec mitgeben, welches dann im Log/db erscheint.

Zitatsetreading

    setreading <devspec> [YYYY-MM-DD HH:MM:SS] <reading> <value>
...
Falls keine Zeit spezifiziert wurde, wird die aktuelle Uhrzeit verwendet.

Gruß

Sany
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

frank

ich würde mit logproxy einfach den plot verschieben.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

locodriver

Zitat von: Sany am 06 Januar 2022, 21:52:21
Hi,

ich mache etwas ähnliches: Den Wärmemengenzähler an der Fernwärmestation kann ich (noch?) nicht automatisiert auslesen, deshalb gehe ich am Monatanfang in den Keller und lese den im Zähler gespeicherten Vormonatswert aus. Den tippe ich dann in mein DOIF, welches den Tagesletzen des Vormonats errechnet und dann mittes  den Wert in ein Reading im DOIF schreibt. Es wird dabei ein Event erzeugt und das Reading gelogged, daraus wird dann ein Plot über 14Monate erstellt, welcher mir schön den Monatsverbrauch an Wärme zeigt.
Also, einfach gesprochen: mit setreading kannst Du ein Timespec mitgeben, welches dann im Log/db erscheint.

Gruß

Sany

Kannst du mal bitte das komplette DOIF posten?

Dankeschön.
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

Sany

Gerne:
(das Ganze per Raw-Input und execute)
defmod WaermemengenzaehlerInput DOIF init{\
## wenn nicht schon für andere Module installiert: das Perl-Modul DateTime muss vorhanden sein\
## sudo apt install libdatetime-perl\
\
## das 'use DateTime' war nur auf einem neu aufgesetzten fhem notwendig. In meiner Produktivumgebung steht das nicht im init des DOIF.\
## Das DateTime wird von verschiedenen Modulen verwendet und war wohl schon installiert.\
   use DateTime;;\
}\
\
subs{\
\
}\
\
waerme{\
if([$SELF:"W_New"]){\
set_Reading ("W_Last",get_Reading("W_Now"));;\
set_Reading ("W_Now",get_Reading("W_New"));;\
\
$_lastDayOfLastMonth = ::DateTime->last_day_of_month({\
   year  => $year ,\
   month => ($month == 1)? 12 : $month -1\
})->ymd('-');;\
$_tmeSpec = $_lastDayOfLastMonth.' 23:59:55';;\
\
\
fhem ('setreading WaermemengenzaehlerInput '.$_tmeSpec.' Waerme '.get_Reading("W_Now"),1);;\
fhem ('setreading WaermemengenzaehlerInput '.$_tmeSpec.' WaermeMonthly2359 '.(get_Reading("W_Now")-get_Reading("W_Last")),1);;\
}\
\
}\
vol{\
if([$SELF:"v_New"]){\
set_Reading ("v_Last",get_Reading("v_Now"));;\
set_Reading ("v_Now",get_Reading("v_New"));;\
\
$_lastDayOfLastMonth = ::DateTime->last_day_of_month({\
   year  => $year ,\
   month => ($month == 1)? 12 : $month -1\
})->ymd('-');;\
$_tmeSpec = $_lastDayOfLastMonth.' 23:59:55';;\
\
\
fhem ("setreading $SELF ".$_tmeSpec.' volume '.get_Reading("v_Now"),1);;\
fhem ("setreading $SELF ".$_tmeSpec.' volumeMonthly2359 '.(get_Reading("v_Now")-get_Reading("v_Last")),1);;\
}\
\
}
attr WaermemengenzaehlerInput event-on-change-reading Waerme.*,volume.*,W_New,v_New
attr WaermemengenzaehlerInput room DOIF_UI
attr WaermemengenzaehlerInput uiTable {\
package ui_Table;; \
##$SHOWNOSTATE=1;;\
##$SHOWNODEVICELINK=1;;\
\
\
}\
\
"Wärmemengenzähler im Keller auslesen:"\
"monatlich, in den ersten Tagen."\
"Werte für Wärme und volume eingeben"\
"(neben das Feld klicken zur Übernahme)"\
"letzte Werte werden zwischengespeichert,"\
"neue Werte geschrieben"\
"sowie die Differenzen zu den letzten Werten,"\
"mit Zeitpunkt Monatsletzter um 23:59:55"<\
"Wärme(MWh)",widget([$SELF:W_New],"textFieldNL"),\
"Wärme old ".style([$SELF:Waerme],"green","12")\
"volume",widget([$SELF:v_New],"textFieldNL"),\
"volume old ".style([$SELF:volume],"green","12")


Ich habs gerade auf einem "neuerlich" aufgestzten Testfhem ausprobiert. Die Voraussetzungen stehen am Anfang im init (Perlmodul DateTime ist required).
Dann schau Dir den Code in Ruhe an, bevor Du ihn einbaust. Das DOIF mach nix anderes, als einen, in eines der Felder eingegebenen, Wert in ein Reading zu schreiben, vorher den vorhandenen in ein old_Wert-Reading zu sichern und dann den Wert sowie die Differenz aus Neu und Alt in ein Reading zu schreiben. Das jeweils hier für Wärme und volume. Hast Du nur einen Wert dann kannst Du den übrigen Block rausnehmen.
Wenn Du mehrfach Werte eingibst wird das DOIF jedesmal ausgeführt und bei vorhandenem Logdevice auch die Werte gelogged, aber immer mit der gleichen Timespec!
Zum Test und verstehen ist das ok, wenn es klar ist dann ein FileLog auf dieses DOIF oder ein DBlog, was alles mitschreibt oder explizit das DOIF eingetragen hat.

Gruß

Sany
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

locodriver

Danke Sany, das ging ja schnell...

Das erfüllt in etwa meine Anforderungen, wenn Zeit ist, werde ich es adaptieren...

Schönes Wochenende.
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

locodriver

@sani: Heute hatte ich Zeit, deinen code zu testen. Er funzt soweit gut und passt auf meine Situation.

Allerdings ist wohl noch ein Fehler drin, beim Jahreswechsel wird das Jahr nicht korrigiert. Z.B. wird im Januar 2022 dann der 31.12.2022 anstelle des 31.12.2021 als Datum errechnet.
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

Sany

#12
da hast du recht.
die Zeile:
year  => $year ,

müsste dann wohl so aussehen:
year => ($month == 1)? $year - 1 : $year ,
(ungetestet, sollte aber gehen) getestet: funktioniert

Gruß

Sany
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

locodriver

fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

locodriver

#14
... aber ich bekomme noch eine Warnung bei der Eingabe des durchgeflossenen Volumens:

condition c03: Argument "" isn't numeric in subtraction (-)

Erst habe ich vermutet, dass es an Dezimalzahlen liegt, aber auch bei Eingabe einer ganzen Zahl kommt die Warnung.

Meine Def. sieht so aus:

Internals:
   DEF        init{
## wenn nicht schon für andere Module installiert: das Perl-Modul DateTime muss vorhanden sein
## sudo apt install libdatetime-perl

## das 'use DateTime' war nur auf einem neu aufgesetzten fhem notwendig. In meiner Produktivumgebung steht das nicht im init des DOIF.
## Das DateTime wird von verschiedenen Modulen verwendet und war wohl schon installiert.
   use DateTime;
}

subs{

}

waerme{
if([$SELF:"W_New"]){
set_Reading ("W_Last",get_Reading("W_Now"));
set_Reading ("W_Now",get_Reading("W_New"));

$_lastDayOfLastMonth = ::DateTime->last_day_of_month({
   year => ($month == 1)? $year -1 : $year ,
   month => ($month == 1)? 12 : $month -1
})->ymd('-');
$_tmeSpec = $_lastDayOfLastMonth.' 23:59:55';


fhem ('setreading WaermemengenzaehlerInput '.$_tmeSpec.' Waerme '.get_Reading("W_Now"),1);
fhem ('setreading WaermemengenzaehlerInput '.$_tmeSpec.' WaermeMonthly2359 '.(get_Reading("W_Now")-get_Reading("W_Last")),1);
}

}
vol{
if([$SELF:"v_New"]){
set_Reading ("v_Last",get_Reading("v_Now"));
set_Reading ("v_Now",get_Reading("v_New"));

$_lastDayOfLastMonth = ::DateTime->last_day_of_month({
   year => ($month == 1)? $year -1 : $year ,
   month => ($month == 1)? 12 : $month -1
})->ymd('-');
$_tmeSpec = $_lastDayOfLastMonth.' 23:59:55';


fhem ("setreading $SELF ".$_tmeSpec.' volume '.get_Reading("v_Now"),1);
fhem ("setreading $SELF ".$_tmeSpec.' volumeMonthly2359 '.(get_Reading("v_Now")-get_Reading("v_Last")),1);
}

}
   FUUID      61eade64-f33f-b425-2cb9-a8d7714120a262b1
   MODEL      Perl
   NAME       WaermemengenzaehlerInput
   NOTIFYDEV  global,WaermemengenzaehlerInput
   NR         1068
   NTFY_ORDER 50-WaermemengenzaehlerInput
   STATE      initialized
   TYPE       DOIF
   VERSION    25386 2021-12-28 22:19:25
   OLDREADINGS:
   READINGS:
     2022-01-23 16:18:57   W_Last         
     2022-01-23 16:18:57   W_New           5203
     2022-01-23 16:18:57   W_Now           5203
     2021-12-31 23:59:55   Waerme          5203
     2021-12-31 23:59:55   WaermeMonthly2359 5203
     2022-01-23 16:18:26   block_init      executed
     2022-01-24 11:40:51   block_vol       executed
     2022-01-24 11:40:51   block_waerme    executed
     2022-01-24 11:40:51   e_WaermemengenzaehlerInput_events v_New: 9
     2022-01-23 16:18:26   mode            enabled
     2022-01-23 16:18:26   state           initialized
     2022-01-24 11:40:51   v_Last         
     2022-01-24 11:40:51   v_New           9
     2022-01-24 11:40:51   v_Now           9
     2021-12-31 23:59:55   volume          9
     2021-12-31 23:59:55   volumeMonthly2359 9
     2022-01-24 11:40:51   warning         condition c03: Argument "" isn't numeric in subtraction (-)

   Regex:
     accu:
     collect:
     cond:
       WaermemengenzaehlerInput:
         0:
         1:
           &STATE     ^WaermemengenzaehlerInput$
         2:
           &STATE     ^WaermemengenzaehlerInput$
     uiTable:
       WaermemengenzaehlerInput:
         WaermemengenzaehlerInput_uiTable_c_8_0_1_0:
           W_New      ^WaermemengenzaehlerInput$:^W_New:
         WaermemengenzaehlerInput_uiTable_c_8_0_2_1:
           Waerme     ^WaermemengenzaehlerInput$:^Waerme:
         WaermemengenzaehlerInput_uiTable_c_9_0_1_0:
           v_New      ^WaermemengenzaehlerInput$:^v_New:
         WaermemengenzaehlerInput_uiTable_c_9_0_2_1:
           volume     ^WaermemengenzaehlerInput$:^volume:
   condition:
     0         
 
     use DateTime;

     1         
if(::EventDoIf('WaermemengenzaehlerInput',$hash,'W_New',1)){
set_Reading ("W_Last",get_Reading("W_Now"));
set_Reading ("W_Now",get_Reading("W_New"));

$hash->{var}{lastDayOfLastMonth} = ::DateTime->last_day_of_month({
   year => ($month == 1)? $year -1 : $year ,
   month => ($month == 1)? 12 : $month -1
})->ymd('-');
$hash->{var}{tmeSpec} = $hash->{var}{lastDayOfLastMonth}.' 23:59:55';


fhem ('setreading WaermemengenzaehlerInput '.$hash->{var}{tmeSpec}.' Waerme '.get_Reading("W_Now"),1);
fhem ('setreading WaermemengenzaehlerInput '.$hash->{var}{tmeSpec}.' WaermeMonthly2359 '.(get_Reading("W_Now")-get_Reading("W_Last")),1);
}


     2         
if(::EventDoIf('WaermemengenzaehlerInput',$hash,'v_New',1)){
set_Reading ("v_Last",get_Reading("v_Now"));
set_Reading ("v_Now",get_Reading("v_New"));

$hash->{var}{lastDayOfLastMonth} = ::DateTime->last_day_of_month({
   year => ($month == 1)? $year -1 : $year ,
   month => ($month == 1)? 12 : $month -1
})->ymd('-');
$hash->{var}{tmeSpec} = $hash->{var}{lastDayOfLastMonth}.' 23:59:55';


fhem ("setreading WaermemengenzaehlerInput ".$hash->{var}{tmeSpec}.' volume '.get_Reading("v_Now"),1);
fhem ("setreading WaermemengenzaehlerInput ".$hash->{var}{tmeSpec}.' volumeMonthly2359 '.(get_Reading("v_Now")-get_Reading("v_Last")),1);
}


   helper:
     DEVFILTER  ^global$|^WaermemengenzaehlerInput$
     NOTIFYDEV  global|WaermemengenzaehlerInput
     event      v_New: 9
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev WaermemengenzaehlerInput
     triggerEvents:
       v_New: 9
       volume: 9
       volumeMonthly2359: 9
     triggerEventsState:
       v_New: 9
       volume: 9
       volumeMonthly2359: 9
   internals:
   perlblock:
     0          init
     1          waerme
     2          vol
     init       0
   readings:
   trigger:
     all         WaermemengenzaehlerInput
   uiState:
   uiTable:
     dev        WaermemengenzaehlerInput
     header     
<table uitabid='DOIF-WaermemengenzaehlerInput' class=' block wide uiTabledoif doif-WaermemengenzaehlerInput ' style='border-top:none;'>
     package    package ui_Table;
     reading    volume
     table:
       0:
         0:
           0:
             0          package ui_Table;"Wärmemengenzähler monatlich in "
       1:
         0:
           0:
             0          package ui_Table;"den ersten Tagen auslesen:"
       2:
         0:
           0:
             0          package ui_Table;"Werte für Wärmemenge und Volumen eingeben"
       3:
         0:
           0:
             0          package ui_Table;"(neben das Feld klicken zur Übernahme)."
       4:
         0:
           0:
             0          package ui_Table;"Letzte Werte werden zwischengespeichert,"
       5:
         0:
           0:
             0          package ui_Table;"neue Werte geschrieben"
       6:
         0:
           0:
             0          package ui_Table;"sowie die Differenzen zu den letzten Werten,"
       7:
         0:
           0:
             0          package ui_Table;"mit Zeitpunkt Monatsletzter um 23:59:55"
             1          package ui_Table;"</tbody></table>$hash->{uiTable}{header}"
       8:
         0:
           0:
             0          package ui_Table;"Wärme(kWh)"
           1:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'WaermemengenzaehlerInput_uiTable_c_8_0_1_0',widget(::ReadingValDoIf($hash,'WaermemengenzaehlerInput','W_New'),"textFieldNL"),'WaermemengenzaehlerInput','W_New')
           2:
             0          package ui_Table;"Wärme alt "
             1          package ui_Table;::DOIF_Widget($hash,$reg,'WaermemengenzaehlerInput_uiTable_c_8_0_2_1',style(::ReadingValDoIf($hash,'WaermemengenzaehlerInput','Waerme'),"green","12"),"")
       9:
         0:
           0:
             0          package ui_Table;"Volumen"
           1:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'WaermemengenzaehlerInput_uiTable_c_9_0_1_0',widget(::ReadingValDoIf($hash,'WaermemengenzaehlerInput','v_New'),"textFieldNL"),'WaermemengenzaehlerInput','v_New')
           2:
             0          package ui_Table;"Volumen alt "
             1          package ui_Table;::DOIF_Widget($hash,$reg,'WaermemengenzaehlerInput_uiTable_c_9_0_2_1',style(::ReadingValDoIf($hash,'WaermemengenzaehlerInput','volume'),"green","12"),"")
     tc:
     td:
       0:
       1:
       2:
       3:
       4:
       5:
       6:
       7:
       8:
       9:
     tr:
   var:
     lastDayOfLastMonth 2021-12-31
     tmeSpec    2021-12-31 23:59:55
Attributes:
   event-on-change-reading Waerme.*,volume.*,W_New,v_New
   room       Test
   uiTable    {
package ui_Table;
##$SHOWNOSTATE=1;
##$SHOWNODEVICELINK=1;


}

"Wärmemengenzähler monatlich in "
"den ersten Tagen auslesen:"
"Werte für Wärmemenge und Volumen eingeben"
"(neben das Feld klicken zur Übernahme)."
"Letzte Werte werden zwischengespeichert,"
"neue Werte geschrieben"
"sowie die Differenzen zu den letzten Werten,"
"mit Zeitpunkt Monatsletzter um 23:59:55"<
"Wärme(kWh)",widget([$SELF:W_New],"textFieldNL"),
"Wärme alt ".style([$SELF:Waerme],"green","12")
"Volumen",widget([$SELF:v_New],"textFieldNL"),
"Volumen alt ".style([$SELF:volume],"green","12")



Danke!
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster