Hauptmenü

Stromverbrauch per DOIF?

Begonnen von gestein, 14 Februar 2022, 16:47:37

Vorheriges Thema - Nächstes Thema

Roger

Hi Damian,
Wahnsinn was Du da geschaffen hast. Die tolle Grafik. Was für Darstellungsmöglichkeiten.
Allein schon die Doku im Wiki ist überwältigend.  :) :) :)

Eine Kleinigkeit ist mir aufgefallen. Die erzeugten Filelogs haben kein NOTIFYDEV.
Dadurch ist die Performance des Gesamtsystems etwas schlechter.
Ich habe das Regex zu "$SELF:$device.$reading.last_.*" geändert.
Dann wird NOTIFYDEV benutzt und es sollte auch nicht mehr gelogged werden.
Vielleicht kann Du das übernehmen. (Ich verwende auch %L im Pfad, aber das führt vielleicht zu weit.)

Derzeit bin ich gerade dabei historische Werte (Monate, Jahre) zu übernehmen.
Trage die händisch ins Log-File ein und lese sie dann über DOIF_set_card_data ein.

2020-01-01_00:01:00 DoIF_Strom_Statistik PV_Erzeugung_s.Erzeugung.last_year: 5706 kWh
2021-01-01_00:01:00 DoIF_Strom_Statistik PV_Erzeugung_s.Erzeugung.last_year: 6130 kWh
2022-01-01_00:01:00 DoIF_Strom_Statistik PV_Erzeugung_s.Erzeugung.last_year: 5504 kWh
2023-01-01_00:01:00 DoIF_Strom_Statistik PV_Erzeugung_s.Erzeugung.last_year: 6380 kWh

Über get_data habe ich es (noch) nicht hinbekommen.

Gibt es da bessere/einfachere Wege?

//Roger
Zotac & RPIs mit 10*FHEM
2*HM-LAN, 2*JeeLink, 2*RS485, SignalESP
HomeMatic, PCA301 Komponenten, ModBus: Stromzähler, Fronius WR, Shelly, Victron

Damian

#121
Zitat von: Roger am 19 Februar 2023, 11:51:54
Hi Damian,
Wahnsinn was Du da geschaffen hast. Die tolle Grafik. Was für Darstellungsmöglichkeiten.
Allein schon die Doku im Wiki ist überwältigend.  :) :) :)

Eine Kleinigkeit ist mir aufgefallen. Die erzeugten Filelogs haben kein NOTIFYDEV.
Dadurch ist die Performance des Gesamtsystems etwas schlechter.
Ich habe das Regex zu "$SELF:$device.$reading.last_.*" geändert.
Dann wird NOTIFYDEV benutzt und es sollte auch nicht mehr gelogged werden.
Vielleicht kann Du das übernehmen. (Ich verwende auch %L im Pfad, aber das führt vielleicht zu weit.)

Derzeit bin ich gerade dabei historische Werte (Monate, Jahre) zu übernehmen.
Trage die händisch ins Log-File ein und lese sie dann über DOIF_set_card_data ein.

2020-01-01_00:01:00 DoIF_Strom_Statistik PV_Erzeugung_s.Erzeugung.last_year: 5706 kWh
2021-01-01_00:01:00 DoIF_Strom_Statistik PV_Erzeugung_s.Erzeugung.last_year: 6130 kWh
2022-01-01_00:01:00 DoIF_Strom_Statistik PV_Erzeugung_s.Erzeugung.last_year: 5504 kWh
2023-01-01_00:01:00 DoIF_Strom_Statistik PV_Erzeugung_s.Erzeugung.last_year: 6380 kWh

Über get_data habe ich es (noch) nicht hinbekommen.

Gibt es da bessere/einfachere Wege?

//Roger

Danke für den Tipp mit dem NOTIFYDEV. Als DOIF-Nutzer bin ich da etwas verwöhnt, da man sich hier keine Gedanken über NOTIFYDEV machen muss - es wird immer gesetzt :)

Ich werde es anpassen.

In der Doku steht, dass man einfach eine Liste (kommagetrennt oder mit \n) angeben kann, da ist sogar ein Beispiel:

ZitatDOIF_modify_card_data ("di_pv","energie","pv","col4w",0,"2023.02.04_11:00 10,2023.02.04_11:02 5.6")

Bei dir dann:

DOIF_modify_card_data(...,"2020 5706,2021 6130,2022 5504,2023 6380")

Bei modify werden im Gegensatz zu set bisherige gesammelte Daten nicht gelöscht - steht aber auch in der Doku.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Roger

Hi Damian,
ich steige da noch nicht durch.  >:(
Ich habe ein Geräte nach "Tages-, Monats- und Jahresstatistik für Strom-, Gas-, Wasserzähler und andere Zähler" angelegt. https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler
Heißt bei mir DoIF_Strom_Statistik. eigene Readings:

push (@{$_counter},["PV_Erzeugung_s"   ,"Erzeugung"]);; ## Summe Strom-Erzeugung\
push (@{$_counter},["PV_EigVerbrauch_s","Eigenverbrauch"]);; ## Summe Strom-Eigenverbrauch\
push (@{$_counter},["PV_Einspeisung_s" ,"Einspeisung"]);; ## Summe Strom-Einspeisung\
push (@{$_counter},["PV_Bezug_s"       ,"Bezug"]);; ## Summe Strom-Bezug\
push (@{$_counter},["PV_GesVerbrauch_s","Gesamtverbrauch"]);; ## Summe Strom-Gesamtverbrauch\


Nun will ich die historischen Werte darstellen.

Zunächst mal die Erzeugung der vergangenen Jahre:
{DOIF_modify_card_data("DoIF_Strom_Statistik","PV_Erzeugung_s","Erzeugung","col4w",0,"2015 1360,2016 5793,2017 5379,2018 6469,2019 5706,2020 6130,2021 5504,2022 6380")}
funktioniert nicht: Meldung "undefined  DoIF_Strom_Statistik, PV_Erzeugung_s, Erzeugung, col4w combination"
Was mache ich falsch? Wie bekomme ich die Werte der vergangenen Jahre, Monate und Tage eingelesen?

Mein derzeitiger Weg. Mit:

{DOIF_modify_card_data("DoIF_Strom_Statistik","DoIF_Strom_Statistik","PV_Erzeugung_s.Erzeugung.last_year","bar2decade",0,"2015 1360,2016 5793,2017 5379,2018 6469,2019 5706,2020 6130,2021 5504,2022 6380")}

klappt das Einlesen der Jahre.

Nun die Werte der vergangenen Monate:

{DOIF_modify_card_data("DoIF_Strom_Statistik","DoIF_Strom_Statistik","PV_Erzeugung_s.Erzeugung.last_month","bar2year",0,"2022-01-01 85,2022-02-01 245,2022-03-01 754,2022-04-01 768,2022-05-01 810,2022-06-01 873,2022-07-01 817,2022-08-01 801,2022-09-01 531,2022-10-01 463,2022-11-01 146,2022-12-01 87,2023-01-01 103")}


Ist das der richtige Weg? Jahre, Monate, Tage einzeln (für jedes Reading)? Wie besser?
//Roger
Zotac & RPIs mit 10*FHEM
2*HM-LAN, 2*JeeLink, 2*RS485, SignalESP
HomeMatic, PCA301 Komponenten, ModBus: Stromzähler, Fronius WR, Shelly, Victron

Damian

Zitat{DOIF_modify_card_data("DoIF_Strom_Statistik","PV_Erzeugung_s","Erzeugung","col4w",0,"2015 1360,2016 5793,2017 5379,2018 6469,2019 5706,2020 6130,2021 5504,2022 6380")}

col4w ist das erste Diagramm. Dort wird der tägliche Verlauf dargestellt. Ich würde nicht mehr als eine Woche nehmen (col1w statt col4w), da es sonst wegen der geringen Auflösung zu ungenau wird.

Also macht es keinen Sinn dort die Jahresverbräuche abzulegen. ;) Der tägliche Verlauf wird nicht geloggt, da würde ich einfach abwarten und nichts tun.

Ob du zuerst Jahre einliest oder Monate, das ist dir überlassen. Das Einlesen der Daten kann man erst dann, wenn die cards definiert sind und angezeigt werden.

Ich sichere einmal pro Stunde die Readings per fhem"save", damit im Falle eines Crashes keine Daten verloren gehen, die nicht geloggt sind, sondern nur in cards gesammelt wurden bzw. manuell eingepflegt wurden.   
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Roger

#124
OK, col4w ist falsch --> muss col1w heißen.

Aber auch:
{DOIF_modify_card_data("DoIF_Strom_Statistik","PV_Erzeugung_s","Erzeugung","col1w",0,"2015 1360,2016 5793,2017 5379,2018 6469,2019 5706,2020 6130,2021 5504,2022 6380")}

geht nicht.

Kann ich Deine Antwort so verstehen, dass es sinnfrei ist die Jahreswerte in col1w einzulesen und mein eingeschlagener Weg die Werte einzeln einzulesen richtig ist?
- Tageswerte in bar1month
- Monatswerte in bar2year
- Jahreswerte in bar2decade
Also dreimal (Tag, Monat, Jahr) für jedes meiner 4 Readings?

//Roger

PS: save mache ich übrigens in einem at bei mir schon (und öfter als einmal/h). So hat man bei einem möglichen Absturz fast den aktuellen Stand.
Edit2: Du hast das FileLog ja im Wiki schon angepasst.  :)
Zotac & RPIs mit 10*FHEM
2*HM-LAN, 2*JeeLink, 2*RS485, SignalESP
HomeMatic, PCA301 Komponenten, ModBus: Stromzähler, Fronius WR, Shelly, Victron

Damian

#125
Zitat von: Roger am 19 Februar 2023, 20:55:07
OK, col4w ist falsch --> muss col1w heißen.

Aber auch:
{DOIF_modify_card_data("DoIF_Strom_Statistik","PV_Erzeugung_s","Erzeugung","col1w",0,"2015 1360,2016 5793,2017 5379,2018 6469,2019 5706,2020 6130,2021 5504,2022 6380")}

geht nicht.

Kann ich Deine Antwort so verstehen, dass es sinnfrei ist die Jahreswerte in col1w einzulesen und mein eingeschlagener Weg die Werte einzeln einzulesen richtig ist?
- Tageswerte in bar1month
- Monatswerte in bar2year
- Jahreswerte in bar2decade
Also dreimal (Tag, Monat, Jahr) für jedes meiner 4 Readings?

//Roger

PS: save mache ich übrigens in einem at bei mir schon (und öfter als einmal/h). So hat man bei einem möglichen Absturz fast den aktuellen Stand.
Edit2: Du hast das FileLog ja im Wiki schon angepasst.  :)

ja. Solche langfristigen Daten, wie bei Jahren oder Monaten würde ich über Exceltabellen einpflegen. Diese lassen sich besser bearbeiten und zur Not noch mal einspielen. Ich werde dazu aber auch noch eine Funktion entsprechend dem Filelog bereitstellen.

Zitat{DOIF_modify_card_data("DoIF_Strom_Statistik","PV_Erzeugung_s","Erzeugung","col1w",0,"2015 1360,2016 5793,2017 5379,2018 6469,2019 5706,2020 6130,2021 5504,2022 6380")}

Wie kommst du auf diese Kombination? Es wird definiert: [$SELF:$2.$3.day:col1w] es wird also auf die internen day-Readings des eigenen Moduls getriggert und nicht auf die ursprünglichen Wert, und dass es keine Jahreswerte sind, habe ich ja schon erzählt, sondern vielmehr sekundengenauer Werte des aktuellen Tages, die um Mitternacht auf Null gesetzt werden.

{DOIF_modify_card_data("DoIF_Strom_Statistik","DoIF_Strom_Statistik","PV_Erzeugung_s.Erzeugung.day","col1w",...
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Roger

Hi Damian

Zitata. Solche langfristigen Daten, wie bei Jahren oder Monaten würde ich über Exceltabellen einpflegen. Diese lassen sich besser bearbeiten und zur Not noch mal einspielen. Ich werde dazu aber auch noch eine Funktion entsprechend dem Filelog bereitstellen.
Ja, ich habe alle Daten in Excel. Wäre toll, wenn Du die Übernahme aus Excel vereinfachen kannst.
Sag gern Bescheid, wenn Du was zum Testen hast.

ZitatWie kommst du auf diese Kombination?
Aus dem Wiki:
get_data {                             ## Optionale Übernahme bestehender Daten aus dem Log\
  for (my $i=0;;$i<@{$_counter};;$i++) {\
    ::DOIF_set_card_data ("$SELF","$SELF","$_counter[$i][0].$_counter[$i][1].last_day","bar1month",-300,fhem("get log.counter.$_counter[$i][0].$_counter[$i][1] ./log/counter.$_counter[$i][0].$_counter[$i][1].log - 2000 3000 4:last_day"));;\
    ::DOIF_set_card_data ("$SELF","$SELF","$_counter[$i][0].$_counter[$i][1].last_month","bar2year",-300,fhem("get log.counter.$_counter[$i][0].$_counter[$i][1] ./log/counter.$_counter[$i][0].$_counter[$i][1].log - 2000 3000 4:last_month"));;\
::DOIF_set_card_data ("$SELF","$SELF","$_counter[$i][0].$_counter[$i][1].last_year","bar2decade",-300,fhem("get log.counter.$_counter[$i][0].$_counter[$i][1] ./log/counter.$_counter[$i][0].$_counter[$i][1].log - 2000 3000 4:last_year"));;\
}\
}\


#{DOIF_modify_card_data("DoIF_Strom_Statistik","DoIF_Strom_Statistik","PV_Erzeugung_s.Erzeugung.last_month","bar2year",0,"2022-01-01 85,2022-02-01 245,2022-03-01 754,2022-04-01 768,2022-05-01 810,2022-06-01 873,2022-07-01 817,2022-08-01 801,2022-09-01 531,2022-10-01 463,2022-11-01 146,2022-12-01 87,2023-01-01 103")}

{DOIF_modify_card_data("DoIF_Strom_Statistik","PV_Erzeugung_s","PV_Erzeugung_s.Erzeugung.last_month","bar2year",0,"2022-01-01 85,2022-02-01 245,2022-03-01 754,2022-04-01 768,2022-05-01 810,2022-06-01 873,2022-07-01 817,2022-08-01 801,2022-09-01 531,2022-10-01 463,2022-11-01 146,2022-12-01 87,2023-01-01 103")}

Das erst geht, beim zweiten (so wie von Dir vorgeschlagen), kommt: Can't use string ("") as a HASH ref while "strict refs" in use at ./FHEM/98_DOIF.pm line 1461.

//Roger
Zotac & RPIs mit 10*FHEM
2*HM-LAN, 2*JeeLink, 2*RS485, SignalESP
HomeMatic, PCA301 Komponenten, ModBus: Stromzähler, Fronius WR, Shelly, Victron

Damian

#127
So ich habe fertig. Ich habe die Import-Schnittstelle etwas aufgebohrt.

Man kann jetzt sowohl das englische als auch deutsche Zeitformat verwenden, ebenso wird das Kommazeichen statt Punkt bei Zahlen erkannt. Es wird auch erkannt, ob es sich um eine Kommagetrennte Liste oder um eine Liste mit Zeilenumbrüchen handelt. Das bedeutet, dass man direkt Excel csv-Dateien ohne Umwandlung importieren kann. Man kann auch im deutschen Format die Uhrzeit weglassen, ebenso können Sekunden bei Uhrzeitangaben weggelassen werden.

Beispiel

Auszug aus einer csv-Datei mit möglichen Formatierungen:


2023;4,142
02.01.2023 00:01:00;5,159
03.01.2023 00:01;3,170
04.01.2023;5,420


Die csv-Datei wird einfach ins System z. B. in das log-Verzeichnis kopiert und mit der neuen Funktion DOIF_getFileData ausgelesen. Fehlerhafte Datensätze werden am Ende des Importvorgangs auf dem Bildschirm ausgegeben.

Beispiel:

{DOIF_set_card_data ("di","bla","day",'bar1month',0,DOIF_getFileData("./log/Gas_Januar.csv"))}

Die Version ist abwärtskompatibel.

Edit: Neue Version eingecheckt
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

marboj

#128
Hallo Damian,

ich finde deine Darstellung total gut, allerdings kann ich mir nicht erklären, warum bei mir die Doppelanzeige nicht erstellt wird:

defmod di_counter_new DOIF subs {\
##                     Device             Reading       hier die push-Zeilen löschen bzw. durch eigene Readings ersetzen\
  push (@{$_counter},["Solar","yield_today-1"]);; ## Solarenergie\
  push (@{$_counter},["powerfox","Gesamtverbrauch"]);; ## Bezugszähler Strom\
  push (@{$_counter},["Buderus","/recordings/heatSources/actualDHWPower_Today_kWh"]);; ## Bezugszähler Gas Warmwasser (DHW)\
  push (@{$_counter},["Buderus","/recordings/heatSources/actualCHPower_Today_kWh"]);; ## Bezugszähler Gas Heizung (CH)\
\
## Die restliche Code-Definition muss nicht angepasst werden\
## Anpassung der Visualisierung wird im uiTable-Attribut weiter unten vorgenommen\
\
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 == 0) {\
      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_.*");;\
    fhem ("attr log.counter.$device.$reading room Filelogs");;\
}\
\
}\
} ## Ende subs-Block\
\
get_data {                             ## Optionale Übernahme bestehender Daten aus dem Log\
  for (my $i=0;;$i<@{$_counter};;$i++) {\
    ::DOIF_set_card_data ("$SELF","$SELF","$_counter[$i][0].$_counter[$i][1].last_day","bar1month",-300,fhem("get log.counter.$_counter[$i][0].$_counter[$i][1] ./log/counter.$_counter[$i][0].$_counter[$i][1].log - 2000 3000 4:last_day"));;\
    ::DOIF_set_card_data ("$SELF","$SELF","$_counter[$i][0].$_counter[$i][1].last_month","bar2year",-300,fhem("get log.counter.$_counter[$i][0].$_counter[$i][1] ./log/counter.$_counter[$i][0].$_counter[$i][1].log - 2000 3000 4:last_month"));;\
::DOIF_set_card_data ("$SELF","$SELF","$_counter[$i][0].$_counter[$i][1].last_year","bar2decade",-300,fhem("get log.counter.$_counter[$i][0].$_counter[$i][1] ./log/counter.$_counter[$i][0].$_counter[$i][1].log - 2000 3000 4:last_year"));;\
}\
}\
\
\
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;;\
      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\

attr di_counter_new room 93_Energie
attr di_counter_new uiTable {package ui_Table;;} ## Optionale Visualisierung der Energie-Verbräuche/-Produktion im DOIF-Device\
\
## Template für die Darstellung eines Wertes\
DEF TPL_single (\
card([$SELF:$2.$3.day:col1w],"$1 Tagesverlauf",undef,$4,$5,$10,$11,"$12",undef,"1","130,1,1,0,1,,200")|\
card([$SELF:$2.$3.last_day:bar1month-300],"$1 in $12 pro Tag",undef,$4,$5,$10,$11,"$12",undef,"1","130,1,1,0,1,0,200")|\
card([$SELF:$2.$3.last_month:bar2year-300],"$1 in $12 pro Monat",undef,$6,$7,$10,$11,"$12",undef,"0","130,1,1,0,1,0,200")|\
card([$SELF:$2.$3.last_year:bar2decade-300],"$1 in $12 pro Jahr",undef,$8,$9,$10,$11,"$12",undef,"0","130,1,1,0,1,0,200")\
)\
\
## Template für die Darstellung von zwei Werten\
DEF TPL_double (\
card([[$SELF:$3.$4.day:col1w],[$SELF:$6.$7.day:col1w]],"$1 Tagesverlauf in $16",undef,$8,$9,$14,$15,["$2","$5"],undef,"1","130,1,1,0,1,,200","0,0,0,0,2")|\
card([[$SELF:$3.$4.last_day:bar1month-300],[$SELF:$6.$7.last_day:bar1month-300]],"$1 in $16 pro Tag",undef,$8,$9,$14,$15,["$2","$5"],undef,"1","130,1,1,0,1,0,200","0,0,0,0,2")|\
card([[$SELF:$3.$4.last_month:bar2year-300],[$SELF:$6.$7.last_month:bar2year-300]],"$1 in $16 pro Monat",undef,$10,$11,$14,$15,["$2","$5"],undef,"0","130,1,1,0,1,0,200","0,0,0,0,2")|\
card([[$SELF:$3.$4.last_year:bar2decade-300],[$SELF:$6.$7.last_year:bar2year-300]],"$1 in $16 pro Jahr",undef,$12,$13,$14,$15,["$2","$5"],undef,"0","130,1,1,0,1,0,200","0,0,0,0,2")\
)\
\
\
## Die Visualisierung einer Tabellenzeile wird über die obigen beiden Templates vorgenommen, hier zeilenweise anpassen/löschen:\
\
## Über das Template TPL_single wird jeweils pro card ein Wert visualisiert\
##          Überschrift,Device,Reading,minTag,maxTag,minMonat,maxMonat,minJahr,maxJahr,minColor,maxColor,Einheit\
TPL_single (Stromverbrauch,powerfox,Gesamtverbrauch,0,50,0,800,0,8000,90,0,kWh)\
TPL_single (Stromproduktion,Solar,yield_today-1,0,100,0,500,0,1000,90,0,kWh)\
##\
## Über das Template TPL_double werden jeweils pro card zwei Werte visualisiert\
##          Überschrift,Device1,Reading1,Bezeichnung1,Device2,Reading2,Bezeichnung2,minTag,maxTag,minMonat,maxMonat,minJahr,maxJahr,minColor,maxColor,Einheit\
TPL_double (Gasverbrauch,Buderus,/recordings/heatSources/actualDHWPower_Today_kWh,Warmwasser,Buderus,/recordings/heatSources/actualCHPower_Today_kWh,Waerme,0,100,0,2000,0,20000,90,0,m³)\
TPL_double (Elektrizität,Ertrag,MQTT2_DVES_C58DCB,total_pv,Bezug,MQTT2_DVES_C58DCB,total_c,-10,25,-400,800,-4000,6000,0,90,kWh)


Hast Du einen Tip?

Außerdem aktualisieren sich die Werte des Buderus-Device nicht, obwohl im Device bereits neue Werte vorhanden sind. Warum kann das sein?

Gruß
Marco
meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

Damian

Zitat von: marboj am 21 Februar 2023, 07:49:16
Hallo Damian,

ich finde deine Darstellung total gut, allerdings kann ich mir nicht erklären, warum bei mir die Doppelanzeige nicht erstellt wird:
push (@{$_counter},["Buderus","/recordings/heatSources/actualDHWPower_Today_kWh"]);; ## Bezugszähler Gas Warmwasser (DHW)\
Hast Du einen Tip?

Außerdem aktualisieren sich die Werte des Buderus-Device nicht, obwohl im Device bereits neue Werte vorhanden sind. Warum kann das sein?

Gruß
Marco
Slash im Readingnamen ist keine gute Idee.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

marboj

meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

Damian

Zitat von: marboj am 21 Februar 2023, 09:56:59
wie trennt man denn dann?

Ein Readingname ist ein eindeutiger Name bestehend aus Buchstaben, Zahlen, Unterstrichen und Punkten innerhalb eines Devices. Was wills du da trennen?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

marboj

Entschuldigung, falsch ausgedrückt.

Habe das Modul KM200 installiert für die Heizungssteuerung. Hier werden die Readings genau so im Device angezeigt, mit Slash.

Wie muss ich die Readings denn in dein Modul schreiben, wenn die mit Slash im Device vorhanden sind?
meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

Damian

Zitat von: marboj am 21 Februar 2023, 10:02:55
Entschuldigung, falsch ausgedrückt.

Habe das Modul KM200 installiert für die Heizungssteuerung. Hier werden die Readings genau so im Device angezeigt, mit Slash.

Wie muss ich die Readings denn in dein Modul schreiben, wenn die mit Slash im Device vorhanden sind?

Der Readingname wird in der Definition für verschiedene Dinge benutzt. Der geht z. B. in den Namen des Perlblocks und in den Namen des Filelogs ein. Für beides funktioniert das nicht.

Ich habe jetzt auch das Slashzeichen im Perlblocknamen erlaubt (neue DOIF-Version wird vermutlich heute noch eingecheckt), aber im Filelognamen wird es dennoch nicht funktionieren, weil es ein Verzechnis-Trenner ist - das ist nur mal so unter Unix. ;)

Am besten machst du dir in deinem Device ein userReading für das jeweilige Reading mit einem Namen ohne Slashzeichen und gibst es in der DOIF-Definition an.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

marboj

Habe es jetzt genauso gemacht: userreadings angelegt und die in das Modul als Reading geschrieben.

Leider wird der doppelte Graph trotzdem nicht angezeigt...

Woran kann es liegen?

defmod di_counter_new DOIF subs {\
##                     Device             Reading       hier die push-Zeilen löschen bzw. durch eigene Readings ersetzen\
  push (@{$_counter},["Solar","total_yield-1"]);; ## Solarenergie\
  push (@{$_counter},["powerfox","Gesamtverbrauch"]);; ## Bezugszähler Strom\
  push (@{$_counter},["Buderus","DHWMonat"]);; ## Bezugszähler Gas Warmwasser (DHW)\
  push (@{$_counter},["Buderus","CHMonat"]);; ## Bezugszähler Gas Heizung (CH)\




## Über das Template TPL_single wird jeweils pro card ein Wert visualisiert\
##          Überschrift,Device,Reading,minTag,maxTag,minMonat,maxMonat,minJahr,maxJahr,minColor,maxColor,Einheit\
TPL_single (Stromverbrauch,powerfox,Gesamtverbrauch,0,50,0,800,0,8000,90,0,kWh)\
TPL_single (Stromproduktion,Solar,total_yield-1,0,100,0,500,0,1000,90,0,kWh)\
##\
## Über das Template TPL_double werden jeweils pro card zwei Werte visualisiert\
##          Überschrift,Device1,Reading1,Bezeichnung1,Device2,Reading2,Bezeichnung2,minTag,maxTag,minMonat,maxMonat,minJahr,maxJahr,minColor,maxColor,Einheit\
TPL_double (Gasverbrauch,Buderus,DHWMonat,Warmwasser,Buderus,CHMonat,Waerme,0,100,0,2000,0,20000,90,0,m³)\
TPL_double (Elektrizität,Ertrag,MQTT2_DVES_C58DCB,total_pv,Bezug,MQTT2_DVES_C58DCB,total_c,-10,25,-400,800,-4000,6000,0,90,kWh)


Gruß
Marco

meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II