Stromverbrauch anzeigen mit Doif

Begonnen von Franz Tenbrock, 27 November 2022, 16:41:39

Vorheriges Thema - Nächstes Thema

Franz Tenbrock

nächster Schritt
und wieder was gelernt
setzen der readings :
setreading di_counter_new  MQTT2_HeishaMon.WatthourTotal_1.last_counter 219000

Umrechnung in KWh leider noch ohneFormatierung auf 2 Stellen (alles schon probier ?! )
attr valueFormat {(my $NewValue = $VALUE / 1000)}
und mit
attr valueSuffix ..KWh

dann wollen wir mal schauen ob ich das mit den cards auch schaffe
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Franz Tenbrock

#16
das ging ja rucki zucki
keine Ahnung ob das stimmt, wird sich dann die Tage zeigen,
aber so ganz verkehrt sieht es nicht aus
8)
und da ich immer noch ganz gerne in der FHEM.cfg rum schreibe, hat hier ja auch wieder geklappt der code (Damians abgewandelter Code für meine Panasonic WP mit Heishamon ) für alle

####################################################################################
#############               di_counter_new
####################################################################################

define di_counter_new DOIF subs {\
##                     Device        Reading   \
  push (@{$_counter},["MQTT2_HeishaMon","WatthourTotal_1"]);; ## WP_Zähler\
  push (@{$_counter},["MQTT2_HeishaMon","Watt_1"]);; ## WP_Zähler akut \
  \
sub midnight { ## Diese Funktion wird um Mitternacht ausgeführt\
  my ($device,$reading,$mday,$yday)=@_;;\
  set_Reading("$device.$reading.day_counter",ReadingsVal($device, $reading,1));;   \
  set_Reading("$device.$reading.last_day",get_Reading("$device.$reading.day",0),1);;\
  set_Reading("$device.$reading.day",0,1);;\
  set_Reading ("$device.$reading.month",int((ReadingsVal($device, $reading,0)-(get_Reading("$device.$reading.month_counter",0)))*1000)/1000,1);;\
  set_Reading ("$device.$reading.year",int((ReadingsVal($device, $reading,0)-(get_Reading("$device.$reading.year_counter",0)))*1000)/1000,1);;\
\
  if ($mday == 1) {\
    set_Reading("$device.$reading.month_counter",ReadingsVal($device, $reading,0));;\
    set_Reading("$device.$reading.last_month",get_Reading("$device.$reading.month",0),1);;\
    set_Reading("$device.$reading.month",0,1);;\
  }\
  if ($yday == 1) {\
    set_Reading("$device.$reading.year_counter",ReadingsVal($device, $reading,0));;\
    set_Reading("$device.$reading.last_year",get_Reading("$device.$reading.year",0),1);;\
    set_Reading("$device.$reading.year",0,1);;\
  }\
}\
\
sub init_readings {\
  my ($device,$reading)=@_;;\
  if (get_Reading("$device.$reading.day_counter","") eq "") {   ## Initialisierung der Readings\
    ## aktuellen Zählerstand initialisieren\
    set_Reading("$device.$reading.last_counter",ReadingsVal($device, $reading,0));;\
    set_Reading("$device.$reading.day_counter",ReadingsVal($device, $reading,0));; \
    set_Reading("$device.$reading.month_counter",ReadingsVal($device, $reading,0));;\
    set_Reading("$device.$reading.year_counter",ReadingsVal($device, $reading,0));;\
  \
    set_Reading ("$device.$reading.day",0);;           ## aktueller Tagesverbrauch\
    set_Reading ("$device.$reading.month",0);;         ## aktueller Monatsverbrauch\
    set_Reading ("$device.$reading.year",0);;          ## aktueller Jahresverbrauch\
    set_Reading ("$device.$reading.last_day",0);;      ## Verbrauch des letzten Tages\
    set_Reading ("$device.$reading.last_month",0);;    ## Verbrauch des letzten Monats\
    set_Reading ("$device.$reading.last_year",0);;     ## Verbrauch des letzten Jahres\
## Log definieren\
fhem ("defmod log.counter.$device.$reading FileLog ./log/counter.$device.$reading.log $SELF:$device.$reading.(last_(day|month|year)|(day|month)_counter):.*");;\
    fhem ("attr log.counter.$device.$reading room Filelogs");;\
## Tasmota-Zähler setzen: set MQTT2_FHEM_Server publish cmnd/tasmota_C58DCB/Counter1 <Zählerstand>\
}\
\
}\
} ## Ende subs-Block\
\
mid {[00:01];;                          ## Sicherung der Daten um Mitternacht\
  for (my $i=0;;$i<@{$_counter};;$i++) { ## Für jeden Zähler wird die Funktion midnight aufgerufen\
    midnight($_counter[$i][0],$_counter[$i][1],$mday,$yday);;\
  }\
}\
\
init {                                ## initialisierung aller Readings\
  for (my $i=0;;$i<@{$_counter};;$i++) {## Für jeden Zähler werden Readings über die Funktion init_readings initialisiert\
    init_readings($_counter[$i][0],$_counter[$i][1]);;\
  }\
}\
\
DEF TPL_stat (\
  day_count_$1_$2 { ## bei einem Event des Zählers, wird der tägliche, monatliche und jährliche Verbrauch im jeweiligen Reading festgehalten\
                    ##  $1 Zählerdevice, $2 Zählerreading\
\
    my $diff = int(([$1:$2,0]-(get_Reading("$1.$2.last_counter",0)))*1000)/1000;;\
    ##if ($diff < 0 and get_Reading("$1.$2.last_counter",0) > 0  or $diff > 0 and get_Reading("$1.$2.last_counter",0) < 0) {  ## Wenn der Zähler zurückgesetzt wurde, dann Zählerstände zurückrechnen\
    ##  set_Reading("$1.$2.day_counter",-(get_Reading("$1.$2.day",0)));;\
    ##  set_Reading("$1.$2.month_counter",-(get_Reading("$1.$2.month",0)));;\
    ##  set_Reading("$1.$2.year_counter",-(get_Reading("$1.$2.year",0)));;\
   ## } else {\
      set_Reading ("$1.$2.last_counter",[$1:$2,0]);;\
      set_Reading ("$1.$2.day",int(([$1:$2,0]-(get_Reading("$1.$2.day_counter",0)))*1000)/1000,1);;\
      set_Reading ("$1.$2.month",int(([$1:$2,0]-(get_Reading("$1.$2.month_counter",0)))*1000)/1000,1);;\
      set_Reading ("$1.$2.year",int(([$1:$2,0]-(get_Reading("$1.$2.year_counter",0)))*1000)/1000,1);;\
}\
  ##}\
)\
\
\
\
## Pro Zähler wird über eine FOR-Schleife ein day_count_<Device>_<Reading>-Block generiert\
FOR(@{$_counter},TPL_stat($1$1,$1$2)) ## $1$1 entspricht dem Device, $1$2 entspricht dem Reading
setuuid di_counter_new 638280e4-f33f-132e-6f6c-3dd45d996808d19e
attr di_counter_new room A_Test

########################### Cards  ######################

attr di_counter_new uiTable {package ui_Table;;$ANIMATE=0} ## Optionale Visualisierung der Energie-Verbräuche/-Produktion im DOIF-Device\
card([[di_counter_new:MQTT2_HeishaMon.WatthourTotal_1:col1w],[di_counter_new:MQTT2_HeishaMon.WatthourTotal_1:col1w]],"Elektrizität Tagesverlauf in KWh",undef,-10,25,0,90,["Ertrag","Bezug"],undef,"1","130,1,1,0,1,,200","0,0,0,0,2")|\
card([[di_counter_new:MQTT2_HeishaMon.WatthourTotal_1.last_day:col4w],[di_counter_new:MQTT2_HeishaMon.WatthourTotal_1.last_day:col4w]],"Elektrizität in kWh pro Tag",undef,-10,25,0,90,["Ertrag","Bezug"],undef,"1","130,1,1,0,1,0,180","0,0,0,0,2")|\
card([[di_counter_new:MQTT2_HeishaMon.WatthourTotal_1.last_month:col365d],[di_counter_new:MQTT2_HeishaMon.WatthourTotal_1.last_month:col365d]],"Elektrizität in kWh pro Monat",undef,-200,400,0,90,["Ertrag","Bezug"],undef,"0","130,1,1,0,1,0,180","0,0,0,0,2")\

#######################################################################################
##################                   WP Readingsgroup
#######################################################################################

define WP_Gesamt readingsGroup MQTT2_HeishaMon.*:,<aktueller_Wert:>,Watt_1,\
di_counter_new:,<heute:>,MQTT2_HeishaMon.WatthourTotal_1.day\
di_counter_new:,<gestern:>,MQTT2_HeishaMon.WatthourTotal_1.last_day\
di_counter_new:,<vorgestern:>,MQTT2_HeishaMon.WatthourTotal_1.day_counter\
di_counter_new:,<Monat:>,MQTT2_HeishaMon.WatthourTotal_1.month_counter\
di_counter_new:,<Vor_Monat:>,MQTT2_HeishaMon.WatthourTotal_1.last_month\
di_counter_new:,<Jahr:>,MQTT2_HeishaMon.WatthourTotal_1.last_counter
setuuid WP_Gesamt 6384d326-f33f-132e-a30a-7ef8a8912fc51214
attr WP_Gesamt group Wärmepumpe
attr WP_Gesamt mapping &nbsp
attr WP_Gesamt room A_Test
attr WP_Gesamt valueFormat {(my $NewValue = $VALUE / 1000)}
attr WP_Gesamt valueStyle style="text-align:right"
attr WP_Gesamt valueSuffix ..KWh


Bild vergessen
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi