FTUI Neue Version chart_widget

Begonnen von eki, 31 Januar 2016, 00:17:26

Vorheriges Thema - Nächstes Thema

uron

Hallo,
ich muss mich doch wieder mal zu Wort melden - leider mit einem Problem bzgl. der Darstellung meiner PV-Anlage:
In der 1. Grafik wird der Haus-Gesamtstromverbrauch dargestellt und wie er sich aus dem Netz-Bezug (gelb) und dem PV-Bezug (grün) zusammensetzt.
Ich habe vor Monaten ein Chart mit Forumshilfe entwickelt, was wirklich genau so funktioniert, wie ich es haben wollte.
Leider habe ich am Ende der "Entwicklungsarbeit" den Überblick verloren, welche Bestandteile des Codes (data-style) haben welche Funktion - aber es lief ja.
In der 2. Grafik ist der Ertragswert der Module dargestellt, aber auch die gesamte PV-Produktion seit der Erstinstalltion der Klein-PV-Anlage.

Nun habe ich aktuell eine 2. PV-Fläche mit einer anderen Himmelsausrichtung  (Richtung Westen) installiert und möchte die Ergebnisse ebenfalls in meine Grafik einbinden.
Meine Versuche in der 2. Grafik sind von Erfolg gekrönt, in der 1. Grafik sind sie leider noch fehlgeschlagen. In der ersten Grafik fehlt mir die gestapelte Funktion (PV-Ertrag West (blau) auf dem PV-Ertrag Ost (grün).

In der Folge hier mein Code, der aber leider bei der 1. Grafik noch (!) nicht läuft:

<div class="row">
<div class="cell">
                            <div data-type="chart"
data-device="FBDECT_FritzBox_08761_OST"
data-logdevice='["HS_AnlageLog"]'
data-columnspec='["4:powerfox.power.*","4:FBDECT_FritzBox_08761_OST.power.*","4:FBDECT_FritzBox_08761_WEST.power.*",["4:powerfox.power.*","4:powerfox.power.*:0:$fld[3]<=0?0:$fld[3]"]]'
data-style='[["fill",["-10000","#ff0000","0.0"],["0","#ff0000","0.0"],["0","#DDA400","1.0"],["10000","#DDA400","1.0"]],"ftui l4fill","ftui l6fill",["fill",["-10000","#ff0000","1.0"],["0","#ff0000","1.0"],["0","#DDA400","0.0"],["10000","#DDA400","0.0"]]]'
data-ptype='["lines","lines:0","lines:1","lines"]'
data-uaxis='["secondary","primary","primary","secondary"]'
data-legend='["akt. externer Leistungsbezug [W]","akt. Ost-Solar-Ernte [W]","akt. West-Solar-Ernte [W]",""]'
data-daysago_start="1"
data-daysago_end="-1"
data-nofulldays="false"
data-timeformat="ee\LF\hh:mm dd.MMM"
data-showlegend="true"
data-legendpos='["left","top"]'
data-crosshair="true"
data-minvalue="-200"
data-maxvalue="800"
data-yunit=""
data-ytext="akt. Leistungsbedarf [W]"
data-minvalue_sec="-200"
data-maxvalue_sec="800"
data-yunit_sec=""
data-ytext_sec="akt. PV-Leistung [W]"
data-title="Hausleistungsbedarf, gestapelt [W]"
data-title_class="myHeader"
data-prefetch="true">
</div>
</div>
                    </div>

    <div class="row">
<div class="cell">
                            <div data-type="chart"
data-device='["FBDECT_FritzBox_08761_OST"]'
data-logdevice='["PV_AnlageLog"]'
data-columnspec='["4:FBDECT_FritzBox_08761_OST.power.*","4:FBDECT_FritzBox_08761_WEST.power.*","4:FBDECT_FritzBox_08761_OST.energy:0:$val=($fld[3]/1000)","4:FBDECT_FritzBox_08761_WEST.energy:0:$val=($fld[3]/1000)"]'
data-style='["ftui l4fill","ftui l6fill","ftui l5","ftui l6"]'
data-ptype='["lines","lines:0","steps","steps:2"]'
data-uaxis='["primary","primary","secondary"]'
data-legend='["akt. Leistung Ost-Module [W]","akt. Leistung West-Module [W]","kum. Leistung Ost [kWh]","kum. Leistung West [kWh]"]'
data-daysago_start="1"
data-daysago_end="-1"
data-nofulldays="false"
data-timeformat="ee\LF\hh:mm dd.MMM"
data-showlegend="true"
data-legendpos='["left","top"]'
data-crosshair="true"
data-minvalue="0"
data-maxvalue="200"
data-yunit=""
data-ytext="akt. Leistung [W]"
data-minvalue_sec="316"
data-maxvalue_sec="336"
data-yunit_sec=""
data-ytext_sec="Kumulierte Leistung [kWh]"
data-title="solare Ernte der PV-Anlage"
data-title_class="myHeader"
data-prefetch="true">
</div>
</div>
                    </div>


Kann mir jemand helfen?
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

dirk.k

@Eki
ok, danke.
Ich habe mal zusätzlich ein filelog eingebaut und werde im Fehlerfall mal schauen, ob es damit nachvollziehbar ist. Das kann ich dann schicken. Kann etwas dauern.

eki

Zitat von: uron am 21 November 2021, 14:14:12

In der Folge hier mein Code, der aber leider bei der 1. Grafik noch (!) nicht läuft:

<div class="row">
<div class="cell">
                            <div data-type="chart"
data-device="FBDECT_FritzBox_08761_OST"
data-logdevice='["HS_AnlageLog"]'
data-columnspec='["4:powerfox.power.*","4:FBDECT_FritzBox_08761_OST.power.*","4:FBDECT_FritzBox_08761_WEST.power.*",["4:powerfox.power.*","4:powerfox.power.*:0:$fld[3]<=0?0:$fld[3]"]]'
data-style='[["fill",["-10000","#ff0000","0.0"],["0","#ff0000","0.0"],["0","#DDA400","1.0"],["10000","#DDA400","1.0"]],"ftui l4fill","ftui l6fill",["fill",["-10000","#ff0000","1.0"],["0","#ff0000","1.0"],["0","#DDA400","0.0"],["10000","#DDA400","0.0"]]]'
data-ptype='["lines","lines:0","lines:1","lines"]'
data-uaxis='["secondary","primary","primary","secondary"]'
data-legend='["akt. externer Leistungsbezug [W]","akt. Ost-Solar-Ernte [W]","akt. West-Solar-Ernte [W]",""]'
data-daysago_start="1"
data-daysago_end="-1"
data-nofulldays="false"
data-timeformat="ee\LF\hh:mm dd.MMM"
data-showlegend="true"
data-legendpos='["left","top"]'
data-crosshair="true"
data-minvalue="-200"
data-maxvalue="800"
data-yunit=""
data-ytext="akt. Leistungsbedarf [W]"
data-minvalue_sec="-200"
data-maxvalue_sec="800"
data-yunit_sec=""
data-ytext_sec="akt. PV-Leistung [W]"
data-title="Hausleistungsbedarf, gestapelt [W]"
data-title_class="myHeader"
data-prefetch="true">
</div>
</div>
                    </div>

    <div class="row">
<div class="cell">
                            <div data-type="chart"
data-device='["FBDECT_FritzBox_08761_OST"]'
data-logdevice='["PV_AnlageLog"]'
data-columnspec='["4:FBDECT_FritzBox_08761_OST.power.*","4:FBDECT_FritzBox_08761_WEST.power.*","4:FBDECT_FritzBox_08761_OST.energy:0:$val=($fld[3]/1000)","4:FBDECT_FritzBox_08761_WEST.energy:0:$val=($fld[3]/1000)"]'
data-style='["ftui l4fill","ftui l6fill","ftui l5","ftui l6"]'
data-ptype='["lines","lines:0","steps","steps:2"]'
data-uaxis='["primary","primary","secondary"]'
data-legend='["akt. Leistung Ost-Module [W]","akt. Leistung West-Module [W]","kum. Leistung Ost [kWh]","kum. Leistung West [kWh]"]'
data-daysago_start="1"
data-daysago_end="-1"
data-nofulldays="false"
data-timeformat="ee\LF\hh:mm dd.MMM"
data-showlegend="true"
data-legendpos='["left","top"]'
data-crosshair="true"
data-minvalue="0"
data-maxvalue="200"
data-yunit=""
data-ytext="akt. Leistung [W]"
data-minvalue_sec="316"
data-maxvalue_sec="336"
data-yunit_sec=""
data-ytext_sec="Kumulierte Leistung [kWh]"
data-title="solare Ernte der PV-Anlage"
data-title_class="myHeader"
data-prefetch="true">
</div>
</div>
                    </div>


Kann mir jemand helfen?

Bitte poste noch einen Ausschnitt des zugehörigen Logfiles.

uron

Hallo eki,
schon deine Nachfrage hat mich ich auf die Spur gebracht: in der 1. Grafik verwende ich die Logdatei HS_AnlageLog, in der 2. die PV_AnlageLog.
In der HS_AnlageLog fehlte aber der Wert der "West-PV-Anlage", weshalb er natürlich auch nicht dargestellt werden kann!

Das habe ich adhoc geändert - und mein Problem ist gelöst, auch die Darstellung der gestapelten Werte ist so, wie ich das haben möchte.

Danke für den Schubser!

Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

uron

Doch noch eine andere Frage:
Ist es möglich im Chart einen Wert anzuzeigen, der aus der Addition zweier Werte eines Logfiles errechnet wird?
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

eki

Was mir spontan dazu einfallen würde, ist die zwei Werte zu stapeln und dafür zu sorgen, dass der untere Wert nicht gezeichnet wird bzw. nicht zu sehen ist (z.B. indem man einen Stil mit opacity 0 definiert und nutzt).

Was auch gehen würde, ist über logproxy und eine Funktion, die man selbst definiert (im 99_MyUtils.pm), zu gehen. Grundsätzlich hast Du natürlich immer das Problem zu lösen, dass die beiden Werte ja nicht automatisch immer zum gleichen Zeitpunkt im Log eintrudeln, Du müsstest also interpolieren etc (so wie es beim Stapeln ja auch gemacht wird).

uron

#711
Danke eki,
ich komme gerade zu diesem Thread zurück nachdem ich lange im Forum recherchiert habe.
Mein finales Erkenntnis: Ich versuche mal den Weg zu gehen, den rudolfkoenig vorgeschlagen hat:
Zitat von: rudolfkoenig am 16 Juni 2020, 13:18:06
Mehrere:
- per userReadings ein neues Reading mit Summe der beiden Werte generieren, loggen und diesen darstellen.
- beide Werte zu einem Event (d.h. eine Zeile) zusammenfassen (z.Bsp. per userReadings), aber _nicht addieren_, d.h. die Werte sind in unterschiedlichen Spalten weiterhin einzeln vorhanden. Bei SVGs aus FileLog dann $fld[ x ] + $fld[ y ] als Funktion verwenden.

Mein erster Blick auf userreadings lässt mich aber nicht hoffen - ist schon reichlich komplex für meine Vorkenntnisse!
Danke
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

eki

Mal angenommen die beiden Readings heißen re_a und re_b (und sind Zahlen) und das Device dev, dann bräuchtest Du in etwa für den ersten Vorschlag von Rudi so etwas:


attr dev userReading summe_a_b:(re_a|re_b).* {
  my $sum = ReadingsVal("dev","re_a",0) + ReadingsVal("dev","re_b",0);
  return $sum;
}



uron

Dein Vorschlag kommt mir wie gerufen, ich bin gerade dabei, einen Code zu "basteln", der aber noch nicht funktioniert.
Dann schwenke ich jetzt mal auf deinen Vorschlag um, wobei ich sicher dein "userReading" durch "userReadings" ersetzen muss!?

Ich berichte, wenn ich weiterkomme!
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

uron

#714
Ich befürchte, ich bin auf der falschen Spur.

Nochmals zur Klarstellung:
Ich habe 2 Devices (2x Fritz!DECT 200), die mir die Readings in eine FileLog schreiben; diese beiden Werte sind zu addieren.
Dein "dev" müsste m.E. doch dann die Logdatei sein, deren Inhalt aber Text ist.
Wenn ich die beiden Werte mittels userReadings direkt aus dem Device auslese, müsste ich sie mit userReadings "verbinden" und wieder in den FileLog schreiben und zwar mit dem Ursprungsdatum!?

Verrenne ich mich da?

Nachtrag:
ich schicke jetzt mal die beiden Readings leicht abgeändert mit:
2021-11-22_16:54:13 FBDECT_FritzBox_08761_OST energy: 323562 Wh
2021-11-22_16:54:13 FBDECT_FritzBox_08761_WEST energy: 371 Wh
Im Ergebnis sollen also die beiden Werte addiert im FileLog landen!
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

uron

#715
Ich hab jetzt nochmals weitergedacht und versucht, meine eigenen Zweifel auszuräumen:
Ich bin zu folgendem Code gekommen:

attr FBDECT_FritzBox_08761_OST userReadings PV-Summe(OST|West).* {my $sum = ReadingsVal("FBDECT_FritzBox_08761_OST","energy",0) + ReadingsVal("FBDECT_FritzBox_08761_WEST","energy",0); return $sum;}

Ich gehe also davon aus - und ich drücke das mal unfachmännisch aus - , dass das userReading in einem der beiden Devices "abgelegt" wird und darin das Reading des 1. und 2. Device summiert wird.

Im LogFile sehe ich das userReading unter den "Regexp parts".
Versuche ich dann das userReading im LogFile zu triggern erscheint dort keinerlei Eintrag.

Was könnte noch fehlerhaft sein?
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

eki

#716
Der Ansatz ist schon richtig, die Syntax aus meiner Sicht allerdings falsch, da sollte stehen:
... userReadings PV-Summe:.*(OST|WEST).* ...
.
Allerdings lösen, soweit ich weiß, userReadings keine Events aus und damit kommen sie auch nicht in die Logfiles (zumindest habe ich das bei mir so beobachtet).

Eine Alternative wäre, das Addieren nicht über useReading zu machen, sondern über ein Notify. Also in etwa so:


define ntf_sum notify .*FBDECT_FritzBox_08761_(OST|WEST).* {
  my $sum = ReadingsVal("FBDECT_FritzBox_08761_OST","energy",0) + ReadingsVal("FBDECT_FritzBox_08761_WEST","energy",0);
  fhem("setreading FBDECT_FritzBox_08761_OST PV-Summe $sum");
}

uron

Danke, dass du dich erneut einschaltest!
Ja, dass userReadings kein Event auslösen, darauf war ich zwischenzeitlich auch gestoßen:
https://forum.fhem.de/index.php?topic=60756.0

Der Lösungsvorschlag dort lautet, einevent-on-change-reading zu setzen.
Da ich aus dem LogFile Charts mit FTUI Widget Chart produziere, führen nicht geloggte Werte (wenn kein event!) dann zu unschönen Ansichten (s. Anlage)

Ich teste mal deinen neuen Ansatz, frage mich allerdings, wo der Zeitstempel herkommen soll, aber vielleicht werde ich ja bei der Umsetzung überrascht!
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

uron

SUPER eki, hat fast geklappt, incl. Zeitstempel:
Leider taucht ein Problem beim Loggen im FileLog auf:
Das Reading "PV-Summe" taucht im FileLog jeweils 32x (!) mit dem gleichen Zeitstempel auf.

Gibt es dafür auch noch eine Lösung?
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

eki

In dem Zieldevice (das in dem das neue Reading landet) folgendes setzen:

attr FBDECT_FritzBox_08761_OST event-on-change-reading .*