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
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....
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
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.
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
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.
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
ich würde mit logproxy einfach den plot verschieben.
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.
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
Danke Sany, das ging ja schnell...
Das erfüllt in etwa meine Anforderungen, wenn Zeit ist, werde ich es adaptieren...
Schönes Wochenende.
@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.
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
Ja, funzt... :)
... 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!
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?
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
@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!