NEWS
Zahl in Datenpunkt springt zwischen + und -
-
Hallo zusammen,
hatte mir eigentlich eine nette Sache in der VIS zusammengebaut, die mir die bisherigen Kosten (YTD) und eine Hochrechnung darstellen soll. Dies sind alles positive Werte, die per Blockly kalkuliert werden. Lediglich die Einspeisung der Photovoltaik ist ein negativer Wert.
Mein Problem: Die Summe im YTD springt immer alle paar Sekunden und berücksichtigt manchmal die Einspeisung (-0,87 € im Screenshot) oder auch nicht. Habe nun auch mal versuchshalber im Skript die Einspeisung ebenfalls auf einen positiven Wert (+0,08 €) geändert und hier beobachte ich auch, dass im Objekt selber der Wert auch zwischen negativ und positiv hin und herspringt. Macht ja eigtl keinen Sinn.
Habt ihr eine Idee, wo mir hier der "Aktualisieren"-Block ein Schnippchen schlagen könnte? Ist irgendwie unsauber "programmiert".
VIS:
Datenpunkt: PV_Ertrag_pro_KwH als negativer Wert
Datenpunkt: PV_Ertrag_pro_KwH als positiver Wert
-
@bostil sagte in Zahl in Datenpunkt springt zwischen + und -:
die per Blockly kalkuliert werden
hab kein Blockly gesehen
-
Ich möchte eigentlich keinem zumuten sich hier reinzufuchsen. Aber hatte im ersten Thread ganz unten mal das Blockly als Export beigefügt. Die Frage ist eher allgemein. Alle Datenobjekte sind als "Number" angelegt. Interessant war, dass ich teils im Blockly wirklich Vorzeichen geändert hatte, aber dies dann in den Datenpunkten teils zu einem hin- und herspringen zwischen negativen und positiven Werten führte. Nur ein Löschen und neues Erstellen hatte dann Abhilfe geschaffen.
Screenshot vom Blockly:
Berechnung YTD über Summe von Liste:
Hier ist wieder der Status, wo die YTD-Summe die -0,87 € aus dem PV-Ertrag nicht berücksichtigt:
... und hier dann wieder zurückgehüpft:
-
@bostil ich fürcht du läufst in die async Falle.
du schreibst in einen Datenpunkt und liest den direkt wieder für eine Rechnung aus.
In der Millisekunde istcder State noch nicht befüllt.Für solche Rechnungen muss man mit Variablen arbeiten.
-
Das ist schonmal sehr hilfreich. Nun muss ich mich nur noch mit Variablen befassen. Schade, dass es nicht geht. Weitere Pausen einarbeiten bewirkt auch nichts, oder?
-
@bostil sagte in Zahl in Datenpunkt springt zwischen + und -:
Weitere Pausen einarbeiten bewirkt auch nichts, oder?
Weitere Pausen
- machen das Skript langsamer
- lassen zu das du um die Problematik herum unsauber arbeitest anstatt gleich sauber zu arbeiten
- sorgen dafür das das Problem "nur manchmal" auftritt
- machen das Skript schwer zu debuggen.
Neben dem normalen "Async" Problem hast du:
- die Berechnung von
Nebenkosten_Gesamtsumme_FC
undNebenkosten_Gesamtsumme_YTD
jeweils um 1 Sekunde verzögert - die Berechnung von
Nebenkosten_Gesamtsumme_YTD_proMonat
, welche auf die oben berechnete Nebenkosten YTD zugreift nicht verzögert - die Berechnung von
Nebenkosten_Gesamtsumme_FC_proMonat
nach dem gleichen Muster nicht verzögert.
Dadurch finden die Berechnungen der Summen pro Monat statt bevor die Aufsummierung der Kosten stattfindet.
Aber das ist nur die Spitze des Eisberges:
- Du definierst Konstanten im Skript (echte konstanten) und aktualisierst diese jede Minute, obwohl diese sich nicht ändern können
- Du berechnest aus diesen Konstanten weitere Konstanten (fix) und speicherst diese auch jede Minute in weiteren Datenpunkten
- Du führst Berechnungen durch die sich nur monatlich bzw. täglich ändern, und das jede Minute.
Letztendlich solltest du das Skript in 3 Teile teilen.
Einmal den der nur bei Start ausgeführt wird. Darin sind alle Konstanten abgelegt. Du kannst sie dann im Skript anpassen, und wenn du das Skript neu startest wird ab dann mit den neuen Konstanten gerechnet. Dabei sollten die Werte zunächst in Variablen gespeichert und dann in die Datenpunkte geschrieben werden. Im Skript selber rechnest Du dann weiter mit den Variablen.
Einmal den der nur einmal pro Tag laufen muss, in dem du deine Monatlichen und Täglichen Werte berechnest. Auch hier gilt: Berechnung von Zwischenwerten in Variablen machen so das du nie auf Datenpunkte zugreifen musst die du vorher aktualisiert hast.
Als letztes den Teil der schneller läuft. Da reicht es die Werte zu berechnen die sich auf die States beziehen die den Stromverbrauch bzw. die Stromlieferung dieses Jahr und/oder diesen Monat referenzierten.
Ob dieser wirklich einmal pro Minute laufen soll musst Du dann bewerten.@bostil sagte in Zahl in Datenpunkt springt zwischen + und -:
Nun muss ich mich nur noch mit Variablen befassen.
Mit variablen solltest Du dich sowieso befassen. Betrachte sie einfach als 'Datenpunkte die nur einen Wert behalten wenn das Skript läuft'
A.