SVG erneute Probleme mit Variablen

Begonnen von skamm71, 30 Oktober 2023, 15:37:43

Vorheriges Thema - Nächstes Thema

skamm71

Hallo zusammen

Ich bin immer noch mit meinem Kollegen daran eigentliche "Kleinigkeiten" zur Aufhübschung in mein Solaranlagen-SVG einzupflegen.
Heute scheiterte es an folgendem:

Der Wechselrichter liefert liefert die Werte für "Batterie-Einspeisung" oder "Batterie-ntladung" genauso wie den Stromtransfer von und zum Netzanbieter in einem Feld...
Dazu bringt er dann Felder im Log mit dem "ja, was ist es denn eigentlich nun...."

Also war die Anforderung heute aus den ausgelesenen Werten user_readings zu machen und die darzustellen:

essinfo/common/BATT/status=0 -> user_batt_status="(standby)"
essinfo/common/BATT/status=1 -> user_batt_status="(charging)"
essinfo/common/BATT/status=2 -> user_batt_status="discharging)"
/essinfo/home/direction/is_grid_buying_=0 ignorieren
/essinfo/home/direction/is_grid_buying_=1 -> user_grid_status="(purchasing)"
/essinfo/home/direction/is_grid_selling_=0 -> ignorieren
/essinfo/home/direction/is_grid_selling_=1 -> user_grid_status="(feeding)"

/essinfo/home/direction/is_grid_buying_ und  /essinfo/home/direction/is_grid_selling_ beides auf 0 dann user_grid_status="(standby)"

Das sind meine "Events on update":

/essinfo/common/LOAD/load_power,/essinfo/home/statistics/load_power,/essinfo/home/statistics/pcs_pv_total_power,/essinfo/common/PV/pv1_power,/essinfo/common/PV/pv2_power,/essinfo/home/statistics/grid_power,/essinfo/common/BATT/soc,user_soc,/essinfo/home/statistics/batconv_power,/essinfo/common/GRID/today_grid_feed_in_energy,/essinfo/common/GRID/today_grid_power_purchase_energy,/essinfo/common/PCS/today_pv_generation_sum,/essinfo/common/LOAD/today_load_consumption_sum,user_null,/essinfo/common/BATT/status,/essinfo/home/direction/is_grid_buying_,/essinfo/home/direction/is_grid_selling_,user_batt_status,user_grid_status
Das sind die "user readings" (die ersten beiden funktionieren, mein Problem sind die beiden mit status...):

user_soc:/essinfo/common/BATT/soc.* {return ReadingsVal("myEss","/essinfo/common/BATT/soc",0)*(10)} ,
user_null:/essinfo/common/BATT/soc.* {return ReadingsVal("myEss","",0)} ,

user_batt_status {if(ReadingsVal("myEss","essinfo/common/Batt/status",0) eq "0") {return "standby"} elsif (ReadingsVal("myEss","essinfo/common/Batt/status",1) eq "1") {return "charging"} elsif (ReadingsVal("myEss","essinfo/common/Batt/status",2) eq "2") {return "discharging"} else {return "99"}} ,

user_grid_status {if(ReadingsVal("myEss","ssinfo/home/direction/is_grid_buying_",1) eq 1) {return "selling"} } ,

user_grid_status {if(ReadingsVal("myEss","ssinfo/home/direction/is_grid_selling_",1) eq 1) {return "buying"} }

#user_grid_status {if(ReadingsVal("myEss","ssinfo/home/direction/is_grid_buying_",0) eq 0 and ReadingsVal("myEss","ssinfo/home/direction/is_grid_selling_",0) eq 0)  {return "standby"} }

Über die Variablen im SVG ist soweit alles definiert:

"$data{currval1}"::"$data{currval2}"::"$data{currval3}"::"$data{currval4}"::"$data{currval5}"::"$data{currval6}"::"$data{currval7}"::"$data{currval8}"::"$data{currval9}"::"$data{currval10}"::"$data{currval11}"::"$data{currval12}"::"$data{currval13}"::"$data{currval14}"::"$data{currval15}"::"$data{currval16}"::"$data{currval17}"::"$data{currval18}"::"$data{currval19}"::"$data{currval20}"::"$data{currval21}"::"$data{currval22}"::"$data{currval23}"


Erstes Problem:

Im Logfile tauchen die beiden user readings pro Zyklus (1 Minute) immer 5x auf. Verstehe ich nicht.

root@fhem-homeautomation:~# tail -f /opt/fhem/log/myEss-2023-10-30.log | grep -e user_batt_status -euser_grid_status
2023-10-30_15:26:53 myEss user_batt_status: standby
2023-10-30_15:26:53 myEss user_grid_status: selling
2023-10-30_15:26:53 myEss user_grid_status: buying
2023-10-30_15:26:53 myEss user_batt_status: standby
2023-10-30_15:26:53 myEss user_grid_status: selling
2023-10-30_15:26:53 myEss user_grid_status: buying
2023-10-30_15:26:53 myEss user_batt_status: standby
2023-10-30_15:26:53 myEss user_grid_status: selling
2023-10-30_15:26:53 myEss user_grid_status: buying
2023-10-30_15:26:54 myEss user_batt_status: standby
2023-10-30_15:26:54 myEss user_grid_status: selling
2023-10-30_15:26:54 myEss user_grid_status: buying
2023-10-30_15:26:54 myEss user_batt_status: standby
2023-10-30_15:26:54 myEss user_grid_status: selling
2023-10-30_15:26:54 myEss user_grid_status: buying

Zweites Problem:

Im SVG lassen sichdie Variablen nicht als Text einblenden. Stellen wir im user-reading anstelle von "standby" oder so Zahlen ein, dann werden die angezeigt...
Zur Hilfe habe ich mir die dort auch im Titel einblenden lassen.

Das .gplot File:

# Created by FHEM/98_SVG.pm, 2023-10-26 17:23:37
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title 'Photvoltaik overview Batt:<L23>,buy:<L22>,sell:<L21> - user_batt_status: <L19>, user_grid_status: <L20>'
set ytics
set y2tics
set grid
set ylabel ""
set y2label ""

#Filelog_Solar 4:myEss./essinfo/common/LOAD/load_power\x3a::
#Filelog_Solar 4:myEss./essinfo/home/statistics/pcs_pv_total_power\x3a::
#Filelog_Solar 4:myEss./essinfo/common/PV/pv1_power\x3a::
#Filelog_Solar 4:myEss./essinfo/common/PV/pv2_power\x3a::
#Filelog_Solar 4:myEss./essinfo/home/statistics/grid_power\x3a::
#Filelog_Solar 4:myEss./essinfo/home/statistics/batconv_power\x3a::
#Filelog_Solar 4:myEss./essinfo/home/statistics/load_power\x3a::
#Filelog_Solar 4:myEss./essinfo/common/BATT/soc\x3a::
#Filelog_Solar 4:myEss.user_soc\x3a::
#Filelog_Solar 4:myEss.user_null\x3a::
#Filelog_Solar 4:myEss.user_null\x3a::
#Filelog_Solar 4:myEss.user_null\x3a::
#Filelog_Solar 4:myEss.user_null\x3a::
#Filelog_Solar 4:/essinfo/common/GRID/today_grid_feed_in_energy\x3a::
#Filelog_Solar 4:/essinfo/common/GRID/today_grid_power_purchase_energy\x3a::
#Filelog_Solar 4:/essinfo/common/PCS/today_pv_generation_sum\x3a::
#Filelog_Solar 4:/essinfo/common/LOAD/today_load_consumption_sum\x3a::
#Filelog_Solar 4:myEss./essinfo/common/LOAD/load_power\x3a::
#Filelog_Solar 4:myEss.user_batt_status\x3a::
#Filelog_Solar 4:myEss.user_grid_status\x3a::
#Filelog_Solar 4:myEss./essinfo/home/direction/is_grid_selling_\x3a::
#Filelog_Solar 4:myEss./essinfo/home/direction/is_grid_buying_\x3a::
#Filelog_Solar 4:myEss./essinfo/common/BATT/status\x3a::
#Filelog_Solar 4:myEss.user_null\x3a::

In einer "readingsgroup" werden die Textvariablen einwandfrei angezeigt... Warum?

Siehe Bild. Die "readingsgroup" ist dargestellt oberhalb des SVG und zeigt die eingerahmten Werte, die das SVG mit "0" anzeigt... :-)

Du darfst diesen Dateianhang nicht ansehen.

Bin sehr dankbar für Hilfe :-D


rudolfkoenig

ZitatIm Logfile tauchen die beiden user readings pro Zyklus (1 Minute) immer 5x auf. Verstehe ich nicht.
Wenn moeglich, sowas in der Quelle unterbinden.
Sonst kann man in FHEM event-min-interval setzen: https://fhem.de/commandref_modular.html#event-min-interval


ZitatIm SVG lassen sichdie Variablen nicht als Text einblenden.
Workaround: ein Ausdruck wie $fld[3]=~m/buying/?1:0 in der Funktionsspalte der .gplot Datei bzw. im SVG Editor.
Gilt fuer FileLog, in DbLog ist eine andere "Syntax" erforderlich.
Achtung: Leerzeichen sind nicht erlaubt.
Besser ist natuerlich die Daten gleich "richtig" zu speichern.

skamm71

Zitat von: rudolfkoenig am 30 Oktober 2023, 16:43:53
ZitatIm Logfile tauchen die beiden user readings pro Zyklus (1 Minute) immer 5x auf. Verstehe ich nicht.
Wenn moeglich, sowas in der Quelle unterbinden.
Sonst kann man in FHEM event-min-interval setzen: https://fhem.de/commandref_modular.html#event-min-interval


ZitatIm SVG lassen sichdie Variablen nicht als Text einblenden.
Workaround: ein Ausdruck wie $fld[3]=~m/buying/?1:0 in der Funktionsspalte der .gplot Datei bzw. im SVG Editor.
Gilt fuer FileLog, in DbLog ist eine andere "Syntax" erforderlich.
Achtung: Leerzeichen sind nicht erlaubt.
Besser ist natuerlich die Daten gleich "richtig" zu speichern.

Die Quelle liefert die "Rohdaten" nur einmal alle 60 Sekunden.
Das mehrfache Ausgeben erfolgt durch die Formeln, die anscheinend sowieso noch nicht das tun was sie sollen -> heute Morgen wird die Batterie geladen, Status sagt aber "standby"...

Hast Du dafür eine Idee das umzusetzen als userreadings?

essinfo/common/BATT/status=0 -> user_batt_status="(standby)"
essinfo/common/BATT/status=1 -> user_batt_status="(charging)"
essinfo/common/BATT/status=2 -> user_batt_status="discharging)"
/essinfo/home/direction/is_grid_buying_=0 ignorieren
/essinfo/home/direction/is_grid_buying_=1 -> user_grid_status="(purchasing)"
/essinfo/home/direction/is_grid_selling_=0 -> ignorieren
/essinfo/home/direction/is_grid_selling_=1 -> user_grid_status="(feeding)"

/essinfo/home/direction/is_grid_buying_ und  /essinfo/home/direction/is_grid_selling_ beides auf 0 dann user_grid_status="(standby)"

skamm71

Hallo zusammen

Ich habe heute mal wieder ein wenig an dem Plot gearbeitet. Wird schicker :-)

Nun habe ich aber ein Problem beim Erstellen der userReadings...
Ich bekomme die angezeigt, habe aber das Problem, dass es hier 5 Nachkommastellen gibt...
Ich hab auch schon gegoogelt und "sprintf" gefunden aber ich bekomme es nicht hin...

user_month_grid_feed:/essinfo/common/PCS/month_grid_feed_in_energy.* {return ReadingsVal("myEss","/essinfo/common/PCS/month_grid_feed_in_energy",0)*(0,07)/(100000)} ,

Wie bekomme ich es hin, dass ich in der Ausgabe der Variablen dann entweder 2 oder weniger Nachkommastellen habe?

Vielen Dank im Voraus :-)

rudolfkoenig

#1 (0,07) liefert ein Feld mit den Werten 0 und 7 zurueck, und perl rechnet mit 7 weiter(*). Vermutlich ist hier 0.07 gemeint.
#2 Runden: {sprintf("0.2f", ReadingsVal("myEss","/essinfo/common/PCS/month_grid_feed_in_energy",0)*0.07/100000)}


(*)
Ich habe es nicht rausgekommen, wann perl sich ueber solche Felder beschwert.
"PERL WARNING: Useless use of a constant (3) in void context" gibts mit:
{ (3,7) }
{ (3,0,7) }
{ {0,3,7) }
Keine Warnung gibts mit
{ (0,7) }
{ (1,7) }
{ (0,0,7) }
{ (1,0,7) }
Kann das jemand erklaeren?

skamm71

Vielen Dank!!!

Hatte heute morgen schon einen netten Kollegen von auf Arbeit der sich mit den tausend Klammern und Krams auskennt ;-)

So geht es dann tatsächlich:

user_month_grid_feed:/essinfo/common/PCS/month_grid_feed_in_energy.* {return sprintf("%.2f", ReadingsVal("myEss","/essinfo/common/PCS/month_grid_feed_in_energy",0)*(0,07)/(100000))}

Und so schaut es dann aus:

Du darfst diesen Dateianhang nicht ansehen.

Klasse wäre es nun noch den Punkt als Trennzeichen durch ein in Deutschland übliches Komma zu rsetzen... Auch hier habe ich schon gegoogelt aber nichts zufriedenstellendes gefunden... ;-)

LG Sascha