FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Hackstall am 05 Januar 2022, 22:10:08

Titel: Datum von Reading modifizieren
Beitrag von: Hackstall am 05 Januar 2022, 22:10:08
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
Titel: Antw:Datum von Reading modifizieren
Beitrag von: Frank_Huber am 05 Januar 2022, 22:19:45
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....
Titel: Antw:Datum von Reading modifizieren
Beitrag von: Hackstall am 06 Januar 2022, 17:38:53
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
Titel: Antw:Datum von Reading modifizieren
Beitrag von: betateilchen am 06 Januar 2022, 17:41:03
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.
Titel: Antw:Datum von Reading modifizieren
Beitrag von: Hackstall am 06 Januar 2022, 19:38:54
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



Titel: Antw:Datum von Reading modifizieren
Beitrag von: betateilchen am 06 Januar 2022, 20:14:48
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.
Titel: Antw:Datum von Reading modifizieren
Beitrag 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
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
Titel: Antw:Datum von Reading modifizieren
Beitrag von: frank am 06 Januar 2022, 22:36:49
ich würde mit logproxy einfach den plot verschieben.
Titel: Antw:Datum von Reading modifizieren
Beitrag von: locodriver am 07 Januar 2022, 12:56:42
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.
Titel: Antw:Datum von Reading modifizieren
Beitrag von: Sany am 07 Januar 2022, 15:12:05
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
Titel: Antw:Datum von Reading modifizieren
Beitrag von: locodriver am 07 Januar 2022, 17:58:25
Danke Sany, das ging ja schnell...

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

Schönes Wochenende.
Titel: Antw:Datum von Reading modifizieren
Beitrag von: locodriver am 21 Januar 2022, 17:41:36
@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.
Titel: Antw:Datum von Reading modifizieren
Beitrag von: Sany am 22 Januar 2022, 16:30:52
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
Titel: Antw:Datum von Reading modifizieren
Beitrag von: locodriver am 23 Januar 2022, 16:14:30
Ja, funzt... :)
Titel: Antw:Datum von Reading modifizieren
Beitrag von: locodriver am 24 Januar 2022, 11:48:33
... 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!
Titel: Antw:Datum von Reading modifizieren
Beitrag von: locodriver am 24 Januar 2022, 15:50:20
Ich glaube, ich habe die Ursache gefunden...

Im Block "vol{\..." müssen die doppelten durch einfache Anführungszeichen ersetzt werden, außerdem habe ich das "$SELF" durch "ZaehlerInput" ersetzt.

Ergebnis:

fhem ('setreading ZaehlerInput '.$_tmeSpec.' Volume '.get_Reading("V_Now"),1);
fhem ('setreading ZaehlerInput '.$_tmeSpec.' VolumeMonthly2359 '.(get_Reading("V_Now")-get_Reading("V_Last")),1);


Der Code ist schon etwas für mich angepasst und erweitert...

Da ich noch weitere Werte erfassen will, habe ich noch eine Frage:

Wie kann man die einzelnen Blöcke nebeneinander darstellen, damit die Eingabemaske nicht zu "lang" wird?
Titel: Antw:Datum von Reading modifizieren
Beitrag von: Sany am 24 Januar 2022, 18:08:31
ZitatWie kann man die einzelnen Blöcke nebeneinander darstellen, damit die Eingabemaske nicht zu "lang" wird?
Das ist ui_Table von DOIF. Wenn Du dir die letzten 4 Zeilen anschaust: zwischen Zeile 1und 2 sowie zwischen 3 und 4 ist ein Komma, das macht einen Zeilenumbruch, beide Informationen stehen in einer Zelle. Keine Angabe hinter einer Zeile sorgt für eine neue (Tabellen)zeile.
Wenn Du da, also zwischen der 2 und 3 statt nix ein | (Pipesymbol) einfügst dann stehen Zeile 3 und 4 in der Zelle rechts von der Zelle mit 1 und 2. Ich glaube, das ist das, was Du vorhast.
Weitere Details:
https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Die_Tabellendefinition (https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Die_Tabellendefinition)

viel Erfolg!


Sany
Titel: Antw:Datum von Reading modifizieren
Beitrag von: locodriver am 27 Januar 2022, 17:10:05
@Sany: Genau - das ist die Lösung... Da ich sieben Werte eintragen möchte, habe ich jetzt vier Zeilen mit je zwei Werten.

Danke für den Tipp!