Hauptmenü

Stromverbrauch per DOIF?

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

Vorheriges Thema - Nächstes Thema

Damian

Du musst am besten die vorherige Definition löschen.

Du hast es heute mit den Sonderzeichen :)

Nächster Kandidat: Das Minuszeichen

Es ist immer ungünstig Sonderzeichen zu nutzen, die in Perlbezeichnern (Außer Buchstaben und Zahlen ist nur _ erlaubt) nichts verloren haben.

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

marboj

Also, ich bin mit meinem (wenig) Latein am Ende:

Habe alle Readings mit Sonderzeichen durch userReadings ohne Sonderzeichen ersetzt.

Habe testweise die Definition des TPL_double in 2 TPL_single geschrieben.

Als Single werden sie angezeigt, double nicht.

@Damian: Noch eine Idee?

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

Damian

Zitat von: marboj am 21 Februar 2023, 14:44:38
Also, ich bin mit meinem (wenig) Latein am Ende:

Habe alle Readings mit Sonderzeichen durch userReadings ohne Sonderzeichen ersetzt.

Habe testweise die Definition des TPL_double in 2 TPL_single geschrieben.

Als Single werden sie angezeigt, double nicht.

@Damian: Noch eine Idee?

Gruß
Marco

Dann poste doch mal deine komplette Definition.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

marboj

da ist sie:

defmod di_counter_new DOIF subs {\
##                     Device             Reading       hier die push-Zeilen löschen bzw. durch eigene Readings ersetzen\
  push (@{$_counter},["Solar","Gesamtertrag"]);; ## 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)\
\
## 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,Gesamtertrag,0,100,0,500,0,1000,90,0,kWh)\
#TPL_single (Gasverbrauch,Buderus,DHWMonat,Warmwasser,0,100,0,2000,0,20000,90,0,m³)\
#TPL_single (Gasverbrauch,Buderus,CHMonat,Waerme,0,100,0,2000,0,20000,90,0,m³)\
##\
## Ü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 (Elektrizität,Ertrag,MQTT2_DVES_C58DCB,total_pv,Bezug,MQTT2_DVES_C58DCB,total_c,-10,25,-400,800,-4000,6000,0,90,kWh)\
TPL_double (Gasverbrauch,Buderus,DHWMonat,Warmwasser,Buderus,CHMonat,Waerme,0,100,0,2000,0,20000,90,0,m³)
meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

Damian

Es waren in meinem Beispiel die Überschriften vertauscht.

##  Überschrift,Device1,Reading1,Bezeichnung1,Device2,Reading2,Bezeichnung2,minTag,maxTag,minMonat,maxMonat,minJahr,maxJahr,minColor,maxColor,Einheit

Die korrekte Reihenfolge ist aber (kann man im Beispiel meiner Angaben sehen):

## Überschrift,Bezeichnung1,Device1,Reading1,Bezeichnung2,Device2,Reading2,minTag,maxTag,minMonat,maxMonat,minJahr,maxJahr,minColor,maxColor,Einheit

Bei dir dann:

TPL_double (Gasverbrauch,Warmwasser,Buderus,DHWMonat,Waerme,Buderus,CHMonat,0,100,0,2000,0,20000,90,0,m³)

Ich habe es nun im Wiki korrigiert :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

marboj

Jetzt passt es... Dankeschön
meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

Roger

Zitat von: Damian am 20 Februar 2023, 22:42:45
So ich habe fertig. Ich habe die Import-Schnittstelle etwas aufgebohrt.
Beispiel:
{DOIF_set_card_data ("di","bla","day",'bar1month',0,DOIF_getFileData("./log/Gas_Januar.csv"))}

Hi Damian,
man bist Du schnell.  :)
So habe csv-Dateien erstellt und kann diese einlesen.  :D
Allerdings habe und hätte ich gern weiterhin eine Überschriftszeile drin. Da wird eine Fehlermeldung angezeigt - aber trotzdem die weiteren Zeilen verarbeitet.
error at: Datum; Gesamt-Bezug

Vielleicht kannst Du die Meldung unterdrücken ...

Mehr Gedanken macht mir der unterschiedliche Syntax der DOIF_set_card_data().
Mit Deinem vorgeschlagenen Syntax komme ich bei dem Tages-, Monats- und Jahresstatistik für Strom-, Gas-, Wasserzähler und andere Zähler nicht klar.
Habe das Device nach 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 eingerichtet.

Dort ist unter "get_data ## Optionale Übernahme bestehender Daten aus dem Log" ein anderer Syntax angegeben:

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"));;\
}\
}\

Und nur dieser funktioniert bei mir.
Mit Deinem Syntax bekomme ich die Fehlermeldung: undefined  DoIF_Strom_Statistik, PV_Einspeisung_s, Einspeisung, bar1month combination
Was ist hier richtig?

Ich möchte gern die historischen Werte der letzten Tage, Monate und Jahre einlesen.
Wie macht man das genau?

Mit 3* DOIF_set_card_data() und drei unterschiedlichen csv-Dateien?

{DOIF_set_card_data("DoIF_Strom_Statistik","DoIF_Strom_Statistik","PV_Bezug_s.Bezug.last_day"  ,"bar1month" ,0,DOIF_getFileData("../_data/Bezug_day.csv"))}
{DOIF_set_card_data("DoIF_Strom_Statistik","DoIF_Strom_Statistik","PV_Bezug_s.Bezug.last_month","bar2year"  ,0,DOIF_getFileData("../_data/Bezug_month.csv"))}
{DOIF_set_card_data("DoIF_Strom_Statistik","DoIF_Strom_Statistik","PV_Bezug_s.Bezug.last_year" ,"bar2decade",0,DOIF_getFileData("../_data/Bezug_year.csv"))}

Sind wirklich 3 DOIF_set_card_data() nötig? Wenn nur einer: Wie muss der aussehen?
Kann man die Werte in einer gemeinsamen csv-Datei haben und es werden sich je nach Import die tages-, Monats- oder Jahres-Werte herausgesucht?


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

Per

Statt einer unterdrückten Fehlermeldung: könnte man die Überschriften nicht als Feldnamen interpretieren?

Damian

#143
Ich wartete noch auf dein Feedback, weil ich mittlerweile so viele Änderungen vorgenommen habe, dass ich langsam einchecken wollte.

Zitaterror at: Datum; Gesamt-Bezug

Kann ich nicht unterdrücken, weil ich nicht weiß wer welche Datensätze liefert. Erwartet wird eine Liste von korrekten Datensätzen und wenn du die Überschrift lieferst, dann kann ich es nicht wissen. FileLog liefert dagegen keine Überschrift und da muss es genauso funktionieren.

Es gibt nur eine DOIF_set_card_data-Funktion und die hat immer gleiche Parameter:

<card device>,<reading device>,<reading>,<col/bar specification>,<time offset>,<data list>

Die Beschreibung dazu steht ja im Wiki.

bei <data list> wird eine kommagetrennte oder newline-getrennte Liste erwartet. Es ist egal, ob man sie direkt in Anführungszeichen angibt oder ob es sie andere Funktionen liefern.

ZitatDoIF_Strom_Statistik, PV_Einspeisung_s, Einspeisung, bar1month combination

bedeutet einfach, dass im DOIF-Device DoIF_Strom_Statistik keine Angabe [PV_Einspeisung_s:Einspeisung:bar1month] existiert und das stimmt bei di_counter_new auch, denn dort werden andere Readings definiert, aber das hatten wir schon.

Du musst für jede Definition [<Device>:<reading>:<collect type>] einen Daten-Import machen, denn für jede dieser Angaben werden vom DOIF-Device Daten gesammelt.

Sollten zwei identische Angaben [<Device>:<reading>:<collect type>] in einem DOIF-Device definiert worden sein, dann sind das die gleichen Daten und ein Import würde reichen - aber das macht innerhalb eines DOIF-Devices auch wenig Sinn.

Dann werde ich langsam die neue Version einchecken. Dort heißt die Funktion allerdings nicht DOIF_getFileData sondern DOIF_get_file_data. Ich habe die Namensgebung passend zu DOIF_modify/set_card_data angepasst.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

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

Roger

Hi Damian,

Zitaterror at: Datum; Gesamt-Bezug
Kann ich nicht unterdrücken,
Damit kann ich gut leben. Daten werden ja trotzdem eingelesen.  ;)

Zitatdas stimmt bei di_counter_new auch, denn dort werden andere Readings definiert, aber das hatten wir schon.
Danke. Der Hinweis (in fett) hat mir geholfen es zu verstehen.  ::)

ZitatDu musst für jede Definition [<Device>:<reading>:<collect type>] einen Daten-Import machen, denn für jede dieser Angaben werden vom DOIF-Device Daten gesammelt.
Danke für die Erläuterung. So verstehe ich es und weiß Bescheid.  :)

Also insgesamt: tolle Grafiken und Möglichkeiten. Ohne Dein Beispiel für die Statistiken für Zähler, hätte ich niemals so was hinbekommen.  :'(
//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 von: Roger am 21 Februar 2023, 21:29:15
Hi Damian,
Damit kann ich gut leben. Daten werden ja trotzdem eingelesen.  ;)
Danke. Der Hinweis (in fett) hat mir geholfen es zu verstehen.  ::)
Danke für die Erläuterung. So verstehe ich es und weiß Bescheid.  :)

Also insgesamt: tolle Grafiken und Möglichkeiten. Ohne Dein Beispiel für die Statistiken für Zähler, hätte ich niemals so was hinbekommen.  :'(
//Roger

Vielleicht noch zur Info:

Wenn du einen Datensatz hast, der mit # beginnt, dann wird er ohne Meldungen überlesen. Das habe ich eingebaut, weil Filelog am Ende eine Infozeile beginnend mit # liefert.

Und wenn du eine falsche Datei in DOIF_get_file_data angibst, dann liefert die Funktion eine Fehlermeldung und auch diese muss ich als "fehlerhaften Datensatz" ausgeben, damit der User Bescheid weiß, daher "error at:".

Das Beispiel mit di_counter_new ist natürlich schon die Königsdisziplin und ich weiß nicht, ob es leichter oder eher schlechter ist an diesem Beispiel die Funktionsweise von card und dessen Parameter zu verstehen, weil es eine abstrakte Definition ist, bei der man die einzelnen card-Aufrufe nicht direkt sehen kann.

Und an dieser Stelle noch ein kleiner Ausblick. Es wird auch barMinMax (fliegende Säulen, die die Min-Max-Spanne anzeigen)  und line für Linien in der gleichen Zeitdarstellung geben.

Ich möchte nämlich den Gasverbrauch (als Säulen) und die Temperatur (als Linie) in einem Diagramm gegenüberstellen.

Aber erstmal Programmierpause - es war schon etwas viel in den letzten Wochen :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Roger

Hi Damian,
danke für die Info mit dem #
ZitatWenn du einen Datensatz hast, der mit # beginnt, dann wird er ohne Meldungen überlesen.
Habe meinen Export aus Excel entsprechend angepasst --> supi  :)

Habe nun alle historischen Werte (Tagesverlauf, letzte 30 Tageswerte, Monatswerte und Jahreswerte) ins DOIF eingelesen. Die ersten beiden aus FHEM FileLog's, die Monats- & Jahreswerte aus Excel über csv --> sieht toll aus.
Nun muss ich noch die Farben anpassen.

ZitatDas Beispiel mit di_counter_new ist natürlich schon die Königsdisziplin und ich weiß nicht, ob es leichter oder eher schlechter ist an diesem Beispiel die Funktionsweise von card und dessen Parameter zu verstehen, weil es eine abstrakte Definition ist, bei der man die einzelnen card-Aufrufe nicht direkt sehen kann.
Mir hat die Funktionalität und die Grafik so gefallen, dass ich das unbedingt umsetzen wollte. Und Du hast hier etwas anspruchsvolles geschaffen.  8)

ZitatIch möchte nämlich den Gasverbrauch (als Säulen) und die Temperatur (als Linie) in einem Diagramm gegenüberstellen.
Das ist auch meine nächste Herausforderung. Will mal sehen, ob meine Bemühungen zur Einsparung erfolg hatten. Bei Heizung sollte man für den Vergleich mit Gradtagzahlen arbeiten.
https://www.dwd.de/DE/leistungen/gtz_kostenfrei/gtz_kostenfrei.html
Bin ja mal gespannt, was für eine Grafik Du hierfür erzeugst.  ::)

ZitatAber erstmal Programmierpause - es war schon etwas viel in den letzten Wochen
Ja, es gibt ja noch anderes im Leben.  ;)

//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

#148
Zitat von: Damian am 21 Februar 2023, 13:07:27
Du musst am besten die vorherige Definition löschen.

Du hast es heute mit den Sonderzeichen :)

Nächster Kandidat: Das Minuszeichen

Es ist immer ungünstig Sonderzeichen zu nutzen, die in Perlbezeichnern (Außer Buchstaben und Zahlen ist nur _ erlaubt) nichts verloren haben.

Mit der aktuellen DOIF-Version funktionieren in der Beispieldefinition 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
nun auch Readings mit Punkt, Slash und Minus im Namen :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FHEM-User22

Hallo Damian,
ich habe einen Powerfox, der die Daten in Wh mit Punkt statt Komma und ohne Tausenderzeichen liefert.

Nach dem Thread:
https://forum.fhem.de/index.php/topic,132665.msg1267877.html#msg1267877
habe ich auch userReadings erstellt, mit Tausenderpunkt und Komma und in kwh umgerechnet.

Diese Userreadings kann ich leider nicht so einfach in Dein Doif einsetzen, es nimmt die Daten nicht. Gibt es da einen Trick? Ich hätte gerne die Ausgabe im Doif als KWh und Punkt / Komma.

Dankeschön 
Beste Grüße
FHEM auf Raspberry Pi und Proxmox und... und.... und....