Neue Version wurde eingecheckt.
Ich habe im Perlmodus die Option eingebaut, dass man mehrere init-Blöcke definieren kann. Ein init-Block wird automatisch beim Hochfahren des Systems ausgeführt oder unmittelbar nach der Definition eines DOIF-Devices. Damit lassen sich Templates erstellen, die alle einen eigenen init-Block brauchen.
D.h. wenn ein Block init heißt oder neuerdings mit init_ beginnt, so wird er wie ober beschrieben zusätzlich ausgeführt.
Hier ein Beispiel mit dem neuen Feature, wie man bei einem fortlaufenden Zähler, wie bei Strom, Wasser, Gas eine Tages-, Monats- und Jahresstatistik erstellen kann (die vorhanden Module zu dem Thema haben mir nicht zugesagt).
defmod di_counter DOIF DEF TPL_stat (midnight_$1_$2 { [00:01];;\
set_Reading("$1_$2_counter",[?$1:$2]);;\
set_Reading("$1_$2_last_day",get_Reading("$1_$2_day",0),1);;\
set_Reading("$1_$2_day",0,1);;\
set_Reading("$1_$2_month",get_Reading("$1_$2_month",0)+get_Reading("$1_$2_last_day",0),1);;\
if ($mday == 1) {\
set_Reading("$1_$2_last_month",get_Reading("$1_$2_month",0),1);;\
set_Reading("$1_$2_month",0,1);;\
set_Reading("$1_$2_year",get_Reading("$1_$2_year",0)+get_Reading("$1_$2_last_month",0),1);;\
}\
if ($yday == 1) {\
set_Reading("$1_$2_last_year",get_Reading("$1_$2_year",0),1);;\
set_Reading("$1_$2_year",0,1);;\
}\
}\
\
day_count_$1_$2 {set_Reading ("$1_$2_day",int(([$1:$2,0]-get_Reading("$1_$2_counter",0))*1000)/1000,1);;}\
\
init_$1_$2 {\
set_Reading("$1_$2_counter",[?$1:$2]) if (!get_Reading("$1_$2_counter",""));;\
}\
\
)\
TPL_stat (Stromzaehler,total_c)\
TPL_stat (Stromzaehler,total_f)\
TPL_stat (CUL_WZ,total)
Ein Zähler wird einfach mit TPL_stat (<device>,<reading>) angegeben. Im obigen Beispiel wurden drei Zähler definiert.
Damit kann man Tages-, Monats- oder Jahres-Verbräuche loggen oder in card darstellen, siehe Anhang: