NEWS

Gleitender Durchschnitt mit Blockly


  • Servus Leute,

    ich habe einen analogen Sensor der über ESP-Easy Mega alle 60 Sekunden einen Wert schickt. Jetzt möchte ich diesen Wert glätten. Also wäre die richtige Methode gleitender Mittelwert/Durchschnitt. Wie löse ich das mit Blockly? Irgendwie mit Listen müsste das gehen oder ?

    Der analoge wert soll nur dann in den gleitenden Mittelwert einbezogen werden wenn eine Bedingung erfüllt ist......


  • @jaenes sagte:

    gleitender Mittelwert/Durchschnitt

    Vielleicht kann jemand das Skript in Blockly wandeln ?


  • @paul53 oder es ist an der Zeit das mir jemand JS näherbringt....... haha.

    Zum Verständnis:

    Ich brauche eine gewisse Anzahl an variablen im Vorfeld, die lege ich mir an sagen wir 10. Mein Skript schreibt dann alle 10 Sekunden in eine neue Variable meinen Wert. wenn diese Liste voll ist, also nach 100 Sekunden gehts weiter.... oder ?


  • Hi,
    es gibt auch eine sehr einfache Möglichkeit.
    z.B. Mittelwert = (Mittelwert *10+Auktualwert)/11


  • @jaenes sagte:

    wenn diese Liste voll ist, also nach 100 Sekunden gehts weiter.... oder ?

    Nein, bei einem gleitenden Durchschnitt wird der älteste Wert aus der Liste entfernt und der aktuelle Wert der Liste hinzugefügt (Schieberegister). Anschließend erfolgt eine Mittelwertbildung über alle Werte der Liste.


  • @jaenes Schieberegister kann man mit Blockly leider nicht realisieren, aber so sollte die gleitende Mittelwertbildung über 10 Werte funktionieren:

    Blockly_movingavr.JPG


  • Hallo,
    ich habe Dein Beispiel mal umgesetzt, um verschiedensten Messwerte zu glätten, z.b. die Windmessung
    6f9c4c8d-0c7c-417f-96ec-e45687a9f469-grafik.png

    Ich bin der Meinung die Reihenfolge der Befüllung der Liste passt nicht.
    Jedenfalls stimmen in meinem Beispiel die Werte nur in ca. 60% der Fälle (nach Gefühl), dann hab ich Ausreißer nach oben, die niemals dem (gleitenden) Durchschnitt entsprechen können.

    Hat jemand eine Idee?

    <xml xmlns="http://www.w3.org/1999/xhtml">
      <variables>
        <variable type="" id=",w^.=D}$CQ[V7pzCL72J">Liste</variable>
        <variable type="" id="|nsSA#%f}nMpDF9f[%s~">Index</variable>
        <variable type="" id="y/U;,Qb.Nr8Oo+/`~hP~">Summe</variable>
        <variable type="" id="hGz@,GqUkjk#,:XaV}MP">i</variable>
      </variables>
      <block type="variables_set" id="RTUA!,2m0j#}}ko7OBoB" x="-662" y="138">
        <field name="VAR" id=",w^.=D}$CQ[V7pzCL72J" variabletype="">Liste</field>
        <value name="VALUE">
          <block type="lists_repeat" id="(=LzJ5)|$oc[A);}JvJS">
            <value name="NUM">
              <shadow type="math_number" id="87]Qx,xmkMD!$Q@/1@;)">
                <field name="NUM">10</field>
              </shadow>
            </value>
            <value name="ITEM">
              <block type="get_value" id="3~*kY|^$rA,s(p,qczz[">
                <field name="ATTR">val</field>
                <field name="OID">javascript.0.Wetterstation.Wind</field>
              </block>
            </value>
          </block>
        </value>
        <next>
          <block type="variables_set" id="iW%C^9/JhHumbS#zg3)C">
            <field name="VAR" id="|nsSA#%f}nMpDF9f[%s~" variabletype="">Index</field>
            <value name="VALUE">
              <block type="math_number" id="AugG5vuP%[LOm2@_M+HJ">
                <field name="NUM">1</field>
              </block>
            </value>
            <next>
              <block type="on_ext" id="vFE,)!c?~Z$=KJQ[l.d`">
                <mutation items="1"></mutation>
                <field name="CONDITION">any</field>
                <field name="ACK_CONDITION"></field>
                <value name="OID0">
                  <shadow type="field_oid" id="OSi=yG(ihidHOz.CC{,,">
                    <field name="oid">javascript.0.Wetterstation.Wind</field>
                  </shadow>
                </value>
                <statement name="STATEMENT">
                  <block type="lists_setIndex" id="Ue,2EJHPrBq4j%LV^^P.">
                    <mutation at="true"></mutation>
                    <field name="MODE">SET</field>
                    <field name="WHERE">FROM_START</field>
                    <value name="LIST">
                      <block type="variables_get" id="9Y5|dAIiYW;jqyDV^.12">
                        <field name="VAR" id=",w^.=D}$CQ[V7pzCL72J" variabletype="">Liste</field>
                      </block>
                    </value>
                    <value name="AT">
                      <block type="variables_get" id="(cD0-P+rOdV7[+VxX:;w">
                        <field name="VAR" id="|nsSA#%f}nMpDF9f[%s~" variabletype="">Index</field>
                      </block>
                    </value>
                    <value name="TO">
                      <block type="get_value" id="X?~@4ti8Sr@d4P;=*/Gg">
                        <field name="ATTR">val</field>
                        <field name="OID">javascript.0.Wetterstation.Wind</field>
                      </block>
                    </value>
                    <next>
                      <block type="math_change" id="iHM7|{2:7es8frET@lbV">
                        <field name="VAR" id="|nsSA#%f}nMpDF9f[%s~" variabletype="">Index</field>
                        <value name="DELTA">
                          <shadow type="math_number" id="Op~gK+*i3yG,NxAnX#E^">
                            <field name="NUM">1</field>
                          </shadow>
                        </value>
                        <next>
                          <block type="controls_if" id="Ev=u_,#:ITq@sH4OiERd">
                            <value name="IF0">
                              <block type="logic_compare" id="DQ,9UZd*Y1s:1wALu{Gj">
                                <field name="OP">GT</field>
                                <value name="A">
                                  <block type="variables_get" id="#IdY8V@(1Ndfy0Oy;}O?">
                                    <field name="VAR" id="|nsSA#%f}nMpDF9f[%s~" variabletype="">Index</field>
                                  </block>
                                </value>
                                <value name="B">
                                  <block type="math_number" id="1|5;Drd+s?+T}.0{*S7U">
                                    <field name="NUM">10</field>
                                  </block>
                                </value>
                              </block>
                            </value>
                            <statement name="DO0">
                              <block type="variables_set" id="!1H^6U]iK*T`dKg}_^_u">
                                <field name="VAR" id="|nsSA#%f}nMpDF9f[%s~" variabletype="">Index</field>
                                <value name="VALUE">
                                  <block type="math_number" id="8SOkC-(XJySD(`SNe`d2">
                                    <field name="NUM">1</field>
                                  </block>
                                </value>
                              </block>
                            </statement>
                            <next>
                              <block type="variables_set" id="Pl1+j/wdFvVs[QD$eE-X">
                                <field name="VAR" id="y/U;,Qb.Nr8Oo+/`~hP~" variabletype="">Summe</field>
                                <value name="VALUE">
                                  <block type="math_number" id="fYZ5!wFM9_*Bt#+5KLOw">
                                    <field name="NUM">0</field>
                                  </block>
                                </value>
                                <next>
                                  <block type="controls_for" id="HyJ*RpPrKT@0MdcOx^^e">
                                    <field name="VAR" id="hGz@,GqUkjk#,:XaV}MP" variabletype="">i</field>
                                    <value name="FROM">
                                      <shadow type="math_number" id="5HJ!2;[nfS,}XAw*nUMi">
                                        <field name="NUM">1</field>
                                      </shadow>
                                    </value>
                                    <value name="TO">
                                      <shadow type="math_number" id="ImZnUR}.I*E/h}#.|wy4">
                                        <field name="NUM">10</field>
                                      </shadow>
                                    </value>
                                    <value name="BY">
                                      <shadow type="math_number" id="K`1U_LE#RLKcqF!kwOE3">
                                        <field name="NUM">1</field>
                                      </shadow>
                                    </value>
                                    <statement name="DO">
                                      <block type="variables_set" id="}rJ2rUz6;aDQOHmvK@Oe">
                                        <field name="VAR" id="y/U;,Qb.Nr8Oo+/`~hP~" variabletype="">Summe</field>
                                        <value name="VALUE">
                                          <block type="math_arithmetic" id="%Y+JtUD?c46n_[O(n`8S">
                                            <field name="OP">ADD</field>
                                            <value name="A">
                                              <shadow type="math_number" id="Nurdy}zCf#G45e8womn.">
                                                <field name="NUM">1</field>
                                              </shadow>
                                              <block type="variables_get" id="-A8H3G,#Tg4dBOKVy=Cv">
                                                <field name="VAR" id="y/U;,Qb.Nr8Oo+/`~hP~" variabletype="">Summe</field>
                                              </block>
                                            </value>
                                            <value name="B">
                                              <shadow type="math_number" id="GS5E8aL*]O^Y6JVG?9LT">
                                                <field name="NUM">1</field>
                                              </shadow>
                                              <block type="lists_getIndex" id="1}bWK9uFo;24|WfTq*@b">
                                                <mutation statement="false" at="true"></mutation>
                                                <field name="MODE">GET</field>
                                                <field name="WHERE">FROM_START</field>
                                                <value name="VALUE">
                                                  <block type="variables_get" id="uJ59NT:qhOr?$9ji*YM;">
                                                    <field name="VAR" id=",w^.=D}$CQ[V7pzCL72J" variabletype="">Liste</field>
                                                  </block>
                                                </value>
                                                <value name="AT">
                                                  <block type="variables_get" id=":FZ]]msyos78Mjekn;Ac">
                                                    <field name="VAR" id="hGz@,GqUkjk#,:XaV}MP" variabletype="">i</field>
                                                  </block>
                                                </value>
                                              </block>
                                            </value>
                                          </block>
                                        </value>
                                      </block>
                                    </statement>
                                    <next>
                                      <block type="update" id="5B:FCNmeZN+Qu{^R`z=Q">
                                        <mutation delay_input="true"></mutation>
                                        <field name="OID">0_userdata.0.Wetter.avg-Wind</field>
                                        <field name="WITH_DELAY">TRUE</field>
                                        <field name="DELAY_MS">10</field>
                                        <field name="UNIT">sec</field>
                                        <field name="CLEAR_RUNNING">FALSE</field>
                                        <value name="VALUE">
                                          <block type="math_arithmetic" id="wONJ/pl_}L6Q0!xpIwS$">
                                            <field name="OP">DIVIDE</field>
                                            <value name="A">
                                              <shadow type="math_number" id=";%/}}]`uw?T22_tdBqT5">
                                                <field name="NUM">1</field>
                                              </shadow>
                                              <block type="variables_get" id="_z`SsbiwcJJ1td:gT1{[">
                                                <field name="VAR" id="y/U;,Qb.Nr8Oo+/`~hP~" variabletype="">Summe</field>
                                              </block>
                                            </value>
                                            <value name="B">
                                              <shadow type="math_number" id=")FtUw``uljgXg$jxR@;U">
                                                <field name="NUM">10</field>
                                              </shadow>
                                            </value>
                                          </block>
                                        </value>
                                      </block>
                                    </next>
                                  </block>
                                </next>
                              </block>
                            </next>
                          </block>
                        </next>
                      </block>
                    </next>
                  </block>
                </statement>
              </block>
            </next>
          </block>
        </next>
      </block>
    </xml>
    

    Grüße,
    Kay



  • @paul53 : Besten Dank für das neue Beispiel. Sieht gut aus 😉

Suggested Topics

1.8k
Online

38.3k
Users

43.7k
Topics

611.0k
Posts