Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly
  5. [gelöst] Werte zählen, die >1 sind

NEWS

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

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

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

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

Scheduled Pinned Locked Moved Blockly
11 Posts 4 Posters 1.0k Views 6 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C 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

    paul53P Offline
    paul53P Offline
    paul53
    wrote on last edited by paul53
    #2

    @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;
    }
    

    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

    C 1 Reply Last reply
    0
    • paul53P 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 Offline
      C Offline
      ChristianF
      wrote on last edited by ChristianF
      #3

      @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)

      paul53P F 2 Replies Last reply
      0
      • C 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)

        paul53P Offline
        paul53P Offline
        paul53
        wrote on last edited by
        #4

        @ChristianF sagte:

        Blockly rumklicken

        Blockly_temp.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

        1 Reply Last reply
        0
        • C 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)

          F Offline
          F Offline
          fastfoot
          wrote on last edited by
          #5

          @ChristianF
          Addieren.PNG

          iobroker läuft unter Docker auf QNAP TS-451+
          SkriptRecovery: https://forum.iobroker.net/post/930558

          1 Reply Last reply
          0
          • C Offline
            C Offline
            ChristianF
            wrote on last edited by
            #6

            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!

            paul53P 1 Reply Last reply
            0
            • C ChristianF

              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!

              paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by
              #7

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

              Blockly_temp.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

              C 1 Reply Last reply
              0
              • paul53P paul53

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

                Blockly_temp.JPG

                C Offline
                C Offline
                ChristianF
                wrote on last edited by
                #8

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

                paul53P 1 Reply Last reply
                0
                • C ChristianF

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

                  paul53P Offline
                  paul53P Offline
                  paul53
                  wrote on last edited by paul53
                  #9

                  @ChristianF sagte:

                  funktioniert es

                  Erledigt.

                  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

                  L 1 Reply Last reply
                  0
                  • paul53P paul53

                    @ChristianF sagte:

                    funktioniert es

                    Erledigt.

                    L Offline
                    L Offline
                    lucky51179
                    wrote on last edited by
                    #10

                    @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

                    paul53P 1 Reply Last reply
                    0
                    • L lucky51179

                      @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

                      paul53P Offline
                      paul53P Offline
                      paul53
                      wrote on last edited by paul53
                      #11

                      @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>
                      

                      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 Reply Last reply
                      0

                      Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                      Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                      With your input, this post could be even better 💗

                      Register Login
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      545

                      Online

                      32.8k

                      Users

                      82.7k

                      Topics

                      1.3m

                      Posts
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Home
                      • Recent
                      • Tags
                      • Unread 0
                      • Categories
                      • Unreplied
                      • Popular
                      • GitHub
                      • Docu
                      • Hilfe