Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • 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. Rechenfehler - Denkfehler bei "Klammerfunktionen"?

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

Rechenfehler - Denkfehler bei "Klammerfunktionen"?

Geplant Angeheftet Gesperrt Verschoben Blockly
9 Beiträge 6 Kommentatoren 2.0k Aufrufe 4 Watching
  • Ä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.
  • HomoranH Nicht stören
    HomoranH Nicht stören
    Homoran
    Global Moderator Administrators
    schrieb am zuletzt editiert von
    #1

    Ich habe das bereits auf der CCU geregelt, dass ich mir einen fließenden "Mittelwert für Arme" bilde indem ich einen Wert durch eine Anzahl Teile, dann mit einem weniger Multipliziere und anschließend den aktuellen Wert dazu addiere und das gesamte wieder durch die Anzahl Teile.
    Also (sicherheitshalber zu viele Klammern):

    neuer Mittelwert = ((((alter Mittelwert : 4)*3)+ neuer Wert)/4)

    in Blockly umgesetzt ist es so:
    Mittel-Hitze.png

    Die Werte passten nicht, also die Debug eingebaut.

    Das kommt dabei raus:

    2019-03-04 11:41:57.769 - info: javascript.0 script.js.Rollladen.Hilfsprogramme: Inhalt von mittlerer Hitze hinten: 0.9256038654802249
    2019-03-04 11:41:57.769 - info: javascript.0 script.js.Rollladen.Hilfsprogramme: aktueller Hitzestatus: 2.3
    2019-03-04 11:41:57.769 - info: javascript.0 script.js.Rollladen.Hilfsprogramme: Variable Mittelhitze: 0.7485507247775421
    2019-03-04 11:41:59.771 - info: javascript.0 script.js.Rollladen.Hilfsprogramme: neuer Inhalt von mittlerer Hitze hinten: 0.7485507247775421
    

    Wo ist mein Denkfehler?

    kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

    L 1 Antwort Letzte Antwort
    0
    • HomoranH Homoran

      Ich habe das bereits auf der CCU geregelt, dass ich mir einen fließenden "Mittelwert für Arme" bilde indem ich einen Wert durch eine Anzahl Teile, dann mit einem weniger Multipliziere und anschließend den aktuellen Wert dazu addiere und das gesamte wieder durch die Anzahl Teile.
      Also (sicherheitshalber zu viele Klammern):

      neuer Mittelwert = ((((alter Mittelwert : 4)*3)+ neuer Wert)/4)

      in Blockly umgesetzt ist es so:
      Mittel-Hitze.png

      Die Werte passten nicht, also die Debug eingebaut.

      Das kommt dabei raus:

      2019-03-04 11:41:57.769 - info: javascript.0 script.js.Rollladen.Hilfsprogramme: Inhalt von mittlerer Hitze hinten: 0.9256038654802249
      2019-03-04 11:41:57.769 - info: javascript.0 script.js.Rollladen.Hilfsprogramme: aktueller Hitzestatus: 2.3
      2019-03-04 11:41:57.769 - info: javascript.0 script.js.Rollladen.Hilfsprogramme: Variable Mittelhitze: 0.7485507247775421
      2019-03-04 11:41:59.771 - info: javascript.0 script.js.Rollladen.Hilfsprogramme: neuer Inhalt von mittlerer Hitze hinten: 0.7485507247775421
      

      Wo ist mein Denkfehler?

      L Offline
      L Offline
      lonsimbt
      schrieb am zuletzt editiert von
      #2

      @Homoran
      Da wird m. E. einmal zu oft durch vier geteilt.

      Das bisherige Mittel sollte mit dem Gewicht drei einfließen, der neue Wert mit Gewicht eins und anschließend wird durch vier geteilt. Oder: das bisherige Mittel mit Gewicht 3/4 und der neue Wert mit Gewicht 1/4. Dann sollte es passen.

      Gruß Marco

      iobroker im Container (debian Bullseye) unter proxmox 7.1
      debmatic in VM (debian Buster) unter proxmox 7.1 mit HB-RF-USB und RPI-RF-MOD
      40 HomeMatic Geräte, Phillips Hue, Ikea Tradfri, Logitech Harmony Hub, Botvac Connected, Robonect

      1 Antwort Letzte Antwort
      1
      • I Offline
        I Offline
        I-Punkt
        schrieb am zuletzt editiert von
        #3

        n = Anzahl der gewünschten Stützstellen
        Neuer MW = (alter MW * (n-1) + neuer Wert ) / n

        Dein alter Mittelwert "ersetzt" quasi 3 Einzelwerte (deshalb *3) dann den vierten Wert noch dazu und am Ende wieder durch 4 teilen um auf den neuen Mittelwert zu kommen.

        Ist nicht ganz ein gleitender Mittelwert, kommt dem aber für die meisten Anwendungen hinreichend nahe.
        Unbenannt.PNG

        1 Antwort Letzte Antwort
        1
        • M Offline
          M Offline
          mehrwiedu
          schrieb am zuletzt editiert von mehrwiedu
          #4

          Es kommt raus, was bei der Berechnung oben rauskommen muss.
          Du teilst oben im Blockly nicht den neuen Wert 2.3 durch 4, sondern addierst ihn zuerst zum errechneten neuen Drittel.

          In Zahlen ist Deine Rechnung so:

          0,92560387 / 4 = 0,23140097
          0,23140097 * 3 = 0,6942029
          0,6942029 + 2,3 = 2,9942029
          2,9942029 / 4 = 0,74855072

          Da liegt der Fehler im Blockly
          Du musst zuerst 2,3 / 4 teilen = 0,575 und dies dann zum errechneten Drittel addieren. 0,6942029 + 0,575 = 1,2692029

          Also anstelle:
          ((((alter Mittelwert : 4) * 3) + neuer Wert) :4)
          ((alter Mittelwert : 4) * 3) + (neuer Wert :4)

          Was ja exakt das gleiche ist wie die Rechnung von @I-Punkt, wenn man die 4 oder bei ihm n ausklammert. So kommt man mit immer weniger Klammern und Berechnungen aus. In Zahlen:

          (alter Mittelwert * (4-1) + neuer Wert) / 4

          oder wenn n bei Dir konstant 4 ist, läuft das auch so.

          (alter Mittelwert * 3 + neuer Wert) / 4

          Nur wie das in ein Blockly jetzt gesetzt wird?...keine Ahnung.

          HomoranH 1 Antwort Letzte Antwort
          1
          • M mehrwiedu

            Es kommt raus, was bei der Berechnung oben rauskommen muss.
            Du teilst oben im Blockly nicht den neuen Wert 2.3 durch 4, sondern addierst ihn zuerst zum errechneten neuen Drittel.

            In Zahlen ist Deine Rechnung so:

            0,92560387 / 4 = 0,23140097
            0,23140097 * 3 = 0,6942029
            0,6942029 + 2,3 = 2,9942029
            2,9942029 / 4 = 0,74855072

            Da liegt der Fehler im Blockly
            Du musst zuerst 2,3 / 4 teilen = 0,575 und dies dann zum errechneten Drittel addieren. 0,6942029 + 0,575 = 1,2692029

            Also anstelle:
            ((((alter Mittelwert : 4) * 3) + neuer Wert) :4)
            ((alter Mittelwert : 4) * 3) + (neuer Wert :4)

            Was ja exakt das gleiche ist wie die Rechnung von @I-Punkt, wenn man die 4 oder bei ihm n ausklammert. So kommt man mit immer weniger Klammern und Berechnungen aus. In Zahlen:

            (alter Mittelwert * (4-1) + neuer Wert) / 4

            oder wenn n bei Dir konstant 4 ist, läuft das auch so.

            (alter Mittelwert * 3 + neuer Wert) / 4

            Nur wie das in ein Blockly jetzt gesetzt wird?...keine Ahnung.

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

            @mehrwiedu sagte in Rechenfehler - Denkfehler bei "Klammerfunktionen"?:

            (alter Mittelwert * 3 + neuer Wert) / 4

            So sollte es sein! - Danke.
            das passt zu

            @lonsimbt sagte in Rechenfehler - Denkfehler bei "Klammerfunktionen"?:

            Da wird m. E. einmal zu oft durch vier geteilt.

            und ja:

            @I-Punkt sagte in Rechenfehler - Denkfehler bei "Klammerfunktionen"?:

            Ist nicht ganz ein gleitender Mittelwert, kommt dem aber für die meisten Anwendungen hinreichend nahe.

            das ist mir bewusst.
            Extrem wird diese Umgenauigkeit bei großen Sprüngen

            4-4-4-4-0-0-0-0

            sollte als echter Mittelwert der letzten 4 Werte 0 ergeben, nach disere Methode ist er deutlich höher

            Danke erstmal!
            sieht jetzt so aus:
            Mittel-Hitze_neu.png

            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

            1 Antwort Letzte Antwort
            1
            • paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #6

              Für einen gleitenden Mittelwert sollte auf Aktualisierung getriggert werden. Bei nur 4 Werten ist eine echte gleitende Mittelwertbildung auch nicht so schwierig (nicht getestet):
              Blockly_gleitend_Mittel4.JPG

              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

              HomoranH 1 Antwort Letzte Antwort
              1
              • rantanplanR Offline
                rantanplanR Offline
                rantanplan
                schrieb am zuletzt editiert von
                #7

                Komplexe Berechnungen in einen Baustein packen ist in Blockly fast nicht möglich.
                Mit der Klammersetzung hapert es da irgendwo.
                Am Besten sieht man das, wenn man kurz auf die JavaScript Anzeige umschaltet.
                Um mir weitere graue Haare zu ersparen, habe ich mir es angewöhnt solche Dinge "aufzudröseln".
                Ich packe mir die Berechnungen immer in eine Funktion. Da bleibt das Blockly übersichtlicher.

                Rechnen_001.png

                Export:

                <xml xmlns="http://www.w3.org/1999/xhtml">
                  <variables>
                    <variable type="" id=";n:cqW_i{Wk?|i^b;r?q">akt_Hitzestatus_hinten</variable>
                    <variable type="" id="pHw}S)9MWPUzWt|+t*Y0">akt_mittlere_hitze_hinten</variable>
                    <variable type="" id="-xwNt2JMiJNB9J5-`qz:">Ergebnis</variable>
                  </variables>
                  <block type="debug" id="im^Q,7`S8l.0.(#]I(lM" x="88" y="38">
                    <field name="Severity">log</field>
                    <value name="TEXT">
                      <shadow type="text" id=";I0^nqg~DTVQ_$x9;~zr">
                        <field name="TEXT">test</field>
                      </shadow>
                      <block type="text_join" id="qRg.ODbKt)#`+~SKQ@Zy">
                        <mutation items="2"></mutation>
                        <value name="ADD0">
                          <block type="text" id="$*PvA17(=%pD)0F@@bm~">
                            <field name="TEXT">ERGEBNIS: </field>
                          </block>
                        </value>
                        <value name="ADD1">
                          <block type="procedures_callreturn" id="th-xDe6~}Am.hm_ld:@g">
                            <mutation name="Berechnung">
                              <arg name="akt_Hitzestatus_hinten"></arg>
                              <arg name="akt_mittlere_hitze_hinten"></arg>
                            </mutation>
                            <value name="ARG0">
                              <block type="math_number" id="C=Sh?|pb:Ifr|Z}UYflq">
                                <field name="NUM">0.923</field>
                              </block>
                            </value>
                            <value name="ARG1">
                              <block type="math_number" id="7LTb0YCoM=A3SG530Mri">
                                <field name="NUM">2.3</field>
                              </block>
                            </value>
                          </block>
                        </value>
                      </block>
                    </value>
                  </block>
                  <block type="procedures_defreturn" id="{!kE%gWB@.4D,:uA~A|R" x="263" y="188">
                    <mutation>
                      <arg name="akt_Hitzestatus_hinten" varid=";n:cqW_i{Wk?|i^b;r?q"></arg>
                      <arg name="akt_mittlere_hitze_hinten" varid="pHw}S)9MWPUzWt|+t*Y0"></arg>
                    </mutation>
                    <field name="NAME">Berechnung</field>
                    <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                    <statement name="STACK">
                      <block type="variables_set" id="U8zMu6^VE2:Hj~_!jp/{">
                        <field name="VAR" id="-xwNt2JMiJNB9J5-`qz:" variabletype="">Ergebnis</field>
                        <value name="VALUE">
                          <block type="math_arithmetic" id="KsD=}R)(|t7J:k|]U{jb">
                            <field name="OP">DIVIDE</field>
                            <value name="A">
                              <shadow type="math_number" id="dI7QFQzZJ6mbea!7ih=B">
                                <field name="NUM">1</field>
                              </shadow>
                              <block type="variables_get" id="vIrP^63=%(cf(*]WkVzt">
                                <field name="VAR" id=";n:cqW_i{Wk?|i^b;r?q" variabletype="">akt_Hitzestatus_hinten</field>
                              </block>
                            </value>
                            <value name="B">
                              <shadow type="math_number" id="j}T2)LZ[h!^$%7,IHGzj">
                                <field name="NUM">4</field>
                              </shadow>
                            </value>
                          </block>
                        </value>
                        <next>
                          <block type="variables_set" id=":(s+3}_$xmBwOmnTm=z@">
                            <field name="VAR" id="-xwNt2JMiJNB9J5-`qz:" variabletype="">Ergebnis</field>
                            <value name="VALUE">
                              <block type="math_arithmetic" id="S#uK:v/gGiem[{FsoU}q">
                                <field name="OP">MULTIPLY</field>
                                <value name="A">
                                  <shadow type="math_number" id="dI7QFQzZJ6mbea!7ih=B">
                                    <field name="NUM">1</field>
                                  </shadow>
                                  <block type="variables_get" id="zizO+?_W^}rFW:]6=oYH">
                                    <field name="VAR" id="-xwNt2JMiJNB9J5-`qz:" variabletype="">Ergebnis</field>
                                  </block>
                                </value>
                                <value name="B">
                                  <shadow type="math_number" id=")%H!WlNdC_4mYQxmkZ)L">
                                    <field name="NUM">3</field>
                                  </shadow>
                                </value>
                              </block>
                            </value>
                            <next>
                              <block type="variables_set" id="JvfqQFeOcmviH#PjJP~W">
                                <field name="VAR" id="-xwNt2JMiJNB9J5-`qz:" variabletype="">Ergebnis</field>
                                <value name="VALUE">
                                  <block type="math_arithmetic" id="HQJm-8~hoBqt0W3RsK]y">
                                    <field name="OP">ADD</field>
                                    <value name="A">
                                      <shadow type="math_number" id="C0zQ*[UNi5^5`,/jy~x]">
                                        <field name="NUM">1</field>
                                      </shadow>
                                      <block type="variables_get" id="hcqlTglgFbtl}q@GrE^L">
                                        <field name="VAR" id="-xwNt2JMiJNB9J5-`qz:" variabletype="">Ergebnis</field>
                                      </block>
                                    </value>
                                    <value name="B">
                                      <shadow type="math_number" id="8E2x_A:r=Ro)i+cW*uI{">
                                        <field name="NUM">0</field>
                                      </shadow>
                                      <block type="variables_get" id="!9bzw:H6o`UCV]-f_Q(R">
                                        <field name="VAR" id="pHw}S)9MWPUzWt|+t*Y0" variabletype="">akt_mittlere_hitze_hinten</field>
                                      </block>
                                    </value>
                                  </block>
                                </value>
                                <next>
                                  <block type="variables_set" id="Z_i*_BG5FlotNXTWry6+">
                                    <field name="VAR" id="-xwNt2JMiJNB9J5-`qz:" variabletype="">Ergebnis</field>
                                    <value name="VALUE">
                                      <block type="math_arithmetic" id="WG5lc2%J}s/K^,p!cOM[">
                                        <field name="OP">DIVIDE</field>
                                        <value name="A">
                                          <shadow type="math_number" id="C0zQ*[UNi5^5`,/jy~x]">
                                            <field name="NUM">1</field>
                                          </shadow>
                                          <block type="variables_get" id="$5,magvf.znfy9F3YY!C">
                                            <field name="VAR" id="-xwNt2JMiJNB9J5-`qz:" variabletype="">Ergebnis</field>
                                          </block>
                                        </value>
                                        <value name="B">
                                          <shadow type="math_number" id="]V.4I@|8rn?m5@o%-XnK">
                                            <field name="NUM">4</field>
                                          </shadow>
                                        </value>
                                      </block>
                                    </value>
                                  </block>
                                </next>
                              </block>
                            </next>
                          </block>
                        </next>
                      </block>
                    </statement>
                    <value name="RETURN">
                      <block type="variables_get" id="p5V*jU]q%:*/7+(z[B:I">
                        <field name="VAR" id="-xwNt2JMiJNB9J5-`qz:" variabletype="">Ergebnis</field>
                      </block>
                    </value>
                  </block>
                </xml>
                

                Grüße

                Rantanplan

                CCU3 / MS Server 2019(VM) / Scripten mit Blockly

                1 Antwort Letzte Antwort
                2
                • paul53P paul53

                  Für einen gleitenden Mittelwert sollte auf Aktualisierung getriggert werden. Bei nur 4 Werten ist eine echte gleitende Mittelwertbildung auch nicht so schwierig (nicht getestet):
                  Blockly_gleitend_Mittel4.JPG

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

                  @paul53
                  Danke Paul.

                  mit arrays beschäftige ich mich gerade erst.

                  Auf der CCU hatte ich es noch nicht. Und erst einmal die Formel von dort (falsch) übernommen :(

                  kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                  der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                  HomoranH 1 Antwort Letzte Antwort
                  0
                  • HomoranH Homoran

                    @paul53
                    Danke Paul.

                    mit arrays beschäftige ich mich gerade erst.

                    Auf der CCU hatte ich es noch nicht. Und erst einmal die Formel von dort (falsch) übernommen :(

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

                    Ihr zwei schafft mich noch ;-)

                    kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                    1 Antwort Letzte Antwort
                    0
                    Antworten
                    • In einem neuen Thema antworten
                    Anmelden zum Antworten
                    • Älteste zuerst
                    • Neuste zuerst
                    • Meiste Stimmen


                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    444

                    Online

                    32.6k

                    Benutzer

                    82.0k

                    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