Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. [gelöst] Werte zählen, die >1 sind

    NEWS

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    [gelöst] Werte zählen, die >1 sind

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

      Hallo zusammen,

      ich bin mal wieder in Blockly am Basteln und mal wieder habe ich ein Brett vorm Kopf.. folgende Frage:

      • Es gibt drei Werte A, B und C (alles Zahlen), die sich mehrmals pro Minute ändern.
      • Das Script soll zählen, wieviele der drei Werte >1 sind und dementsprechend einen State auf 1, 2 oder 3 setzen.

      Beispiele:

      • A und C sind >1, also setze den State auf 2 (Wert B ist <1)
      • A und B und C sind >1, also setze den State auf 3 (kein Wert ist <1)
      • Nur B ist >1, also setze den State auf 1 (Werte A und C sind <1)

      Klar kann man das mit zig verschachtelten WENNs machen, aber da muss es doch auch einen einfacheren Weg geben? Ich versuche es die ganze Zeit über Listen (=Array?), finde aber keine Möglichkeit die Werte in der Liste nach Kriterium ">1" zählen zu lassen..

      Hat jemand einen Tipp?

      Danke und viele Grüße
      Christian

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

        @ChristianF

        function test(A, B, C) {
          A = A > 1 ? 1 : 0;
          B = B > 1 ? 1 : 0;
          C = C > 1 ? 1 : 0;
          return A + B + C;
        }
        
        C 1 Reply Last reply Reply Quote 0
        • C
          ChristianF @paul53 last edited by ChristianF

          @paul53 Ui, das ging schnell, ganzherzlichen Dank! Leider ist das zu hoch für mich, ich kann leider nur mit Blockly rumklicken 😞
          (hab oben noch hinzugefügt dass ich in Blockly bastel)

          paul53 F 2 Replies Last reply Reply Quote 0
          • paul53
            paul53 @ChristianF last edited by

            @ChristianF sagte:

            Blockly rumklicken

            Blockly_temp.JPG

            1 Reply Last reply Reply Quote 0
            • F
              fastfoot @ChristianF last edited by

              @ChristianF
              Addieren.PNG

              1 Reply Last reply Reply Quote 0
              • C
                ChristianF last edited by

                Ich danke Euch allen für die Hilfe. Vielleicht habe ich es zu abstrakt gemacht und komme deswegen nicht weiter. Daher hier kurz der Hintergrund:
                Es geht um einen Verbraucher, der mal nur auf einer, mal auf zwei und mal auf drei Phasen Strom zieht. Ein vorgeschalteter Zähler wertet die Ströme je Phase aus und stellt sie als "Strom L1 gegen N" usw. bis L3 jeweils als einen Datenpunkt zur Verfügung. Als Trigger dient eine Änderung der Leistungsabnahme (die hier über alle Phasen gemessen wird. Der Titel des State mit "Leistung L1 gegen N" ist falsch, es müsste eigentlich "Leistung gesamt" heißen).

                Mir geht es nun darum, herauszufinden, wieviele Phasen benutzt werden. Dieses Ergebnis möchte ich dann in einen State schreiben und damit weiter arbeiten (anderes Script).

                Meine Ansätze sehen aus wie folgt:

                Hier der Trigger und Aufruf der Funktion:
                b3.JPG

                Hier die Funktion:
                b2.JPG

                Was ich nicht hinbekomme ist, das Ergebnis in einen weiteren State "Phasigkeit" zu schreiben.

                Das Script wirft folgende Fehlermeldung aus:

                16:27:21.829	error	javascript.0 (924) at Object.<anonymous> (script.js.common.Phasigkeit_bestimmen:18:3)
                

                Falls es hilft, hier der von Blockly generierte Code:

                var L1, L2, L3, Strom_L3, Strom_L1, Strom_L2;
                
                // Beschreibe diese Funktion …
                function Phasencheck(L1, L2, L3) {
                  L1 = Strom_L1 >= 1 ? 1 : 0;
                  L2 = Strom_L2 >= 1 ? 1 : 0;
                  L3 = Strom_L3 >= 1 ? 1 : 0;
                  return L1 + L2 + L3;
                }
                
                
                on({id: 'modbus.2.inputRegisters.120_W_L1-N', change: "ne"}, function (obj) {
                  var value = obj.state.val;
                  var oldValue = obj.oldState.val;
                  Strom_L3 = getState("modbus.2.inputRegisters.114_A_L1-N").val;
                  Strom_L3 = getState("modbus.2.inputRegisters.116_A_L2-N").val;
                  Strom_L3 = getState("modbus.2.inputRegisters.118_A_L3-N").val;
                  exec((Phasencheck(0, 0, 0)), function (error, result, stderr) {
                      setState("0_userdata.0.Phasigkeit"/*Phasigkeit*/, (L1 + L2 + L3), true);
                  });
                });
                
                

                Danke für Eure Hilfe!

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

                  @ChristianF
                  Was soll im Script ein "exec" ? Vorschlag:

                  Blockly_temp.JPG

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

                    Herzlichen Dank !!! Kaum macht man's richtig, funktioniert es 🙂

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

                      @ChristianF sagte:

                      funktioniert es

                      Erledigt.

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

                        @paul53 könntest du das Blocky zu importieren einstellen ?

                        @paul53 said in [gelöst] Werte zählen, die >1 sind:

                        @ChristianF
                        Was soll im Script ein "exec" ? Vorschlag:

                        Blockly_temp.JPG

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

                          @lucky51179 sagte: @paul53 könntest du das Blocky zu importieren einstellen ?

                          <xml xmlns="https://developers.google.com/blockly/xml">
                           <variables>
                             <variable id=":E26x_R.+3qqo6|9gIdI">phasen</variable>
                           </variables>
                           <block type="on_ext" id="d63d3i%;i~P~pa[=0hBB" x="37" y="37">
                             <mutation xmlns="http://www.w3.org/1999/xhtml" items="3"></mutation>
                             <field name="CONDITION">ne</field>
                             <field name="ACK_CONDITION"></field>
                             <value name="OID0">
                               <shadow type="field_oid" id="|22u?%2f;}?d@7bj(LrD">
                                 <field name="oid">0_userdata.0.Blockly.Heizung1</field>
                               </shadow>
                             </value>
                             <value name="OID1">
                               <shadow type="field_oid" id="HbqScnD=:9-mE5wLVve5">
                                 <field name="oid">0_userdata.0.Blockly.Heizung2</field>
                               </shadow>
                             </value>
                             <value name="OID2">
                               <shadow type="field_oid" id="8(LV8-hpXF?h#h}hY,7}">
                                 <field name="oid">0_userdata.0.Blockly.Heizung3</field>
                               </shadow>
                             </value>
                             <statement name="STATEMENT">
                               <block type="variables_set" id="h@9@NJx_Oml8#I;wQKTI">
                                 <field name="VAR" id=":E26x_R.+3qqo6|9gIdI">phasen</field>
                                 <value name="VALUE">
                                   <block type="math_arithmetic" id="e2|/zK]ufFFNajr,JVFL" inline="false">
                                     <field name="OP">ADD</field>
                                     <value name="A">
                                       <shadow type="math_number" id="e?WhL+[f5yz]8rP^rnST">
                                         <field name="NUM">1</field>
                                       </shadow>
                                       <block type="math_arithmetic" id="Nx0]+g#4J1dAU!s*1h3Q" inline="false">
                                         <field name="OP">ADD</field>
                                         <value name="A">
                                           <shadow type="math_number" id="0M|30y~wk;3`v7^mptxC">
                                             <field name="NUM">1</field>
                                           </shadow>
                                           <block type="logic_ternary" id="jt,Jle+@Tz8l+/-ysV@f" inline="true">
                                             <value name="IF">
                                               <block type="logic_compare" id="E|]X;/dCmTZ0xF,:!bv{">
                                                 <field name="OP">GT</field>
                                                 <value name="A">
                                                   <block type="get_value" id="ft2Z|IfoHBa`!?KDb^R(">
                                                     <field name="ATTR">val</field>
                                                     <field name="OID">0_userdata.0.Blockly.Heizung1</field>
                                                   </block>
                                                 </value>
                                                 <value name="B">
                                                   <block type="math_number" id="rGePRQ^5/;);,d(?WOZL">
                                                     <field name="NUM">1</field>
                                                   </block>
                                                 </value>
                                               </block>
                                             </value>
                                             <value name="THEN">
                                               <block type="math_number" id="%Py42+wTe_im1WI}(8h7">
                                                 <field name="NUM">1</field>
                                               </block>
                                             </value>
                                             <value name="ELSE">
                                               <block type="math_number" id="u.J{:$Ew+s+|H3#N_J/h">
                                                 <field name="NUM">0</field>
                                               </block>
                                             </value>
                                           </block>
                                         </value>
                                         <value name="B">
                                           <shadow type="math_number" id="L,1Ha#$;KE=Sn{l`bIWX">
                                             <field name="NUM">1</field>
                                           </shadow>
                                           <block type="logic_ternary" id="0ilBTj!6%Yjauc%PHj(5" inline="true">
                                             <value name="IF">
                                               <block type="logic_compare" id="~#f(-0c{hn`F_cHn/}zj">
                                                 <field name="OP">GT</field>
                                                 <value name="A">
                                                   <block type="get_value" id="9_a[ae|/x0STUtyB(m,%">
                                                     <field name="ATTR">val</field>
                                                     <field name="OID">0_userdata.0.Blockly.Heizung2</field>
                                                   </block>
                                                 </value>
                                                 <value name="B">
                                                   <block type="math_number" id="M#FsD;4bjRHR^y,}#@GB">
                                                     <field name="NUM">1</field>
                                                   </block>
                                                 </value>
                                               </block>
                                             </value>
                                             <value name="THEN">
                                               <block type="math_number" id="gSa`@Yx{V=MN:Gh2V|~,">
                                                 <field name="NUM">1</field>
                                               </block>
                                             </value>
                                             <value name="ELSE">
                                               <block type="math_number" id="v.h.){WEZO+X*TUVw!Z,">
                                                 <field name="NUM">0</field>
                                               </block>
                                             </value>
                                           </block>
                                         </value>
                                       </block>
                                     </value>
                                     <value name="B">
                                       <shadow type="math_number" id="9ooA7F|yJH,-F+xo@;=j">
                                         <field name="NUM">1</field>
                                       </shadow>
                                       <block type="logic_ternary" id="i]wewZ8vz=wAKo)Jm7PH" inline="true">
                                         <value name="IF">
                                           <block type="logic_compare" id=")k,Yv@jEA0*/5Hgb)R6L">
                                             <field name="OP">GT</field>
                                             <value name="A">
                                               <block type="get_value" id="d4$z|%IM:.fn)Auqxlu/">
                                                 <field name="ATTR">val</field>
                                                 <field name="OID">0_userdata.0.Blockly.Heizung3</field>
                                               </block>
                                             </value>
                                             <value name="B">
                                               <block type="math_number" id="9DQD]#2IRWfSDOr/$TM*">
                                                 <field name="NUM">1</field>
                                               </block>
                                             </value>
                                           </block>
                                         </value>
                                         <value name="THEN">
                                           <block type="math_number" id="(i!t`$f;]r=WrVKYkb}S">
                                             <field name="NUM">1</field>
                                           </block>
                                         </value>
                                         <value name="ELSE">
                                           <block type="math_number" id="[TS$k{!%d8exx+nU!d2|">
                                             <field name="NUM">0</field>
                                           </block>
                                         </value>
                                       </block>
                                     </value>
                                   </block>
                                 </value>
                                 <next>
                                   <block type="update" id="Aum9d#sI/+huD-CEw/?l">
                                     <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                     <field name="OID">Object ID</field>
                                     <field name="WITH_DELAY">FALSE</field>
                                     <value name="VALUE">
                                       <block type="variables_get" id="K#4oZ6M$r9!+I,*3Kot?">
                                         <field name="VAR" id=":E26x_R.+3qqo6|9gIdI">phasen</field>
                                       </block>
                                     </value>
                                   </block>
                                 </next>
                               </block>
                             </statement>
                           </block>
                          </xml>
                          

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          865
                          Online

                          32.0k
                          Users

                          80.5k
                          Topics

                          1.3m
                          Posts

                          4
                          11
                          718
                          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