Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly
  5. Berechnung erst starten sobald mehrere Werte aktuell sind

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    725

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    18
    1
    5.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.5k

Berechnung erst starten sobald mehrere Werte aktuell sind

Geplant Angeheftet Gesperrt Verschoben Blockly
21 Beiträge 7 Kommentatoren 836 Aufrufe 4 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • C Offline
    C Offline
    Christian23
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,
    ich habe folgendes Problem. Ich berechne mit mehreren Scripten unterschiedliche Werte (PVErzeugung, Netzbezug/Netzeinspeisung).
    Die Werte aus diesen Scripten berechnen wiederum andere Werte. So berechne ich z.B. den Hausverbrauch.
    Jetzt habe ich aber das Problem, dass die Scripte zu unterschiedlichen Zeiten fertig sind. Z.B werden bei Netzbezug/Netzeinspeisung die Werte alle 2 Sekunden ermittelt und dann der Mittelwert berechnet und erst dann das Ergebnis in ein Objekt geschrieben. Sonst habe ich teilweise zu hohe Schwankungen in der Berechnung.

    Nachdem die Werte zu unterschiedlichen Zeiten zur Verfügung stehen, kann es jetzt leider passieren, dass die Berechnung manchmal falsch sind. So kommt dann z.B. beim Hausverbrauch ein Minus-Wert raus.

    Meine Idee war jetzt, dass ich die Berechnung erst starte, sobald alle benötigten Berechnungen vorliegen und die Werte aktuell bei den Objekten eingetragen wurden.

    Beispiel
    Sobald Wert1, Wert2, Wert3, Wert4 geändert wurden, dann berechne Wert5. Dabei soll er aber erst den Wert 5 berechnen, wenn die 4 anderen Werte neue Werte haben.
    Falls ein Wert etwas später geändert wird soll die Berechnung warten.

    Hat vielleicht einer von Euch eine Idee wie man das umsetzen könnte?

    Oder gibt es dafür eine schönere/bessere Lösung?

    Danke im Voraus.
    Christian

    mickymM OliverIOO 2 Antworten Letzte Antwort
    0
    • C Christian23

      Hallo zusammen,
      ich habe folgendes Problem. Ich berechne mit mehreren Scripten unterschiedliche Werte (PVErzeugung, Netzbezug/Netzeinspeisung).
      Die Werte aus diesen Scripten berechnen wiederum andere Werte. So berechne ich z.B. den Hausverbrauch.
      Jetzt habe ich aber das Problem, dass die Scripte zu unterschiedlichen Zeiten fertig sind. Z.B werden bei Netzbezug/Netzeinspeisung die Werte alle 2 Sekunden ermittelt und dann der Mittelwert berechnet und erst dann das Ergebnis in ein Objekt geschrieben. Sonst habe ich teilweise zu hohe Schwankungen in der Berechnung.

      Nachdem die Werte zu unterschiedlichen Zeiten zur Verfügung stehen, kann es jetzt leider passieren, dass die Berechnung manchmal falsch sind. So kommt dann z.B. beim Hausverbrauch ein Minus-Wert raus.

      Meine Idee war jetzt, dass ich die Berechnung erst starte, sobald alle benötigten Berechnungen vorliegen und die Werte aktuell bei den Objekten eingetragen wurden.

      Beispiel
      Sobald Wert1, Wert2, Wert3, Wert4 geändert wurden, dann berechne Wert5. Dabei soll er aber erst den Wert 5 berechnen, wenn die 4 anderen Werte neue Werte haben.
      Falls ein Wert etwas später geändert wird soll die Berechnung warten.

      Hat vielleicht einer von Euch eine Idee wie man das umsetzen könnte?

      Oder gibt es dafür eine schönere/bessere Lösung?

      Danke im Voraus.
      Christian

      mickymM Offline
      mickymM Offline
      mickym
      Most Active
      schrieb am zuletzt editiert von mickym
      #2

      @christian23 In Node-Red macht man das so, dass man alle Werte mit einer JOIN Node in einem Objekt sammelt. Erst wenn die Anzahl der Werte/Eigenschaften voll ist, wird dieses Objekt weitergegeben. Das musst du halt dann mit Deiner Logikmaschine - also im Blockly - selbst implementieren. Merken tut sich die JOIN Node da anhand der topics. Sprich Du sammelst einfach alle Werte in einer Variablen in einem Objekt und überprüfst, dass jede für jede Eigenschaft ein Wert eingetrudelt ist.

      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

      paul53P 1 Antwort Letzte Antwort
      0
      • mickymM mickym

        @christian23 In Node-Red macht man das so, dass man alle Werte mit einer JOIN Node in einem Objekt sammelt. Erst wenn die Anzahl der Werte/Eigenschaften voll ist, wird dieses Objekt weitergegeben. Das musst du halt dann mit Deiner Logikmaschine - also im Blockly - selbst implementieren. Merken tut sich die JOIN Node da anhand der topics. Sprich Du sammelst einfach alle Werte in einer Variablen in einem Objekt und überprüfst, dass jede für jede Eigenschaft ein Wert eingetrudelt ist.

        paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von paul53
        #3

        @mickym sagte: alle Werte mit einer JOIN Node in einem Objekt sammelt. Erst wenn die Anzahl der Werte/Eigenschaften voll ist, wird dieses Objekt weitergegeben.

        Die Idee ist nicht schlecht, nur dass Objekte in Blockly schlecht unterstützt werden, so dass man besser ein Array verwendet.

        Bild_2022-09-28_132733790.png

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        MatzebhvM 1 Antwort Letzte Antwort
        0
        • C Christian23

          Hallo zusammen,
          ich habe folgendes Problem. Ich berechne mit mehreren Scripten unterschiedliche Werte (PVErzeugung, Netzbezug/Netzeinspeisung).
          Die Werte aus diesen Scripten berechnen wiederum andere Werte. So berechne ich z.B. den Hausverbrauch.
          Jetzt habe ich aber das Problem, dass die Scripte zu unterschiedlichen Zeiten fertig sind. Z.B werden bei Netzbezug/Netzeinspeisung die Werte alle 2 Sekunden ermittelt und dann der Mittelwert berechnet und erst dann das Ergebnis in ein Objekt geschrieben. Sonst habe ich teilweise zu hohe Schwankungen in der Berechnung.

          Nachdem die Werte zu unterschiedlichen Zeiten zur Verfügung stehen, kann es jetzt leider passieren, dass die Berechnung manchmal falsch sind. So kommt dann z.B. beim Hausverbrauch ein Minus-Wert raus.

          Meine Idee war jetzt, dass ich die Berechnung erst starte, sobald alle benötigten Berechnungen vorliegen und die Werte aktuell bei den Objekten eingetragen wurden.

          Beispiel
          Sobald Wert1, Wert2, Wert3, Wert4 geändert wurden, dann berechne Wert5. Dabei soll er aber erst den Wert 5 berechnen, wenn die 4 anderen Werte neue Werte haben.
          Falls ein Wert etwas später geändert wird soll die Berechnung warten.

          Hat vielleicht einer von Euch eine Idee wie man das umsetzen könnte?

          Oder gibt es dafür eine schönere/bessere Lösung?

          Danke im Voraus.
          Christian

          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          schrieb am zuletzt editiert von OliverIO
          #4

          @christian23
          Nur mal eine Logik frage.
          Ab wann werden den die Werte alt und ein bereits als gemeldeter wert müsste dann wieder zurückgesetzt werden?
          Warum ist die Berechnung nicht zustandslos,
          Also es kann zu jedem Zeitpunkt mit allen Werten gerechnet werden egal wie alt/ aktuell sie sind?
          Ich fürchte wenn du dein beschriebenes Problem gelöst hast, wird ein neues auftauchen das mein beschriebenes Szenario zur Grundlage hat.

          Aber zu dieser Lösung.
          ich würde es über ein bit register lösen.
          du nimmst eine variable oder datenpunkt und setzt ihn auf 0. das passiert auch immer nachdem deine berechnung erfolgt ist.
          jeder wert auf den du wartest ist ein bit in diesem wert, also

          2**0 für datenpunkt 1
          2**1 für datenpunkt 2
          2**2 für datenpunkt 3
          2**3 für datenpunkt 4
          

          und sofort
          jedem dieser positionen 0,1,2,3 ordnest du einen datenpunkt zu
          wenn sich nun ein wert ändert, setzt du das entsprechende bit
          mit folgender operation, hier am beispiel dem 4.datenpunkt
          in register mekrst du die den aktuellen meldestatus

          register |=2**3
          

          wenn du auf alle 4 werte wartest, dann prüfst du bei jeder Meldung dann am Ende ob register einen gewissen wert überschreitet, also

          if (register>= (2**0+2**1+2**2+2**3)) {
            //hier dann deine berechnung
          }
          

          Anmerkungen
          Für den Ausdruck 2**0+2**1+2**2+2**3 kannst du auch den berechneten Wert hinschreiben also in diesem Fall 15

          den ** operator aus javascript kennst du in der mathematik normalerweise als ^ Operator, dieser hat in javascript aber eine andere bedeutung

          Meine Adapter und Widgets
          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
          Links im Profil

          mickymM C 3 Antworten Letzte Antwort
          0
          • OliverIOO OliverIO

            @christian23
            Nur mal eine Logik frage.
            Ab wann werden den die Werte alt und ein bereits als gemeldeter wert müsste dann wieder zurückgesetzt werden?
            Warum ist die Berechnung nicht zustandslos,
            Also es kann zu jedem Zeitpunkt mit allen Werten gerechnet werden egal wie alt/ aktuell sie sind?
            Ich fürchte wenn du dein beschriebenes Problem gelöst hast, wird ein neues auftauchen das mein beschriebenes Szenario zur Grundlage hat.

            Aber zu dieser Lösung.
            ich würde es über ein bit register lösen.
            du nimmst eine variable oder datenpunkt und setzt ihn auf 0. das passiert auch immer nachdem deine berechnung erfolgt ist.
            jeder wert auf den du wartest ist ein bit in diesem wert, also

            2**0 für datenpunkt 1
            2**1 für datenpunkt 2
            2**2 für datenpunkt 3
            2**3 für datenpunkt 4
            

            und sofort
            jedem dieser positionen 0,1,2,3 ordnest du einen datenpunkt zu
            wenn sich nun ein wert ändert, setzt du das entsprechende bit
            mit folgender operation, hier am beispiel dem 4.datenpunkt
            in register mekrst du die den aktuellen meldestatus

            register |=2**3
            

            wenn du auf alle 4 werte wartest, dann prüfst du bei jeder Meldung dann am Ende ob register einen gewissen wert überschreitet, also

            if (register>= (2**0+2**1+2**2+2**3)) {
              //hier dann deine berechnung
            }
            

            Anmerkungen
            Für den Ausdruck 2**0+2**1+2**2+2**3 kannst du auch den berechneten Wert hinschreiben also in diesem Fall 15

            den ** operator aus javascript kennst du in der mathematik normalerweise als ^ Operator, dieser hat in javascript aber eine andere bedeutung

            mickymM Offline
            mickymM Offline
            mickym
            Most Active
            schrieb am zuletzt editiert von mickym
            #5

            @oliverio Nein die JOIN Node funktioniert so, dass alle Werte in ihren Eigenschaften oder beim Array halt die Indizes aktualisiert werden (Arrays sind ja in JS streng genommen auch Objekte mit dem Index als Eigenschaft ;) ), das Objekt aber erst released wird, wenn die letzte Eigenschaft gesetzt ist. Dann beginnt das wieder von vorne. Insofern sind alle Werte aktuell bzw. entsprechen dem letzten gelieferten Stand, wenn released wird, aber die letzte Eigenschaft bestimmt wann.

            Aber Du hast natürlich Recht - wenn der letzte Wert mal ganz ausfällt und am nächsten Zyklus als Erstes meldet, dann sind in den anderen Eigenschaften noch die alten Werte drin. Also funktioniert das ganze nur, wenn die Werte in einem Zyklus zuverlässig kommen. In einer JOIN Node - kann man das auch resetten, so dass man dann wieder von vorne anfangen kann, wenn in einem bestimmten Zeitraum kein Objekt/Array released wurde. Müsste man hier halt alles manuell abbilden.

            Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

            paul53P OliverIOO 2 Antworten Letzte Antwort
            0
            • mickymM mickym

              @oliverio Nein die JOIN Node funktioniert so, dass alle Werte in ihren Eigenschaften oder beim Array halt die Indizes aktualisiert werden (Arrays sind ja in JS streng genommen auch Objekte mit dem Index als Eigenschaft ;) ), das Objekt aber erst released wird, wenn die letzte Eigenschaft gesetzt ist. Dann beginnt das wieder von vorne. Insofern sind alle Werte aktuell bzw. entsprechen dem letzten gelieferten Stand, wenn released wird, aber die letzte Eigenschaft bestimmt wann.

              Aber Du hast natürlich Recht - wenn der letzte Wert mal ganz ausfällt und am nächsten Zyklus als Erstes meldet, dann sind in den anderen Eigenschaften noch die alten Werte drin. Also funktioniert das ganze nur, wenn die Werte in einem Zyklus zuverlässig kommen. In einer JOIN Node - kann man das auch resetten, so dass man dann wieder von vorne anfangen kann, wenn in einem bestimmten Zeitraum kein Objekt/Array released wurde. Müsste man hier halt alles manuell abbilden.

              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von paul53
              #6

              @mickym sagte: wenn der letzte Wert mal ganz ausfällt und am nächsten Zyklus als Erstes meldet

              Es sind verschiedene Geräte, die in unterschiedlichen Zeitabständen senden, also gibt es keinen Zyklus in dem Sinne. Das Gerät mit der niedrigsten Sendefrequenz bestimmt i.d.R. den Zyklus.

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              mickymM HomoranH 2 Antworten Letzte Antwort
              0
              • paul53P paul53

                @mickym sagte: wenn der letzte Wert mal ganz ausfällt und am nächsten Zyklus als Erstes meldet

                Es sind verschiedene Geräte, die in unterschiedlichen Zeitabständen senden, also gibt es keinen Zyklus in dem Sinne. Das Gerät mit der niedrigsten Sendefrequenz bestimmt i.d.R. den Zyklus.

                mickymM Offline
                mickymM Offline
                mickym
                Most Active
                schrieb am zuletzt editiert von
                #7

                @paul53 sagte in Berechnung erst starten sobald mehrere Werte aktuell sind:

                @mickym sagte: wenn der letzte Wert mal ganz ausfällt und am nächsten Zyklus als Erstes meldet

                Es sind verschiedene Geräte, die in unterschiedlichen Zeitabständen senden, also gibt es keinen Zyklus in dem Sinne. Das Gerät mit der niedrigster Sendefrequenz bestimmt i.d.R. den Zyklus.

                Richtig, das Gerät mit der niedrigsten Sendefrequenz bestimmt den Zyklus. :) - Ich hatte ja nur mal den Fall geschildert, dass wenn dieses Gerät mal gar nichts meldet, man dann ggf. den Zyklus resetten müsste, um quasi den Zyklus "beieinander" zu behalten.

                Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                1 Antwort Letzte Antwort
                0
                • OliverIOO OliverIO

                  @christian23
                  Nur mal eine Logik frage.
                  Ab wann werden den die Werte alt und ein bereits als gemeldeter wert müsste dann wieder zurückgesetzt werden?
                  Warum ist die Berechnung nicht zustandslos,
                  Also es kann zu jedem Zeitpunkt mit allen Werten gerechnet werden egal wie alt/ aktuell sie sind?
                  Ich fürchte wenn du dein beschriebenes Problem gelöst hast, wird ein neues auftauchen das mein beschriebenes Szenario zur Grundlage hat.

                  Aber zu dieser Lösung.
                  ich würde es über ein bit register lösen.
                  du nimmst eine variable oder datenpunkt und setzt ihn auf 0. das passiert auch immer nachdem deine berechnung erfolgt ist.
                  jeder wert auf den du wartest ist ein bit in diesem wert, also

                  2**0 für datenpunkt 1
                  2**1 für datenpunkt 2
                  2**2 für datenpunkt 3
                  2**3 für datenpunkt 4
                  

                  und sofort
                  jedem dieser positionen 0,1,2,3 ordnest du einen datenpunkt zu
                  wenn sich nun ein wert ändert, setzt du das entsprechende bit
                  mit folgender operation, hier am beispiel dem 4.datenpunkt
                  in register mekrst du die den aktuellen meldestatus

                  register |=2**3
                  

                  wenn du auf alle 4 werte wartest, dann prüfst du bei jeder Meldung dann am Ende ob register einen gewissen wert überschreitet, also

                  if (register>= (2**0+2**1+2**2+2**3)) {
                    //hier dann deine berechnung
                  }
                  

                  Anmerkungen
                  Für den Ausdruck 2**0+2**1+2**2+2**3 kannst du auch den berechneten Wert hinschreiben also in diesem Fall 15

                  den ** operator aus javascript kennst du in der mathematik normalerweise als ^ Operator, dieser hat in javascript aber eine andere bedeutung

                  mickymM Offline
                  mickymM Offline
                  mickym
                  Most Active
                  schrieb am zuletzt editiert von mickym
                  #8

                  @oliverio, @paul53 Na am Prinzip ist das nun egal, ob ich es über ein Bitregister, ein Array und Index oder ein Objekt mit Eigenschaften lösen.

                  Das Prinzip ist doch in allen 3 Fällen das Gleiche, das gewartet wird bis alles vollständig ist. ;)

                  Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                  1 Antwort Letzte Antwort
                  0
                  • mickymM mickym

                    @oliverio Nein die JOIN Node funktioniert so, dass alle Werte in ihren Eigenschaften oder beim Array halt die Indizes aktualisiert werden (Arrays sind ja in JS streng genommen auch Objekte mit dem Index als Eigenschaft ;) ), das Objekt aber erst released wird, wenn die letzte Eigenschaft gesetzt ist. Dann beginnt das wieder von vorne. Insofern sind alle Werte aktuell bzw. entsprechen dem letzten gelieferten Stand, wenn released wird, aber die letzte Eigenschaft bestimmt wann.

                    Aber Du hast natürlich Recht - wenn der letzte Wert mal ganz ausfällt und am nächsten Zyklus als Erstes meldet, dann sind in den anderen Eigenschaften noch die alten Werte drin. Also funktioniert das ganze nur, wenn die Werte in einem Zyklus zuverlässig kommen. In einer JOIN Node - kann man das auch resetten, so dass man dann wieder von vorne anfangen kann, wenn in einem bestimmten Zeitraum kein Objekt/Array released wurde. Müsste man hier halt alles manuell abbilden.

                    OliverIOO Offline
                    OliverIOO Offline
                    OliverIO
                    schrieb am zuletzt editiert von
                    #9

                    @mickym sagte in Berechnung erst starten sobald mehrere Werte aktuell sind:

                    Nein die JOIN Node funktioniert

                    ich weiß wie die join node funktioniert.
                    in meinem ersten absatz wollte ich nur darauf hinweisen, warum nicht zu jedem zeit die werte zur Berechnung verwendet werden können.
                    Das was ihr im folgenden Beschrieben habt mit, der kürzeste Zyklus bestimmt die Berechnung entspricht ja dem was ich gesagt habe, das bei jeder Änderung die Berechnung durchgeführt werden kann.

                    In meinem 2.Absatz habe ich versucht einen javascript lösungsweg aufzuzeigen, falls er nicht node red verwenden will.

                    Meine Adapter und Widgets
                    TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                    Links im Profil

                    1 Antwort Letzte Antwort
                    0
                    • mickymM Offline
                      mickymM Offline
                      mickym
                      Most Active
                      schrieb am zuletzt editiert von
                      #10

                      Super: Dann haben wir jetzt für alle 3 am häufigsten benutzten Logikmaschinen eine Lösung. ;) -
                      Ich denke aber - @paul53's Lösung wird wahrscheinlich siegen. ;) - Der TE hat es ja in die Blockly Rubrik gestellt. :)

                      😁 - So was sollten wir öfter machen. ;)

                      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                      OliverIOO 1 Antwort Letzte Antwort
                      0
                      • paul53P paul53

                        @mickym sagte: wenn der letzte Wert mal ganz ausfällt und am nächsten Zyklus als Erstes meldet

                        Es sind verschiedene Geräte, die in unterschiedlichen Zeitabständen senden, also gibt es keinen Zyklus in dem Sinne. Das Gerät mit der niedrigsten Sendefrequenz bestimmt i.d.R. den Zyklus.

                        HomoranH Nicht stören
                        HomoranH Nicht stören
                        Homoran
                        Global Moderator Administrators
                        schrieb am zuletzt editiert von
                        #11

                        @paul53 sagte:

                        @mickym sagte: wenn der letzte Wert mal ganz ausfällt und am nächsten Zyklus als Erstes meldet

                        Es sind verschiedene Geräte, die in unterschiedlichen Zeitabständen senden, also gibt es keinen Zyklus in dem Sinne. Das Gerät mit der niedrigsten Sendefrequenz bestimmt i.d.R. den Zyklus.

                        und selbst wenn dann nur noch seltener gerechnet wird müssen die Werte nicht passen.
                        ich rechne nur den Hausverbrauch aus Smartmeter und Wechselrichter.
                        dazu startet die Abfrage des Wechselrichter wenn der Smartmeter liefert.

                        Bei stark wechselnder Bewölkung habe ich dann falsche Verbrauchswerte

                        kein Support per PN! - Fragen im Forum stellen -
                        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                        Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
                        der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                        paul53P 1 Antwort Letzte Antwort
                        0
                        • HomoranH Homoran

                          @paul53 sagte:

                          @mickym sagte: wenn der letzte Wert mal ganz ausfällt und am nächsten Zyklus als Erstes meldet

                          Es sind verschiedene Geräte, die in unterschiedlichen Zeitabständen senden, also gibt es keinen Zyklus in dem Sinne. Das Gerät mit der niedrigsten Sendefrequenz bestimmt i.d.R. den Zyklus.

                          und selbst wenn dann nur noch seltener gerechnet wird müssen die Werte nicht passen.
                          ich rechne nur den Hausverbrauch aus Smartmeter und Wechselrichter.
                          dazu startet die Abfrage des Wechselrichter wenn der Smartmeter liefert.

                          Bei stark wechselnder Bewölkung habe ich dann falsche Verbrauchswerte

                          paul53P Offline
                          paul53P Offline
                          paul53
                          schrieb am zuletzt editiert von paul53
                          #12

                          @homoran sagte: müssen die Werte nicht passen.

                          Richtig. Aber die Wahrscheinlichkeit ist höher, dass die Werte zueinander passen - vor allem dann, wenn ein Gerät mit hoher Frequenz (alle 2 s) sendet. Wenn das langsame Gerät allerdings intern eine zeitliche Mittelwertbildung vornimmt, müsste diese für das schnelle Gerät nachgebildet werden.

                          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                          1 Antwort Letzte Antwort
                          0
                          • mickymM Offline
                            mickymM Offline
                            mickym
                            Most Active
                            schrieb am zuletzt editiert von mickym
                            #13

                            Ich finde den Median eh viel besser, als die Mittelwertbildung - da damit einfach Ausreißer besser ausgefiltert werden.

                            Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                            1 Antwort Letzte Antwort
                            0
                            • mickymM mickym

                              Super: Dann haben wir jetzt für alle 3 am häufigsten benutzten Logikmaschinen eine Lösung. ;) -
                              Ich denke aber - @paul53's Lösung wird wahrscheinlich siegen. ;) - Der TE hat es ja in die Blockly Rubrik gestellt. :)

                              😁 - So was sollten wir öfter machen. ;)

                              OliverIOO Offline
                              OliverIOO Offline
                              OliverIO
                              schrieb am zuletzt editiert von
                              #14

                              @mickym sagte in Berechnung erst starten sobald mehrere Werte aktuell sind:

                              Der TE hat es ja in die Blockly

                              ach herrjeh, dann hätt ich ja nix schreiben müssen, leider nicht gesehen

                              Meine Adapter und Widgets
                              TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                              Links im Profil

                              1 Antwort Letzte Antwort
                              0
                              • OliverIOO OliverIO

                                @christian23
                                Nur mal eine Logik frage.
                                Ab wann werden den die Werte alt und ein bereits als gemeldeter wert müsste dann wieder zurückgesetzt werden?
                                Warum ist die Berechnung nicht zustandslos,
                                Also es kann zu jedem Zeitpunkt mit allen Werten gerechnet werden egal wie alt/ aktuell sie sind?
                                Ich fürchte wenn du dein beschriebenes Problem gelöst hast, wird ein neues auftauchen das mein beschriebenes Szenario zur Grundlage hat.

                                Aber zu dieser Lösung.
                                ich würde es über ein bit register lösen.
                                du nimmst eine variable oder datenpunkt und setzt ihn auf 0. das passiert auch immer nachdem deine berechnung erfolgt ist.
                                jeder wert auf den du wartest ist ein bit in diesem wert, also

                                2**0 für datenpunkt 1
                                2**1 für datenpunkt 2
                                2**2 für datenpunkt 3
                                2**3 für datenpunkt 4
                                

                                und sofort
                                jedem dieser positionen 0,1,2,3 ordnest du einen datenpunkt zu
                                wenn sich nun ein wert ändert, setzt du das entsprechende bit
                                mit folgender operation, hier am beispiel dem 4.datenpunkt
                                in register mekrst du die den aktuellen meldestatus

                                register |=2**3
                                

                                wenn du auf alle 4 werte wartest, dann prüfst du bei jeder Meldung dann am Ende ob register einen gewissen wert überschreitet, also

                                if (register>= (2**0+2**1+2**2+2**3)) {
                                  //hier dann deine berechnung
                                }
                                

                                Anmerkungen
                                Für den Ausdruck 2**0+2**1+2**2+2**3 kannst du auch den berechneten Wert hinschreiben also in diesem Fall 15

                                den ** operator aus javascript kennst du in der mathematik normalerweise als ^ Operator, dieser hat in javascript aber eine andere bedeutung

                                C Offline
                                C Offline
                                Christian23
                                schrieb am zuletzt editiert von
                                #15

                                @oliverio
                                Herzlichen Dank für die Info. Ich werde es probieren, damit umzusetzen. 👍

                                A 1 Antwort Letzte Antwort
                                0
                                • C Christian23

                                  @oliverio
                                  Herzlichen Dank für die Info. Ich werde es probieren, damit umzusetzen. 👍

                                  A Offline
                                  A Offline
                                  Andersmacher
                                  schrieb am zuletzt editiert von
                                  #16

                                  @christian23 Ich möchte mich in Eure Diskussion nicht einmischen, aber einen kurzen Hinweis geben:
                                  Seid Ihr sicher, daß das Problem (nur) an unterschiedlichen Zeitpunkten/Laufzeiten für Berechnungen in Euren Skripten liegt?
                                  Ich meine mich zu erinnern (finde ihn aber momentan nicht), daß es bereits einen Thread zu dieser Problematik gibt, der als Ursache die MOD-Bus-Abfrage der PV-Werte aus dem WR nennt. Zu mindest bei mir ist das auch so:
                                  Die Rückgabewerte einer Modbusabfrage des WR beinhalten Werte, die (zumindest teilweise) aus unterschiedlichen Meßperioden innerhalb des WR stammen, je nach dem, wann genau die Modbusabfrage gestartet wurde. Das Problem tritt aus meiner Sicht also bereits beim Beschreiben der Modbusregister im WR auf. Ich habe nicht in Erinnerung, daß es dafür damals eine Lösung gab.

                                  ioBroker auf Raspi4B 8GB Debian(12) 64Bit

                                  1 Antwort Letzte Antwort
                                  0
                                  • paul53P paul53

                                    @mickym sagte: alle Werte mit einer JOIN Node in einem Objekt sammelt. Erst wenn die Anzahl der Werte/Eigenschaften voll ist, wird dieses Objekt weitergegeben.

                                    Die Idee ist nicht schlecht, nur dass Objekte in Blockly schlecht unterstützt werden, so dass man besser ein Array verwendet.

                                    Bild_2022-09-28_132733790.png

                                    MatzebhvM Offline
                                    MatzebhvM Offline
                                    Matzebhv
                                    schrieb am zuletzt editiert von Matzebhv
                                    #17

                                    @paul53 Moin, ich versuche grade dein Blockly zu verstehen. An welcher Stelle des Blockly wird denn die Variable "result" befüllt? Oder fehlt hier die Berechnung der Werte?

                                    Gruß
                                    Matze

                                    blockly.png

                                    paul53P 1 Antwort Letzte Antwort
                                    0
                                    • MatzebhvM Matzebhv

                                      @paul53 Moin, ich versuche grade dein Blockly zu verstehen. An welcher Stelle des Blockly wird denn die Variable "result" befüllt? Oder fehlt hier die Berechnung der Werte?

                                      Gruß
                                      Matze

                                      blockly.png

                                      paul53P Offline
                                      paul53P Offline
                                      paul53
                                      schrieb am zuletzt editiert von
                                      #18

                                      @matzebhv sagte: Oder fehlt hier die Berechnung der Werte?

                                      Ja, result ist das Ergebnis einer beliebigen Berechnung.

                                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                      MatzebhvM 1 Antwort Letzte Antwort
                                      0
                                      • paul53P paul53

                                        @matzebhv sagte: Oder fehlt hier die Berechnung der Werte?

                                        Ja, result ist das Ergebnis einer beliebigen Berechnung.

                                        MatzebhvM Offline
                                        MatzebhvM Offline
                                        Matzebhv
                                        schrieb am zuletzt editiert von
                                        #19

                                        @paul53 Danke für deine Antwort. Die Berechnung würde an Stelle des Kommentar stehen, oder? Bin bei Schleifen nicht wirklich sattelfest.

                                        Gruß
                                        Matze

                                        paul53P 1 Antwort Letzte Antwort
                                        0
                                        • MatzebhvM Matzebhv

                                          @paul53 Danke für deine Antwort. Die Berechnung würde an Stelle des Kommentar stehen, oder? Bin bei Schleifen nicht wirklich sattelfest.

                                          Gruß
                                          Matze

                                          paul53P Offline
                                          paul53P Offline
                                          paul53
                                          schrieb am zuletzt editiert von
                                          #20

                                          @matzebhv sagte: Die Berechnung würde an Stelle des Kommentar stehen, oder?

                                          Ja.

                                          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                          MatzebhvM 1 Antwort Letzte Antwort
                                          1

                                          Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                                          Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                                          Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                                          Registrieren Anmelden
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          553

                                          Online

                                          32.7k

                                          Benutzer

                                          82.6k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe