Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. [gelöst] Werte zählen, die >1 sind

NEWS

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

  • 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

Geplant Angeheftet Gesperrt Verschoben Blockly
11 Beiträge 4 Kommentatoren 1.0k Aufrufe 6 Beobachtet
  • Ä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.
  • C Offline
    C Offline
    ChristianF
    schrieb am zuletzt editiert von ChristianF
    #1

    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 1 Antwort Letzte Antwort
    0
    • 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
      schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
      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
        schrieb am zuletzt editiert von 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 Antworten Letzte Antwort
        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
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          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
            schrieb am zuletzt editiert von
            #5

            @ChristianF
            Addieren.PNG

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

            1 Antwort Letzte Antwort
            0
            • C Offline
              C Offline
              ChristianF
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              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
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                0
                • paul53P paul53

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

                  Blockly_temp.JPG

                  C Offline
                  C Offline
                  ChristianF
                  schrieb am zuletzt editiert von
                  #8

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

                  paul53P 1 Antwort Letzte Antwort
                  0
                  • C ChristianF

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

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                    0
                    • paul53P paul53

                      @ChristianF sagte:

                      funktioniert es

                      Erledigt.

                      L Offline
                      L Offline
                      lucky51179
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      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
                        schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                        0

                        Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                        Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                        Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                        Registrieren Anmelden
                        Antworten
                        • In einem neuen Thema antworten
                        Anmelden zum Antworten
                        • Älteste zuerst
                        • Neuste zuerst
                        • Meiste Stimmen


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        653

                        Online

                        32.8k

                        Benutzer

                        82.7k

                        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