Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Werte aus Text und Mittelwert berechnen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Werte aus Text und Mittelwert berechnen

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

      Guten Morgen,

      ich habe einen DP in dem ich mir die Core Temperaturen meines Intel NUC schreiben lasse. Die Daten sehen so aus:

      Package id 0:
      Core 0: +59.0°C
      Core 1: +58.0°C
      Core 2: +64.0°C
      Core 3: +62.0°C
      Core 4: +58.0°C
      Core 5: +54.0°C
      

      Also habe ich Blockly erstellt, welches mir die Werte da rausholt und in Variablen schreibt. Ich mache das über "im Text * nimm Teil ab * bis* Buchstabe", keine Ahnung ob es eleganter geht? Das sieht dann so aus:
      Core Temperaturen.jpg
      Die Debug Ausgabe sieht dann so aus:

      Core Temp:, 64, 77, 69, 64, 64, 59
      

      Ich habe also nur glatte Werte. Wie bekomme ich da jetzt den Mittelwert raus? Einfach alle Werte addieren und dann durch 6 teilen? Oder muss/sollte man das anders machen?

      Wenn ich den Mittelwert habe, möchte ich mir eine Nachricht schicken lassen, wenn dieser 10 Minuten am Stück über 80 liegt. Da der DP jede Minute aktualisiert wird, würde ich einen Zähler setzen, der jedes mal wenn der Wert über 80 geht, erhöht wird und wenn dann 10 erreicht ist, bekomme ich die Nachricht. Sollte der Wert zwischendurch wieder unter 80 sein, wird der Zähler natürlich wieder auf 0 gesetzt. Ist das so okay, oder gibt es da bessere Varianten?

      Und im letzten Stepp dann noch eine JSON erstellen, so das ich die aktuellen Werte inklusive Mittelwert in VIS darstellen kann. Das müsste ich aber hinkriegen.

      Gruß, Johannes

      haus-automatisierung paul53 3 Replies Last reply Reply Quote 0
      • haus-automatisierung
        haus-automatisierung Developer Most Active @JoJo58 last edited by

        @jojo58 So z.B.

        Geht aber bestimmt auch eleganter

        Screenshot 2025-04-24 at 13.20.23.png

        <xml xmlns="https://developers.google.com/blockly/xml">
          <variables>
            <variable id="0qMo2W}Kq_]r}pKv?1vm">text</variable>
            <variable id="x7~jx3L$wieq,D+zr=!(">temps</variable>
            <variable id="MLf-it[+Dt[|c@mAEe4(">zeile</variable>
          </variables>
          <block type="variables_set" id="7Ucg_OX_*N)bq0%Kl_a)" x="163" y="63">
            <field name="VAR" id="0qMo2W}Kq_]r}pKv?1vm">text</field>
            <value name="VALUE">
              <block type="text_multiline" id="cy;o?qx~`eF^UN]UqZul">
                <field name="TEXT">Package id 0:&amp;#10;Core 0: +59.0°C&amp;#10;Core 1: +58.0°C&amp;#10;Core 2: +64.0°C&amp;#10;Core 3: +62.0°C&amp;#10;Core 4: +58.0°C&amp;#10;Core 5: +54.0°C</field>
              </block>
            </value>
            <next>
              <block type="variables_set" id="IH)|e{lmuaE)T]`@I^?a">
                <field name="VAR" id="x7~jx3L$wieq,D+zr=!(">temps</field>
                <value name="VALUE">
                  <block type="lists_create_with" id="=|s:yEwawraI%,*eZ9H/">
                    <mutation items="0"></mutation>
                  </block>
                </value>
                <next>
                  <block type="controls_forEach" id="J_ad`K%~~2dNftid)]P)">
                    <field name="VAR" id="MLf-it[+Dt[|c@mAEe4(">zeile</field>
                    <value name="LIST">
                      <block type="lists_split" id="~F$]Wk0FMe,c)^2h3@K?">
                        <mutation mode="SPLIT"></mutation>
                        <field name="MODE">SPLIT</field>
                        <value name="INPUT">
                          <block type="variables_get" id="=o8Hj9[I8fwhA:o_lf+z">
                            <field name="VAR" id="0qMo2W}Kq_]r}pKv?1vm">text</field>
                          </block>
                        </value>
                        <value name="DELIM">
                          <shadow type="text" id="c%6LCj4K8ve~$$wD$m|X">
                            <field name="TEXT">,</field>
                          </shadow>
                          <block type="text_newline" id="n~rV|d@73=w?eZH2gnra">
                            <field name="Type">\n</field>
                          </block>
                        </value>
                      </block>
                    </value>
                    <statement name="DO">
                      <block type="controls_if" id="v]2Q`|tZh4mqq%7=-h-)">
                        <value name="IF0">
                          <block type="text_contains" id="fm:,r?W2bP3^!SDLwOKN">
                            <value name="VALUE">
                              <block type="variables_get" id="R|}r:]vxm8.]0_d/`tVx">
                                <field name="VAR" id="MLf-it[+Dt[|c@mAEe4(">zeile</field>
                              </block>
                            </value>
                            <value name="FIND">
                              <shadow type="text" id="B;Qv*h90:L8HiNMh#*W(">
                                <field name="TEXT">Core </field>
                              </shadow>
                            </value>
                          </block>
                        </value>
                        <statement name="DO0">
                          <block type="lists_setIndex" id="eMS@W;3A2[OeDKBTII!B">
                            <mutation at="false"></mutation>
                            <field name="MODE">INSERT</field>
                            <field name="WHERE">LAST</field>
                            <value name="LIST">
                              <block type="variables_get" id="K6K?kt4G_-$McHeXdr1b">
                                <field name="VAR" id="x7~jx3L$wieq,D+zr=!(">temps</field>
                              </block>
                            </value>
                            <value name="TO">
                              <block type="convert_tonumber" id="K`iJtTg^1c%cbK?=Rl)0">
                                <value name="VALUE">
                                  <block type="text_getSubstring" id="pm7jmow)[[g=`U^Sv2ZA" inline="false">
                                    <mutation at1="true" at2="true"></mutation>
                                    <field name="WHERE1">FROM_START</field>
                                    <field name="WHERE2">FROM_START</field>
                                    <value name="STRING">
                                      <block type="variables_get" id="LC[^)s9n=+eRjpY$$m73">
                                        <field name="VAR" id="MLf-it[+Dt[|c@mAEe4(">zeile</field>
                                      </block>
                                    </value>
                                    <value name="AT1">
                                      <block type="math_arithmetic" id="C_=(CgSmAJLu}7^q%.=q">
                                        <field name="OP">ADD</field>
                                        <value name="A">
                                          <shadow type="math_number" id=",@QKm_VOfV.Smev`PfNS">
                                            <field name="NUM">1</field>
                                          </shadow>
                                          <block type="text_indexOf" id="6+agAoxdPGQr15}plp|g">
                                            <field name="END">FIRST</field>
                                            <value name="VALUE">
                                              <block type="variables_get" id="9TfSPs[3$eFU=@Fi`v6*">
                                                <field name="VAR" id="MLf-it[+Dt[|c@mAEe4(">zeile</field>
                                              </block>
                                            </value>
                                            <value name="FIND">
                                              <shadow type="text" id=";aX65G3Gjkzv}4t^vIrk">
                                                <field name="TEXT">+</field>
                                              </shadow>
                                            </value>
                                          </block>
                                        </value>
                                        <value name="B">
                                          <shadow type="math_number" id="19L}i~!w}b%7(p^$aY+w">
                                            <field name="NUM">1</field>
                                          </shadow>
                                        </value>
                                      </block>
                                    </value>
                                    <value name="AT2">
                                      <block type="math_arithmetic" id="WqSv1/!M4VF=h,po@jzT">
                                        <field name="OP">MINUS</field>
                                        <value name="A">
                                          <shadow type="math_number" id="6f#D0qeMn7wuECIxM+o0">
                                            <field name="NUM">1</field>
                                          </shadow>
                                          <block type="text_indexOf" id="ZC!j*$!D(SQ(B1?`M({c">
                                            <field name="END">FIRST</field>
                                            <value name="VALUE">
                                              <block type="variables_get" id="/8m[T=GWFR99Z=|*+tH#">
                                                <field name="VAR" id="MLf-it[+Dt[|c@mAEe4(">zeile</field>
                                              </block>
                                            </value>
                                            <value name="FIND">
                                              <shadow type="text" id="3:oJ2zHC}31[^9jGLs{i">
                                                <field name="TEXT">°C</field>
                                              </shadow>
                                            </value>
                                          </block>
                                        </value>
                                        <value name="B">
                                          <shadow type="math_number" id="_sHFhGfp6/o-k7UvGy$s">
                                            <field name="NUM">1</field>
                                          </shadow>
                                        </value>
                                      </block>
                                    </value>
                                  </block>
                                </value>
                              </block>
                            </value>
                          </block>
                        </statement>
                      </block>
                    </statement>
                    <next>
                      <block type="debug" id="%Yk%{UA$F03t$BnC3FWE">
                        <field name="Severity">info</field>
                        <value name="TEXT">
                          <shadow type="text" id="FhVtLn]]J=wJtP`=tv]9">
                            <field name="TEXT">test</field>
                          </shadow>
                          <block type="math_rndfixed" id="hZ8W0k{Jt/ICe_9Ab5Ui">
                            <field name="n">2</field>
                            <value name="x">
                              <shadow type="math_number" id="]80=H[TgUUt[jq:Z2whZ">
                                <field name="NUM">3.1234</field>
                              </shadow>
                              <block type="math_on_list" id="I7Z)L3kX|jp@uzt~|;9L">
                                <mutation op="AVERAGE"></mutation>
                                <field name="OP">AVERAGE</field>
                                <value name="LIST">
                                  <block type="variables_get" id="He)C|$TZ3m*3Ll_?)3C=">
                                    <field name="VAR" id="x7~jx3L$wieq,D+zr=!(">temps</field>
                                  </block>
                                </value>
                              </block>
                            </value>
                          </block>
                        </value>
                      </block>
                    </next>
                  </block>
                </next>
              </block>
            </next>
          </block>
        </xml>
        
        haus-automatisierung Homoran 2 Replies Last reply Reply Quote 1
        • haus-automatisierung
          haus-automatisierung Developer Most Active @haus-automatisierung last edited by

          Per JavaScript natürlich deutlich kürzer:

          const text = `
          Package id 0:
          Core 0: +59.0°C
          Core 1: +58.0°C
          Core 2: +64.0°C
          Core 3: +62.0°C
          Core 4: +58.0°C
          Core 5: +54.0°C
          `;
          
          const temps = [...text.matchAll(/Core \d+: \+([\d.]+)°C/g)].map(match => parseFloat(match[1]));
          const average = temps.reduce((sum, temp) => sum + temp, 0) / temps.length;
          
          console.log(`Durchschnittstemperatur: ${average.toFixed(2)}`);
          
          1 Reply Last reply Reply Quote 1
          • paul53
            paul53 @JoJo58 last edited by paul53

            @jojo58 sagte: Wie bekomme ich da jetzt den Mittelwert raus?

            Eine Version:

            Blockly_temp.JPG

            1 Reply Last reply Reply Quote 2
            • Homoran
              Homoran Global Moderator Administrators @haus-automatisierung last edited by Homoran

              @haus-automatisierung sagte in Werte aus Text und Mittelwert berechnen:

              Geht aber bestimmt auch eleganter

              warum dann nicht doch

              @jojo58 sagte in Werte aus Text und Mittelwert berechnen:

              Einfach alle Werte addieren und dann durch 6 teilen

              ich halte das Arbeiten mit der Liste in diesem Fall für zu umständlich.

              EDIT:
              Wenn ich auf die Lösung von @Paul53 gekommen wäte, sähe die Aussage anders aus 😁

              haus-automatisierung 1 Reply Last reply Reply Quote 0
              • haus-automatisierung
                haus-automatisierung Developer Most Active @Homoran last edited by haus-automatisierung

                @homoran sagte in Werte aus Text und Mittelwert berechnen:

                ich halte das Arbeiten mit der Liste in diesem Fall für zu umständlich.

                Vorteil ist halt, dass man die Länge / Anzahl der Elemente auch direkt kennt und nicht noch eine Zähl-Variable mitschleppen muss. Also einfach zur Liste hinzufügen und am Ende mit dem Baustein den Mittelwert holen...

                Screenshot 2025-04-24 at 13.32.20.png

                Meine Variante funktioniert immer. Egal ob 2 oder 24 Cores. Und ob die erste Zeile des Textes enthalten ist oder nicht spielt auch keine Rolle.

                JoJo58 1 Reply Last reply Reply Quote 1
                • JoJo58
                  JoJo58 @haus-automatisierung last edited by JoJo58

                  @haus-automatisierung

                  Das Blockly von dir verstehe ich nach kurzem Nachdenken sogar 😉 (und es funktioniert), bei dem von @paul53 sieht es schon anders aus, das wird bestimmt auch funktionieren, aber ich verstehe nicht wie? 😲

                  @haus-automatisierung Kann ich die Liste "temps" auch direkt nutzen um daraus den JSON DP zu erzeugen?

                  EDIT:
                  Ist Quatsch, das geht nicht so einfach, da ich dann nur die Spalte mit Werte ohne Zuordnung zu Core oder Mittelwert habe. Sorry, zu kurz gedacht. 😞

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

                    Mitt JSONATA und Blockly gehts noch kürzer, aber bevor ich dann wieder Kritik ernte, werde ich die Lösung nur auf Wunsch vorstellen.

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

                      @mickym

                      Wüßte nicht, warum ich deinen Vorschlag kritisieren sollte? Oder war das allgemein gemeint?

                      Ich habe es jetzt mit der Version von @haus-automatisierung gelöst und das läuft erst mal.

                      Danke für die schnelle Hilfe und eure Vorschläge. Hab gerade gesehen das @paul53 das noch mal angepasst hat, ich baue das auch noch nach, alleine schon um etwas zu lernen. 🙂

                      mickym 1 Reply Last reply Reply Quote 1
                      • paul53
                        paul53 @JoJo58 last edited by paul53

                        @jojo58 sagte: JSON erstellen, so das ich die aktuellen Werte inklusive Mittelwert in VIS darstellen kann.

                        Vorschlag:

                        Blockly_temp.JPG

                        JoJo58 2 Replies Last reply Reply Quote 0
                        • mickym
                          mickym Most Active @JoJo58 last edited by

                          @jojo58 sagte in Werte aus Text und Mittelwert berechnen:

                          Wüßte nicht, warum ich deinen Vorschlag kritisieren sollte? Oder war das allgemein gemeint?

                          Dann hier mal meine Lösung - ein neues Objekt zu erstellen ist damit auch sehr einfach, aber keine Ahnung, wie Du das haben willst.

                          Hier das JSONATA:

                          $match($,/\d+\.\d/).$number(match)~>$average()~>$round(2)
                          

                          c9a5be24-baf8-4e6a-98f8-b5aa3baea3e3-image.png

                          und hier das Blockly zum Import:

                          <xml xmlns="https://developers.google.com/blockly/xml">
                           <variables>
                             <variable id="hu+F[F+=/+n6(w#b!bkk">Text</variable>
                           </variables>
                           <block type="variables_set" id="^~Sv#fxrrEl3v%:$_j(K" x="-137" y="63">
                             <field name="VAR" id="hu+F[F+=/+n6(w#b!bkk">Text</field>
                             <value name="VALUE">
                               <block type="text" id="}KJz}$Rs!%XxMZl%j4_w">
                                 <field name="TEXT">Package id 0: Core 0: +59.0°C Core 1: +58.0°C Core 2: +64.0°C Core 3: +62.0°C Core 4: +58.0°C Core 5: +54.0°C</field>
                               </block>
                             </value>
                             <next>
                               <block type="debug" id="k08ZC410l/7`T|+g_+w@">
                                 <field name="Severity">info</field>
                                 <value name="TEXT">
                                   <shadow type="text" id=",T!NCf4e|u/ADp:g1bn[">
                                     <field name="TEXT">test</field>
                                   </shadow>
                                   <block type="text_join" id="~F~v3J+nR#hK*ocxCF#X">
                                     <mutation items="2"></mutation>
                                     <value name="ADD0">
                                       <block type="text" id="C}wpA(/bWjvr.r;!:{9q">
                                         <field name="TEXT">Mittelwert (gerundet 2 Dezimalstellen): </field>
                                       </block>
                                     </value>
                                     <value name="ADD1">
                                       <block type="convert_jsonata" id="u}[_Z`KWHAeHkdE@@V?=">
                                         <value name="EXPRESSION">
                                           <shadow type="text" id="eg-6.rV=oGTM`RArquVg">
                                             <field name="TEXT">$match($,/\d+\.\d/).$number(match)~&gt;$average()~&gt;$round(2)</field>
                                           </shadow>
                                         </value>
                                         <value name="TARGET">
                                           <block type="variables_get" id="n+aI}jp_T]nxZ439rGaK">
                                             <field name="VAR" id="hu+F[F+=/+n6(w#b!bkk">Text</field>
                                           </block>
                                         </value>
                                       </block>
                                     </value>
                                   </block>
                                 </value>
                               </block>
                             </next>
                           </block>
                           <block type="convert_json2object" id="1-ME3y(y.YrZvl:v}Pb`" x="388" y="438"></block>
                          </xml>
                          

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

                            @mickym

                            Danke, werde ich auch ausprobieren. 🙂

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

                              @paul53 sagte in Werte aus Text und Mittelwert berechnen:

                              Vorschlag:

                              Das wird ja immer besser. Danke... 🙂 👍 Ich sage Bescheid, sobald ich es nachgebaut habe. Werde aber wohl erst Montag dazu kommen, da wir ab morgen früh für ein paar Tage weg sind.

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

                                @paul53

                                Moin, bin eben erst dazu gekommen, das aus deinem Post nachzubauen. Es hat auf Anhieb funktioniert und hier mal das Blockly und das Ergebnis:
                                Blockly Core Temp.jpg
                                Temperatur VIS.jpg

                                Danke für die Vorlage. Wieder etwas dazugelernt. 👍

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

                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                948
                                Online

                                31.7k
                                Users

                                79.7k
                                Topics

                                1.3m
                                Posts

                                5
                                14
                                214
                                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