Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Zahl in Datenpunkt springt zwischen + und -

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    Zahl in Datenpunkt springt zwischen + und -

    This topic has been deleted. Only users with topic management privileges can see it.
    • Bostil
      Bostil last edited by

      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:
      25dfd2bf-6081-47a6-aaf7-ea63d8847500-image.png

      Datenpunkt: PV_Ertrag_pro_KwH als negativer Wert
      27f24b71-d47b-43df-b59b-dee198ab1457-image.png

      Datenpunkt: PV_Ertrag_pro_KwH als positiver Wert
      954080b1-0852-4215-ac7f-413d9ed16bf9-image.png

      Blockly_Bostil.txt

      Homoran 1 Reply Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @Bostil last edited by

        @bostil sagte in Zahl in Datenpunkt springt zwischen + und -:

        die per Blockly kalkuliert werden

        hab kein Blockly gesehen

        1 Reply Last reply Reply Quote 1
        • Bostil
          Bostil last edited by

          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:

          b72505e9-b96c-40f2-89ff-211bca82f5eb-image.png

          Berechnung YTD über Summe von Liste:

          f22ccd47-361b-490f-b66a-f38dafa01399-image.png

          Hier ist wieder der Status, wo die YTD-Summe die -0,87 € aus dem PV-Ertrag nicht berücksichtigt:

          8efee104-9eab-4df5-8123-19f05dc5ac18-image.png

          ... und hier dann wieder zurückgehüpft:

          36966efa-2146-4f0e-96e0-19a65f94d0b4-image.png

          Homoran 1 Reply Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators @Bostil last edited by

            @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.

            1 Reply Last reply Reply Quote 1
            • Bostil
              Bostil last edited by

              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?

              Asgothian 1 Reply Last reply Reply Quote 0
              • Asgothian
                Asgothian Developer @Bostil last edited by

                @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 und Nebenkosten_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.

                1 Reply Last reply Reply Quote 1
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                988
                Online

                31.6k
                Users

                79.5k
                Topics

                1.3m
                Posts

                3
                6
                469
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo