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] Aufzählung gleicher Werte aus Datenpunkt

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Aufzählung gleicher Werte aus Datenpunkt

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

      Guten Morgen,

      heutiges Projekt ist das Aufzählen gleicher Werte aus einem sich ständig erweiternden Datenpunkt.
      So ungefähr sieht der Inhalt des DP (String) aus:

      a,b,b,a,c,d,a,b,c
      

      Nun suche ich nach einem netten Blockly um mir die jeweilige Anzahl der Werte beim Ändern des DP in einen neuen DP zu schreiben,
      also im Beispielsfall:

      a(3),b(3),c(2),d(1)
      

      Hab da grad ne Blockade und wäre für einen Denkanstoss dankbar 🙂

      A 1 Reply Last reply Reply Quote 0
      • A
        AndyGR42 @DJMarc75 last edited by

        @djmarc75 Hm, in Blocky finde ich keine passende Funktion. Als Script relativ einfache mit den Methoden Filter und Length zu realisieren.

        DJMarc75 1 Reply Last reply Reply Quote 0
        • DJMarc75
          DJMarc75 @AndyGR42 last edited by

          @andygr42 sagte in Aufzählung gleicher Werte aus Datenpunkt:

          Als Script relativ einfache mit den Methoden Filter und Length zu realisieren.

          Danke für Deine schnelle Antwort, aber ich habe null Ahnung von JS 😞

          A 1 Reply Last reply Reply Quote 0
          • A
            AndyGR42 @DJMarc75 last edited by

            @djmarc75 Sind die möglichen Werte im DP bekannt oder können die beliebig sein? Sind das Zahlen oder Buchstaben? Und warum ein String und nicht direkt ein Array als DP?

            DJMarc75 1 Reply Last reply Reply Quote 0
            • DJMarc75
              DJMarc75 @AndyGR42 last edited by

              @andygr42 sagte in Aufzählung gleicher Werte aus Datenpunkt:

              Werte im DP bekannt oder können die beliebig sein?

              unbekannt da ich den Titelverlauf meiner Radiosender historisiere.

              @andygr42 sagte in Aufzählung gleicher Werte aus Datenpunkt:

              Sind das Zahlen oder Buchstaben?

              mixed inkl. Sonderzeichen z.B.

              SALT 'N' PEPA WITH EN VOGUE - WHATTA MAN
              

              @andygr42 sagte in Aufzählung gleicher Werte aus Datenpunkt:

              Und warum ein String und nicht direkt ein Array

              Worin wäre der Vorteil in ein Array zu schreiben und wie muss ich dazu mein Blockly abändern?

              Screenshot 2023-02-18 114147.png

              liv-in-sky 1 Reply Last reply Reply Quote 0
              • A
                AndyGR42 last edited by

                @djmarc75 Ein Array als DP zu nutzen eliminiert die Notwendigkeit, den String vor der Auswertung erstmal in ein Array umwandeln zu müssen. Zudem hat ein String DP mit Sicherheit eine maximale Länge. Ich habe es auf die Schnelle nicht gefunden, aber vielleicht hat jemand die Infos zur Hand.

                Brauchst Du denn den "CountString" oder reicht dir das Endergebnis? Es wäre viel einfacher die finale Liste direkt vom "Titel" aus zu generieren.

                DJMarc75 1 Reply Last reply Reply Quote 0
                • DJMarc75
                  DJMarc75 @AndyGR42 last edited by

                  @andygr42 sagte in Aufzählung gleicher Werte aus Datenpunkt:

                  Brauchst Du denn den "CountString" oder reicht dir das Endergebnis?

                  Nun, ich schreibe halt jeden aktuellen Titel hier rein und - ja, ich befürchte auch dass da irgendwann ein Zeichenlimit greift.
                  Also "brauchen" eher nicht 🙂

                  liv-in-sky 1 Reply Last reply Reply Quote 0
                  • liv-in-sky
                    liv-in-sky @DJMarc75 last edited by

                    @djmarc7

                    evtl hier:

                    https://stackoverflow.com/questions/19395257/how-to-count-duplicate-value-in-an-array-in-javascript5

                    dann bekommst ein json, welches du weiterverarbeiten könntest

                    1 Reply Last reply Reply Quote 0
                    • liv-in-sky
                      liv-in-sky @DJMarc75 last edited by liv-in-sky

                      @djmarc75 ein problem könnte sein: wenn du einen titel mit komma hast, kannst du das später schlecht in ein array verwandeln - daher schon die kommas ausfiltern beim schreiben in einen string - ansonsten direkt in ein array

                      A 1 Reply Last reply Reply Quote 0
                      • A
                        AndyGR42 @liv-in-sky last edited by

                        @liv-in-sky Ist auf jeden Fall sehr elegant. JSON müsste Blocky ja dann wieder verarbeiten können. Bleibt nur noch das Problem des Aufaddieren. Daher würde ich direkt vom Titel aus das Ziel befüllen

                        A 1 Reply Last reply Reply Quote 0
                        • A
                          AndyGR42 @AndyGR42 last edited by AndyGR42

                          @DJMarc75 Das Skript hier sollte dein Problem lösen:

                          • wird bei jeder Änderung des DP (in deinem Fall Titel) ausgeführt
                          • Es schaut nach, ob der Titel schon im Array ist (bzw. ob überhaupt schon was im Array steht) und hängt den neuen Titel entweder an oder aktualisiert den Zähler
                          • Die erste Zeile ist nur fur's Testen. Damit wird das Array einfach nur geleert.
                          • Du müsstest jetzt nur die beiden DP mit deinen tauschen und das Script starten.

                          Ach ja, wie schon erwähnt sollten einige Zeichen unbedingt vermieden werden, sonst gibt es Chaos im Array. Also bitte kein Komma, keine eckigen Klammern und keine Anführungszeichen.

                          /** reset_arry('0_userdata.0.Test.TestArray01'); */ /** testing only */
                          
                          
                          on({id: '0_userdata.0.Test.TestString01', change: "any"}, function (obj) { /** waits for changes */
                              var value = obj.state.val; /** new value */
                          
                              const counterArrayDP = '0_userdata.0.Test.TestArray01'; /** target DP of type array/string */
                              
                              /** NOTHING to change below this line */
                          
                              const counterArray = getState(counterArrayDP).val; /** get array from DP */
                              const newCounterArray = update_array(counterArray, value); /** update array with new value */
                              setState(counterArrayDP, newCounterArray) /** write update array to DP */
                              
                          });
                          
                          function update_array(inputArray, inputValue) /** sub function updates array */
                          {
                              const inputArrayLength = inputArray.length; /** get actual input array length */
                              const outputArray = new Array(); /** create new  output array*/
                          
                              if(inputArrayLength > 0) /** are there already items in the input array? */
                              {
                                  var i;
                                  var itemExists = false; 
                          
                                  for (i = 0; i < inputArrayLength; i++) /** cycle through the array */
                                  {
                                      var x = find_inArray(inputArray[i], inputValue); /** is the inputValue in the actual input (sub) array? */
                          
                                      if (x == 0) /** if not, just copy the input to the output */
                                      {
                                          outputArray[i] = inputArray[i];
                                      }
                                      else /** if yes, increment the input array item and copy it to the output array */
                                      {
                                          const subArray = [inputValue, x + 1]
                                          outputArray[i] = subArray;
                                          itemExists = true; /** indicate that the input value already exists in the output array */
                                      }
                                  }
                          
                                  if (itemExists == false) /** if the input value don't exist append it to the output array */
                                  {
                                      const subArray = [inputValue, 1]
                                      outputArray[inputArrayLength] = subArray;
                                  }
                          
                              }
                              else /** if the imput array is empty, just create the first value pair */
                              {
                                  const subArray = [inputValue, 1]
                                  outputArray[0] = subArray;
                              }
                          
                              return outputArray;
                          }
                          
                          
                          function find_inArray (subArray, inputValue) /** sub function finds input value in sub array */
                          {
                              if (subArray[0] == inputValue)
                              {
                                  return subArray[1]; /** returns existing value on match */
                              }
                              else
                              {
                                  return 0; /** or zero */
                              }
                          }
                          
                          
                          function reset_arry(outputArray) /** resets the array */
                          {
                              const emptyArray = new Array();
                              setState (outputArray, emptyArray);
                          }
                          
                          DJMarc75 1 Reply Last reply Reply Quote 1
                          • mickym
                            mickym Most Active last edited by mickym

                            Ich hab zwar ewig rumgedoktort - aber JSONATA ist einfach geil und auch in dem Puzzlespiel zu haben. 😉

                            ca7c5a65-9ac0-4af2-ba61-1dd2918cadf0-image.png

                            <xml xmlns="https://developers.google.com/blockly/xml">
                             <variables>
                               <variable id="?+jUzr1AE!BT%ndErB?h">String</variable>
                               <variable id="r2|O7xSSn}R]WP0Guw3#">Array</variable>
                               <variable id="$-_m{u5(Dz83eo?3;{%[">Objekt</variable>
                             </variables>
                             <block type="variables_set" id="//8bilRq!Q*Oo;YNFP0i" x="88" y="63">
                               <field name="VAR" id="?+jUzr1AE!BT%ndErB?h">String</field>
                               <value name="VALUE">
                                 <block type="text" id="b;/knyEwB)g{AZ|(e4U;">
                                   <field name="TEXT">a,b,b,a,c,d,a,b,c</field>
                                 </block>
                               </value>
                               <next>
                                 <block type="variables_set" id="-7):+IvH/;IU.{3y{EAF">
                                   <field name="VAR" id="r2|O7xSSn}R]WP0Guw3#">Array</field>
                                   <value name="VALUE">
                                     <block type="lists_split" id="l2GM.Xj3(=XTz}`5ng$!">
                                       <mutation mode="SPLIT"></mutation>
                                       <field name="MODE">SPLIT</field>
                                       <value name="INPUT">
                                         <block type="variables_get" id="Alvxx%gpPS`g@e8diDll">
                                           <field name="VAR" id="?+jUzr1AE!BT%ndErB?h">String</field>
                                         </block>
                                       </value>
                                       <value name="DELIM">
                                         <shadow type="text" id="/!{{ihjH=j_S#TOr/{~y">
                                           <field name="TEXT">,</field>
                                         </shadow>
                                       </value>
                                     </block>
                                   </value>
                                   <next>
                                     <block type="debug" id="7Qj!rB9T*1u^?q*%grBj">
                                       <field name="Severity">log</field>
                                       <value name="TEXT">
                                         <shadow type="text" id="X9Y@-Dl7gm/@@A1LA|rJ">
                                           <field name="TEXT">test</field>
                                         </shadow>
                                         <block type="variables_get" id="(swR*aLu~G@PD}zgOnL+">
                                           <field name="VAR" id="r2|O7xSSn}R]WP0Guw3#">Array</field>
                                         </block>
                                       </value>
                                       <next>
                                         <block type="variables_set" id="a75e#*Xc#m)nG`veslBd">
                                           <field name="VAR" id="$-_m{u5(Dz83eo?3;{%[">Objekt</field>
                                           <value name="VALUE">
                                             <block type="convert_jsonata" id="|P_BHOAk`P/_AfD`5I`Y">
                                               <value name="EXPRESSION">
                                                 <shadow type="text" id=":Vas?]P#E6aU7]6b,~_q">
                                                   <field name="TEXT">$distinct($).{$ : $map($$,function($v){$[$=$v]}) ~&gt; $count()}</field>
                                                 </shadow>
                                               </value>
                                               <value name="TARGET">
                                                 <block type="variables_get" id="5t:`o,RyQ=/bO+x?(-kv">
                                                   <field name="VAR" id="r2|O7xSSn}R]WP0Guw3#">Array</field>
                                                 </block>
                                               </value>
                                             </block>
                                           </value>
                                           <next>
                                             <block type="debug" id="WJhIun5xunahKl@GICu}">
                                               <field name="Severity">log</field>
                                               <value name="TEXT">
                                                 <shadow type="text" id="YQ7^n5qnxbu(/f6Uffd^">
                                                   <field name="TEXT">test</field>
                                                 </shadow>
                                                 <block type="variables_get" id="-,0VHv#EdBGI4Upg~~ZA">
                                                   <field name="VAR" id="$-_m{u5(Dz83eo?3;{%[">Objekt</field>
                                                 </block>
                                               </value>
                                             </block>
                                           </next>
                                         </block>
                                       </next>
                                     </block>
                                   </next>
                                 </block>
                               </next>
                             </block>
                            </xml>
                            

                            ist einfach genial kurz - auch wenn man sich natürlich viel Mühe geben kann um das herkömmlich zu programmieren.

                            Wie gesagt hat mich ca 2 Stunden Tüftelarbeit gekostet - aber es lohnt sich. Hier mal der JSONATA Ausdruck in voller Pracht:

                            $distinct($).{$ : $map($$,function($v){$[$=$v]}) ~> $count()}
                            

                            4435ab2c-92f6-4c31-901a-c6611fe7669a-image.png

                            A 1 Reply Last reply Reply Quote 0
                            • DJMarc75
                              DJMarc75 @AndyGR42 last edited by

                              @andygr42 supi, wird getestet und vorher erstmal die Sonderzeichen rausfiltern 🙂

                              1 Reply Last reply Reply Quote 0
                              • A
                                AndyGR42 @mickym last edited by AndyGR42

                                @mickym Auch schick, allerdings funktioniert es auch nur solange, wie der String alle Titel beinhaltet. Irgendwann wird der zu lang

                                mickym 1 Reply Last reply Reply Quote 0
                                • mickym
                                  mickym Most Active @AndyGR42 last edited by

                                  @andygr42 Na ja - das hat @DJMarc75 so vorgegeben . im Prinzip arbeitet der JSONATA Ausdruck mit einem Array. Also wenn man gleich ein Array mit Strings verwendet funktioniert es.

                                  A 1 Reply Last reply Reply Quote 1
                                  • A
                                    AndyGR42 @mickym last edited by

                                    @mickym Deswegen hatte ich nachgefragt, was er eigentlich machen möchte und ob er den String überhaupt braucht. 😉

                                    1 Reply Last reply Reply Quote 0
                                    • DJMarc75
                                      DJMarc75 last edited by

                                      wenn mir jetzt noch jemand von Euch "zeigen" kann wie ich die Titel (kommen erstmal in einem StringDP an) in ein (wachsendes) Array schreibe dann wäre ich so ziemlich happy 💃

                                      mickym 1 Reply Last reply Reply Quote 0
                                      • mickym
                                        mickym Most Active @DJMarc75 last edited by mickym

                                        @djmarc75 sagte in Aufzählung gleicher Werte aus Datenpunkt:

                                        wenn mir jetzt noch jemand von Euch "zeigen" kann wie ich die Titel (kommen erstmal in einem StringDP an) in ein (wachsendes) Array schreibe dann wäre ich so ziemlich happy 💃

                                        Na dass ich Dir nochmal puzzlen beibringen muss, überrascht mich aber. 😁

                                        8d82b9bd-5420-4543-8447-e495744cc52a-image.png

                                        Wenn du es gleich als Array machst - hast Du auch mit Kommas kein Problem.

                                        DJMarc75 1 Reply Last reply Reply Quote 1
                                        • DJMarc75
                                          DJMarc75 @mickym last edited by

                                          @mickym bin grad am Testen 👍

                                          mickym 1 Reply Last reply Reply Quote 0
                                          • mickym
                                            mickym Most Active @DJMarc75 last edited by mickym

                                            @djmarc75 sagte in Aufzählung gleicher Werte aus Datenpunkt:

                                            @mickym bin grad am Testen 👍

                                            So und damit die Hässlichkeit des Puzzlen ganz zu Tage tritt hier noch die Ergänzung, wie man das ganze dann Auswerten kann. 😉

                                            8979d58f-0d5c-42b5-ba9e-46752c29ef8d-image.png

                                            <xml xmlns="https://developers.google.com/blockly/xml">
                                             <variables>
                                               <variable id="Q-{K{g^u8=SJ~bbJx1L2">neu</variable>
                                               <variable id="?+jUzr1AE!BT%ndErB?h">String</variable>
                                               <variable id="r2|O7xSSn}R]WP0Guw3#">Array</variable>
                                               <variable id="$-_m{u5(Dz83eo?3;{%[">Objekt</variable>
                                               <variable id="J?Di1B/ibZyz:%[nd_$1">Suche</variable>
                                             </variables>
                                             <block type="variables_set" id="2`xXRHf8dv/I7RRVQ9uP" x="-462" y="-187">
                                               <field name="VAR" id="Q-{K{g^u8=SJ~bbJx1L2">neu</field>
                                               <value name="VALUE">
                                                 <block type="text" id=":}kd79(jelVZP+`h)Q-G">
                                                   <field name="TEXT">S.O.S</field>
                                                 </block>
                                               </value>
                                               <next>
                                                 <block type="variables_set" id="//8bilRq!Q*Oo;YNFP0i">
                                                   <field name="VAR" id="?+jUzr1AE!BT%ndErB?h">String</field>
                                                   <value name="VALUE">
                                                     <block type="text" id="b;/knyEwB)g{AZ|(e4U;">
                                                       <field name="TEXT">a,b,b,a,c,d,a,b,c</field>
                                                     </block>
                                                   </value>
                                                   <next>
                                                     <block type="variables_set" id="jgNS,;m/}/6kEs:32$23">
                                                       <field name="VAR" id="r2|O7xSSn}R]WP0Guw3#">Array</field>
                                                       <value name="VALUE">
                                                         <block type="lists_split" id="4VgevC}Aug,7,$``$e2~">
                                                           <mutation mode="SPLIT"></mutation>
                                                           <field name="MODE">SPLIT</field>
                                                           <value name="INPUT">
                                                             <block type="variables_get" id="3OkVXfnD1V1{15oC}j0#">
                                                               <field name="VAR" id="?+jUzr1AE!BT%ndErB?h">String</field>
                                                             </block>
                                                           </value>
                                                           <value name="DELIM">
                                                             <shadow type="text" id="`^2^nlc|*0tZnVb/]MU0">
                                                               <field name="TEXT">,</field>
                                                             </shadow>
                                                           </value>
                                                         </block>
                                                       </value>
                                                       <next>
                                                         <block type="lists_setIndex" id="^1a;jzhbYsZ3.(=%^3:o">
                                                           <mutation at="false"></mutation>
                                                           <field name="MODE">INSERT</field>
                                                           <field name="WHERE">LAST</field>
                                                           <value name="LIST">
                                                             <block type="variables_get" id="Yc!NOY.mpz;*MQ4a.3cc">
                                                               <field name="VAR" id="r2|O7xSSn}R]WP0Guw3#">Array</field>
                                                             </block>
                                                           </value>
                                                           <value name="TO">
                                                             <block type="variables_get" id="JN(3pS60Y)^Y=(.]j~4B">
                                                               <field name="VAR" id="Q-{K{g^u8=SJ~bbJx1L2">neu</field>
                                                             </block>
                                                           </value>
                                                           <next>
                                                             <block type="debug" id="7Qj!rB9T*1u^?q*%grBj">
                                                               <field name="Severity">log</field>
                                                               <value name="TEXT">
                                                                 <shadow type="text" id="X9Y@-Dl7gm/@@A1LA|rJ">
                                                                   <field name="TEXT">test</field>
                                                                 </shadow>
                                                                 <block type="variables_get" id="(swR*aLu~G@PD}zgOnL+">
                                                                   <field name="VAR" id="r2|O7xSSn}R]WP0Guw3#">Array</field>
                                                                 </block>
                                                               </value>
                                                               <next>
                                                                 <block type="variables_set" id="a75e#*Xc#m)nG`veslBd">
                                                                   <field name="VAR" id="$-_m{u5(Dz83eo?3;{%[">Objekt</field>
                                                                   <value name="VALUE">
                                                                     <block type="convert_jsonata" id="|P_BHOAk`P/_AfD`5I`Y">
                                                                       <value name="EXPRESSION">
                                                                         <shadow type="text" id=":Vas?]P#E6aU7]6b,~_q">
                                                                           <field name="TEXT">$distinct($).{$ : $map($$,function($v){$[$=$v]}) ~&gt; $count()}</field>
                                                                         </shadow>
                                                                       </value>
                                                                       <value name="TARGET">
                                                                         <block type="variables_get" id="5t:`o,RyQ=/bO+x?(-kv">
                                                                           <field name="VAR" id="r2|O7xSSn}R]WP0Guw3#">Array</field>
                                                                         </block>
                                                                       </value>
                                                                     </block>
                                                                   </value>
                                                                   <next>
                                                                     <block type="debug" id="WJhIun5xunahKl@GICu}">
                                                                       <field name="Severity">log</field>
                                                                       <value name="TEXT">
                                                                         <shadow type="text" id="YQ7^n5qnxbu(/f6Uffd^">
                                                                           <field name="TEXT">test</field>
                                                                         </shadow>
                                                                         <block type="variables_get" id="-,0VHv#EdBGI4Upg~~ZA">
                                                                           <field name="VAR" id="$-_m{u5(Dz83eo?3;{%[">Objekt</field>
                                                                         </block>
                                                                       </value>
                                                                       <next>
                                                                         <block type="variables_set" id="Hg9/:p^,/%Kf2tC;y-]W">
                                                                           <field name="VAR" id="J?Di1B/ibZyz:%[nd_$1">Suche</field>
                                                                           <value name="VALUE">
                                                                             <block type="text" id="m;o(c)D=jz_JWVJv@X8E">
                                                                               <field name="TEXT">a</field>
                                                                             </block>
                                                                           </value>
                                                                           <next>
                                                                             <block type="debug" id="O9J+UurMn7PA^TKo,BHw">
                                                                               <field name="Severity">log</field>
                                                                               <value name="TEXT">
                                                                                 <shadow type="text" id="p.m1Jo/[,,D8:FMicn0U">
                                                                                   <field name="TEXT">test</field>
                                                                                 </shadow>
                                                                                 <block type="text_join" id="q,:sJ5DPG[Unp42nmwf4">
                                                                                   <mutation items="5"></mutation>
                                                                                   <value name="ADD0">
                                                                                     <block type="text" id=":+E?yRv@7u8_xlN?;!|Y">
                                                                                       <field name="TEXT">Lied </field>
                                                                                     </block>
                                                                                   </value>
                                                                                   <value name="ADD1">
                                                                                     <block type="variables_get" id="iiTxfl.#MUB;EfaFO/q;">
                                                                                       <field name="VAR" id="J?Di1B/ibZyz:%[nd_$1">Suche</field>
                                                                                     </block>
                                                                                   </value>
                                                                                   <value name="ADD2">
                                                                                     <block type="text" id="JcTfv$r?$F7=m2$QWNgG">
                                                                                       <field name="TEXT"> wurde </field>
                                                                                     </block>
                                                                                   </value>
                                                                                   <value name="ADD3">
                                                                                     <block type="convert_jsonata" id="^cI{f1Cedv)iL5xFEsa@">
                                                                                       <value name="EXPRESSION">
                                                                                         <shadow type="text" id="XolzYVS:6f[}CY%{=CtN">
                                                                                           <field name="TEXT">*</field>
                                                                                         </shadow>
                                                                                         <block type="text_join" id="jZb*`=0yOdkQuGQPKyJ=">
                                                                                           <mutation items="3"></mutation>
                                                                                           <value name="ADD0">
                                                                                             <block type="text" id="kZDkEfIR!ngV#w|Mx=/J">
                                                                                               <field name="TEXT">$.'</field>
                                                                                             </block>
                                                                                           </value>
                                                                                           <value name="ADD1">
                                                                                             <block type="variables_get" id="e;xWF[am$/jUvuQxCb:[">
                                                                                               <field name="VAR" id="J?Di1B/ibZyz:%[nd_$1">Suche</field>
                                                                                             </block>
                                                                                           </value>
                                                                                           <value name="ADD2">
                                                                                             <block type="text" id="=l{vI?{uIxzWwOzn0Rll">
                                                                                               <field name="TEXT">'</field>
                                                                                             </block>
                                                                                           </value>
                                                                                         </block>
                                                                                       </value>
                                                                                       <value name="TARGET">
                                                                                         <block type="variables_get" id="KtR^h,d+F=uC4,3.tEZz">
                                                                                           <field name="VAR" id="$-_m{u5(Dz83eo?3;{%[">Objekt</field>
                                                                                         </block>
                                                                                       </value>
                                                                                     </block>
                                                                                   </value>
                                                                                   <value name="ADD4">
                                                                                     <block type="text" id="z8nN;k_ep!x_9cd^+BB!">
                                                                                       <field name="TEXT"> mal gespielt.</field>
                                                                                     </block>
                                                                                   </value>
                                                                                 </block>
                                                                               </value>
                                                                             </block>
                                                                           </next>
                                                                         </block>
                                                                       </next>
                                                                     </block>
                                                                   </next>
                                                                 </block>
                                                               </next>
                                                             </block>
                                                           </next>
                                                         </block>
                                                       </next>
                                                     </block>
                                                   </next>
                                                 </block>
                                               </next>
                                             </block>
                                            </xml>
                                            

                                            Für Leute, die solche Dinge mit einem anderen Logikmaschine umsetzen wollen:

                                            [
                                               {
                                                   "id": "1b8a9b7ff23e2b72",
                                                   "type": "comment",
                                                   "z": "29617fbe487e9c69",
                                                   "name": "Elemente in einem Array zählen und als Objekt ausgeben",
                                                   "info": "",
                                                   "x": 270,
                                                   "y": 1720,
                                                   "wires": []
                                               },
                                               {
                                                   "id": "db03a7ae6baec159",
                                                   "type": "inject",
                                                   "z": "29617fbe487e9c69",
                                                   "name": "Array mit Liedern",
                                                   "props": [
                                                       {
                                                           "p": "payload"
                                                       }
                                                   ],
                                                   "repeat": "",
                                                   "crontab": "",
                                                   "once": false,
                                                   "onceDelay": 0.1,
                                                   "topic": "",
                                                   "payload": "[\"Schöne Maid, hast Du heut für mich Zeit\",\"Jump\",\"Jump\",\"Blauer Enzian\",\"Dancing Queen\",\"Yellow Submarine\",\"Blauer Enzian\",\"Jump\",\"Dancing Queen\",\"S.O.S\",\"Schöne Maid, hast Du heut für mich Zeit\"]",
                                                   "payloadType": "json",
                                                   "x": 180,
                                                   "y": 1800,
                                                   "wires": [
                                                       [
                                                           "eee0fd1bbc1c7591"
                                                       ]
                                                   ]
                                               },
                                               {
                                                   "id": "eee0fd1bbc1c7591",
                                                   "type": "change",
                                                   "z": "29617fbe487e9c69",
                                                   "name": "",
                                                   "rules": [
                                                       {
                                                           "t": "set",
                                                           "p": "payload",
                                                           "pt": "msg",
                                                           "to": "$distinct(payload).{$: $map($$.payload,function($v){$[$=$v]})~>$count()}",
                                                           "tot": "jsonata"
                                                       }
                                                   ],
                                                   "action": "",
                                                   "property": "",
                                                   "from": "",
                                                   "to": "",
                                                   "reg": false,
                                                   "x": 390,
                                                   "y": 1800,
                                                   "wires": [
                                                       [
                                                           "db6b52e1b383fa3c",
                                                           "f9376b9bca6163b6"
                                                       ]
                                                   ],
                                                   "info": "# Objekt mit Häufigkeit des Auftretens in Array\r\n\r\nmuss noch auf payload übertragen werden.\r\n\r\n`$distinct($).{$ : $map($$,function($v){$[$=$v]}) ~> $count()}`"
                                               },
                                               {
                                                   "id": "db6b52e1b383fa3c",
                                                   "type": "debug",
                                                   "z": "29617fbe487e9c69",
                                                   "name": "Array-Analyse",
                                                   "active": true,
                                                   "tosidebar": true,
                                                   "console": false,
                                                   "tostatus": false,
                                                   "complete": "payload",
                                                   "targetType": "msg",
                                                   "statusVal": "",
                                                   "statusType": "auto",
                                                   "x": 620,
                                                   "y": 1800,
                                                   "wires": []
                                               },
                                               {
                                                   "id": "f9376b9bca6163b6",
                                                   "type": "change",
                                                   "z": "29617fbe487e9c69",
                                                   "name": "",
                                                   "rules": [
                                                       {
                                                           "t": "set",
                                                           "p": "search",
                                                           "pt": "msg",
                                                           "to": "Schöne Maid, hast Du heut für mich Zeit",
                                                           "tot": "str"
                                                       }
                                                   ],
                                                   "action": "",
                                                   "property": "",
                                                   "from": "",
                                                   "to": "",
                                                   "reg": false,
                                                   "x": 650,
                                                   "y": 1860,
                                                   "wires": [
                                                       [
                                                           "cda6bb4b435f80bb"
                                                       ]
                                                   ]
                                               },
                                               {
                                                   "id": "cda6bb4b435f80bb",
                                                   "type": "change",
                                                   "z": "29617fbe487e9c69",
                                                   "name": "",
                                                   "rules": [
                                                       {
                                                           "t": "set",
                                                           "p": "payload",
                                                           "pt": "msg",
                                                           "to": "payload.$sift(function($v,$k){$k = $$.search}).*",
                                                           "tot": "jsonata"
                                                       }
                                                   ],
                                                   "action": "",
                                                   "property": "",
                                                   "from": "",
                                                   "to": "",
                                                   "reg": false,
                                                   "x": 870,
                                                   "y": 1860,
                                                   "wires": [
                                                       [
                                                           "251eea7ce5c8efe0"
                                                       ]
                                                   ]
                                               },
                                               {
                                                   "id": "251eea7ce5c8efe0",
                                                   "type": "debug",
                                                   "z": "29617fbe487e9c69",
                                                   "name": "Suche Vorkommen von search ",
                                                   "active": true,
                                                   "tosidebar": true,
                                                   "console": false,
                                                   "tostatus": false,
                                                   "complete": "payload",
                                                   "targetType": "msg",
                                                   "statusVal": "",
                                                   "statusType": "auto",
                                                   "x": 1130,
                                                   "y": 1860,
                                                   "wires": []
                                               },
                                               {
                                                   "id": "4a0fb478973bae57",
                                                   "type": "inject",
                                                   "z": "29617fbe487e9c69",
                                                   "name": "Array mit Liedern und Ausgabe von search in einem",
                                                   "props": [
                                                       {
                                                           "p": "payload"
                                                       },
                                                       {
                                                           "p": "search",
                                                           "v": "Dancing Queen",
                                                           "vt": "str"
                                                       }
                                                   ],
                                                   "repeat": "",
                                                   "crontab": "",
                                                   "once": false,
                                                   "onceDelay": 0.1,
                                                   "topic": "",
                                                   "payload": "[\"Schöne Maid, hast Du heut für mich Zeit\",\"Jump\",\"Jump\",\"Blauer Enzian\",\"Dancing Queen\",\"Yellow Submarine\",\"Blauer Enzian\",\"Jump\",\"Dancing Queen\",\"S.O.S\",\"Schöne Maid, hast Du heut für mich Zeit\",\"Dancing Queen\",\"Dancing Queen\"]",
                                                   "payloadType": "json",
                                                   "x": 290,
                                                   "y": 1960,
                                                   "wires": [
                                                       [
                                                           "48f9fec07b2dac6a"
                                                       ]
                                                   ]
                                               },
                                               {
                                                   "id": "48f9fec07b2dac6a",
                                                   "type": "change",
                                                   "z": "29617fbe487e9c69",
                                                   "name": "",
                                                   "rules": [
                                                       {
                                                           "t": "set",
                                                           "p": "payload",
                                                           "pt": "msg",
                                                           "to": "$distinct(payload).{$: $map($$.payload,function($v){$[$=$v]})~>$count()}.$sift(function($v,$k){$k = $$.search}).*",
                                                           "tot": "jsonata"
                                                       }
                                                   ],
                                                   "action": "",
                                                   "property": "",
                                                   "from": "",
                                                   "to": "",
                                                   "reg": false,
                                                   "x": 610,
                                                   "y": 1960,
                                                   "wires": [
                                                       [
                                                           "969a1f62b4b01026"
                                                       ]
                                                   ],
                                                   "info": "# Objekt mit Häufigkeit des Auftretens in Array\r\n\r\nmuss noch auf payload übertragen werden.\r\n\r\n`$distinct($).{$ : $map($$,function($v){$[$=$v]}) ~> $count()}`"
                                               },
                                               {
                                                   "id": "969a1f62b4b01026",
                                                   "type": "debug",
                                                   "z": "29617fbe487e9c69",
                                                   "name": "Vorkommen von search in Array",
                                                   "active": true,
                                                   "tosidebar": true,
                                                   "console": false,
                                                   "tostatus": false,
                                                   "complete": "payload",
                                                   "targetType": "msg",
                                                   "statusVal": "",
                                                   "statusType": "auto",
                                                   "x": 850,
                                                   "y": 1960,
                                                   "wires": []
                                               }
                                            ]
                                            

                                            Auch JS Programmierer können JSONATA nutzen, da das im Adapter enthalten ist:

                                            var titel = [
                                                "Schöne Maid, hast Du heut für mich Zeit",
                                                "Jump",
                                                "Jump",
                                                "Blauer Enzian",
                                                "Dancing Queen",
                                                "Yellow Submarine",
                                                "Blauer Enzian",
                                                "Jump",
                                                "Dancing Queen",
                                                "S.O.S",
                                                "Schöne Maid, hast Du heut für mich Zeit"
                                            ];
                                            
                                            var analyse = jsonataExpression(titel,'$distinct($).{"titel": $, "count" : $map($$,function($v){$[$=$v]}) ~> $count()}');
                                            console.log(analyse);
                                            
                                            var suche = "Dancing Queen";
                                            var ergebnis =  jsonataExpression(analyse,'$[titel="'+ suche +'"].count');
                                            console.log("Der Titel "+ suche + " ergab "+ ergebnis + " Treffer.");
                                            

                                            19283b1b-d0e6-4186-8ffe-616ce78051fd-image.png

                                            DJMarc75 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            940
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            28
                                            875
                                            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