Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Low/High/Low Durchgänge zählen - Wo ist der Denkfehler?

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Low/High/Low Durchgänge zählen - Wo ist der Denkfehler?

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

      Hallo zusammen,

      mit dem Blockly will ich bei meiner Spülmaschine die Durchgänge zählen (s.Diagramm): Ein Durchgang wäre dann Low --> High --> Low (wobei Low & High natürlich Zahlenwerte sind).

      Exemplarisch habe ich erstmal eine Testvariable (Example State) genommen um die Durchgänge zu simulieren. Diese werden dann durch eine interne Variable (Zähler) gezählt und sollten am Ende per Debug ausgegeben werden.

      Wenn ich jetzt z. B. für Example State 99 --> 101 --> 99 eingebe steht der Zähler auf 1 anstatt auf 2.

      Wo ist der Denkfehler? Stehe gerade auf dem Schlauch 🙂

      f2b662f6-d2cc-4e3d-ba9c-dc1adb77d48d-image.png

      30960926-e529-4632-a86d-9af632310c91-image.png

      <xml xmlns="https://developers.google.com/blockly/xml">
        <variables>
          <variable id="]J4u-SZ|Op@y3;6/F#9p">Semaphor</variable>
          <variable id="w?2J9;8w#u;O01y_~LvX">Zähler</variable>
          <variable type="interval" id="Intervall">Intervall</variable>
        </variables>
        <block type="variables_set" id="cXQW,Ma[_m_0nKx1gM]!" x="-912" y="12">
          <field name="VAR" id="]J4u-SZ|Op@y3;6/F#9p">Semaphor</field>
          <value name="VALUE">
            <block type="logic_boolean" id="]}N:KMi@/m63{P%`Q2R@">
              <field name="BOOL">TRUE</field>
            </block>
          </value>
          <next>
            <block type="variables_set" id="+5D[c;+Aa~[||)ZfCw|p">
              <field name="VAR" id="w?2J9;8w#u;O01y_~LvX">Zähler</field>
              <value name="VALUE">
                <block type="math_number" id="HyPuonhr-ZTnYkf_Utm-">
                  <field name="NUM">0</field>
                </block>
              </value>
              <next>
                <block type="on" id="r25Ft/_.BXH_b^.e]A2V">
                  <field name="OID">0_userdata.0.example_state</field>
                  <field name="CONDITION">any</field>
                  <field name="ACK_CONDITION"></field>
                  <statement name="STATEMENT">
                    <block type="controls_if" id="0kRkMm+6Yz5)#,3C/.[.">
                      <value name="IF0">
                        <block type="logic_operation" id="3)6HydkV|~PMF-`lv20}">
                          <field name="OP">AND</field>
                          <value name="A">
                            <block type="logic_compare" id="7yw{3I;l^DFiZAOe#qW%">
                              <field name="OP">GT</field>
                              <value name="A">
                                <block type="on_source" id="yEW)-z:~Fm~4!{$7u*Z`">
                                  <field name="ATTR">state.val</field>
                                </block>
                              </value>
                              <value name="B">
                                <block type="math_number" id="DT4L!@e`Nb|s[3y1Dy7X">
                                  <field name="NUM">100</field>
                                </block>
                              </value>
                            </block>
                          </value>
                          <value name="B">
                            <block type="variables_get" id="Z,S(kV05**c0%Zz|QpW`">
                              <field name="VAR" id="]J4u-SZ|Op@y3;6/F#9p">Semaphor</field>
                            </block>
                          </value>
                        </block>
                      </value>
                      <statement name="DO0">
                        <block type="math_change" id="GuF3Ll,HHLSzt`i~uyB0">
                          <field name="VAR" id="w?2J9;8w#u;O01y_~LvX">Zähler</field>
                          <value name="DELTA">
                            <shadow type="math_number" id=";GkR$oslgHDr$6%3?Zw}">
                              <field name="NUM">1</field>
                            </shadow>
                          </value>
                          <next>
                            <block type="variables_set" id="ZCy2PfYRHjVw7X5`sGYT">
                              <field name="VAR" id="]J4u-SZ|Op@y3;6/F#9p">Semaphor</field>
                              <value name="VALUE">
                                <block type="logic_boolean" id="RkhAf|M|fCm0jfVD3Pzl">
                                  <field name="BOOL">FALSE</field>
                                </block>
                              </value>
                              <next>
                                <block type="timeouts_setinterval" id="+F(=`c:07x;Ags(qq7eJ">
                                  <field name="NAME">Intervall</field>
                                  <field name="INTERVAL">1</field>
                                  <field name="UNIT">sec</field>
                                  <statement name="STATEMENT">
                                    <block type="controls_if" id="-f}e|WC3ugmMPi;2Y|Hj">
                                      <value name="IF0">
                                        <block type="logic_compare" id="BusTEFs1+b((z(_D!8PG">
                                          <field name="OP">LT</field>
                                          <value name="A">
                                            <block type="get_value" id="1r`]yZXtsQVE`0r;N!i]">
                                              <field name="ATTR">val</field>
                                              <field name="OID">0_userdata.0.example_state</field>
                                            </block>
                                          </value>
                                          <value name="B">
                                            <block type="math_number" id="RG.d76oA6?:3+ZafMvw(">
                                              <field name="NUM">100</field>
                                            </block>
                                          </value>
                                        </block>
                                      </value>
                                      <statement name="DO0">
                                        <block type="math_change" id="1YU89;i/(9bk.H(,mFNE">
                                          <field name="VAR" id="w?2J9;8w#u;O01y_~LvX">Zähler</field>
                                          <value name="DELTA">
                                            <shadow type="math_number" id="3G4+6%sy7)$5l,*pbpX!">
                                              <field name="NUM">1</field>
                                            </shadow>
                                          </value>
                                          <next>
                                            <block type="variables_set" id="i0Pu.q~5tJw]doY$gv=^">
                                              <field name="VAR" id="]J4u-SZ|Op@y3;6/F#9p">Semaphor</field>
                                              <value name="VALUE">
                                                <block type="logic_boolean" id="4|7k/%X-D~^Bk{`L%Xkz">
                                                  <field name="BOOL">TRUE</field>
                                                </block>
                                              </value>
                                              <next>
                                                <block type="timeouts_clearinterval" id="kzqn:GwZ^u|0xySKcC@Q">
                                                  <field name="NAME">Intervall</field>
                                                </block>
                                              </next>
                                            </block>
                                          </next>
                                        </block>
                                      </statement>
                                    </block>
                                  </statement>
                                  <next>
                                    <block type="debug" id="=pT*^!-(5^mB~~A4[Go;">
                                      <field name="Severity">log</field>
                                      <value name="TEXT">
                                        <shadow type="text">
                                          <field name="TEXT">test</field>
                                        </shadow>
                                        <block type="variables_get" id="sTj.D^WPJ_m9oz5?x7~~">
                                          <field name="VAR" id="w?2J9;8w#u;O01y_~LvX">Zähler</field>
                                        </block>
                                      </value>
                                    </block>
                                  </next>
                                </block>
                              </next>
                            </block>
                          </next>
                        </block>
                      </statement>
                    </block>
                  </statement>
                </block>
              </next>
            </block>
          </next>
        </block>
      </xml>
      
      qqolli paul53 2 Replies Last reply Reply Quote 0
      • qqolli
        qqolli @qqolli last edited by

        @qqolli

        Fehler gefunden. Lag an der internen Variable. Wenn ich den Zähler an eine externe Variable übergebe (0_userdata.0.xxx), funktioniert es korrekt; wobei mir immer noch nicht ganz klar ist, warum die interne Variable verkehrt angezeigt wird.

        E amg_666 2 Replies Last reply Reply Quote 0
        • E
          ente34 @qqolli last edited by

          @qqolli
          Ich mache es immer so:

          trigger1.PNG

          qqolli 1 Reply Last reply Reply Quote 1
          • qqolli
            qqolli @ente34 last edited by

            @ente34

            Super! Das ist auf jeden Fall wesentlich eleganter und vor allem kürzer. Kannte das mit dem "vorherigen Wert" noch nicht.

            Vielen Dank, wieder was gelernt 🙂

            1 Reply Last reply Reply Quote 0
            • amg_666
              amg_666 @qqolli last edited by

              @qqolli sagte in Low/High/Low Durchgänge zählen - Wo ist der Denkfehler?:

              wobei mir immer noch nicht ganz klar ist, warum die interne Variable verkehrt angezeigt wird.

              Dein Blockly löst über einen Trigger aus und die "innere" Variable ist eine LOKALE Variable, die du im Blockly definiert und mit 0 initialisiert hast.
              Wenn der Trigger wieder auslöst kann in der Variable "irgendwas" stehen, weil sie lokal definiert ist, sprich wenn das Blockly-Script durchgelaufen ist gibts die Variable nicht mehr. Und genau deshalb brauchst du eine GLOBALE Variable (z.B. 0.userdata.0.xxx) und deshalb funktioniert es damit auch.

              E paul53 2 Replies Last reply Reply Quote 1
              • E
                ente34 @amg_666 last edited by

                @amg_666 sagte in Low/High/Low Durchgänge zählen - Wo ist der Denkfehler?:
                @qqolli

                Wenn der Trigger wieder auslöst kann in der Variable "irgendwas" stehen, weil sie lokal definiert ist, sprich wenn das Blockly-Script durchgelaufen ist gibts die Variable nicht mehr. Und genau deshalb brauchst du eine GLOBALE Variable (z.B. 0.userdata.0.xxx) und deshalb funktioniert es damit auch.

                Ich glaube nicht, dass das ganz richtig ist, denn dann könnte man Variablen in Blockly nur sehr eingeschränkt nutzen.

                Die Ausführungsreihenfolge im Trigger ist:
                Block1, Block3 wird gestartet, Block2, Block3, Block3 (sekündlich wiederholend) ...

                trigger2.PNG

                1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @amg_666 last edited by

                  @amg_666 sagte: die "innere" Variable ist eine LOKALE Variable, die du im Blockly definiert und mit 0 initialisiert hast.
                  Wenn der Trigger wieder auslöst kann in der Variable "irgendwas" stehen, weil sie lokal definiert ist, sprich wenn das Blockly-Script durchgelaufen ist gibts die Variable nicht mehr.

                  Die Variable Zähler ist eine globale Variable, deren Werte bis zum nächsten Skript-Start erhalten bleiben.

                  1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @qqolli last edited by paul53

                    @qqolli sagte: Wo ist der Denkfehler?

                    Der "debug output" gehört in das Intervall.
                    Wozu ein "Polling" jede Sekunde, wenn der Datenpunkt ohnehin triggert ?

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    876
                    Online

                    32.0k
                    Users

                    80.5k
                    Topics

                    1.3m
                    Posts

                    blockly
                    4
                    8
                    348
                    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