Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly: auf Werte einer Liste zugreifen

    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

    Blockly: auf Werte einer Liste zugreifen

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

      @Hiltex
      Nicht mit dem Index i vergleichen, sondern mit "in der Liste Liste nimm das i . Element".

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

        Ach super, das hatte ich garnicht gesehen.

        Also so?
        41a52890-d1bd-462e-8f97-1ae1174ea014-grafik.png

        liv-in-sky 2 Replies Last reply Reply Quote 0
        • liv-in-sky
          liv-in-sky @Hiltex last edited by

          @Hiltex

          kannst du denn nicht direkt nur auf den error triggern ? es gibt doch einen datenpunkt error

          falls nicht

          zerlege doch den status in eine liste und suche darin nach error

          Image 1.png
          Image 2.png

          such nach dem ersten aufkommen von error und dann sende die nachricht

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

            @Hiltex deinen ersten befehl verstehe ich nicht - erzreuge eine liste vor jeden wert von i (was ist i) und mache jeweils eine liste davon - das bedeutet du machst i listen - ist i 10 machst du 10 listen und diese werden nicht als variablen abgespeichert ? - die listen haben also keinen namen ?

            1 Reply Last reply Reply Quote 0
            • thewhobox
              thewhobox @Hiltex last edited by

              @Hiltex Wie liv-in-sky schon geschrieben hat geht es ohne Schleife besser.
              Die Liste kannst du vor dem Trigger erstellen und fragst danach ab, ob der Wert in der Liste nicht enthalten ist.
              b63ed5f8-9673-4ae0-87cd-ffc48e30a4b3-grafik.png

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

                @Hiltex
                Sorry, wenn ich mir die Übersetzung nach Javascript anschaue, dann ist doch der Vergleich mit i richtig (i enthält den Inhalt, nicht den Index).

                var i;
                
                
                var i_list = [null, null, null];
                for (var i_index in i_list) {
                  i = i_list[i_index];
                  if (getState("ID auswählen").val != i) {
                  }
                }
                
                1 Reply Last reply Reply Quote 0
                • liv-in-sky
                  liv-in-sky @Hiltex last edited by

                  @Hiltex

                  ein anderer lösungsvorschlag:

                  teststring ist der status-datenpunbkt bei dir:

                  Image 4.png

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

                    @thewhobox sagte:

                    Die Liste kannst du vor dem Trigger erstellen und fragst danach ab, ob der Wert in der Liste nicht enthalten ist.

                    Diese Vorgehensweise würde ich auch bevorzugen, denn die Liste enthält Konstanten.

                    Anmerkung: value ist eine vordefinierte lokale Variable, die den Wert des Triggerdatenpunktes enthält. Die Variable muss exakt so erstellt werden.

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

                      Oh wow, so viele Antworten. Danke für eure Lösungsvorschläge.

                      Vielleicht nochmal ein wenig ausführlicher, warum ich nicht einfach auf error triggere (was hier eigentlich im Wesentlichen das Ziel ist):
                      Ich möchte gerne Wissen, wenn etwas mit dem Mähroboter (Gardena) nicht stimmt und ich eingreifen muss. Das Problem ist jedoch, dass ich grundsätzlich an das Schlechte in der Produktentwicklung von Firmen glaube. Wenn bei einem Firmware-Update die Meldetexte geändert werden, bekomme ich das wohlmöglich nicht mit und entsprechend die Meldungen nicht mehr. Außerdem habe ich mir nicht die Mühe gemacht überhaupt mal zu recherchieren, welche Texte denn theoretisch kommen könnten. Also lasse ich mir im Prinzip alle zusenden, außer denen, die ich in die Liste eintrage. Das sind dann die, die für mich unbedeutend sind.
                      Der Vorteil dieser Variante ist, dass nun Gardena die Texte ändern kann, wie sie will. Solange der Datenpunkt noch beschrieben wird, bekomme ich die Meldungen und müsste dann einfach nur entsprechend die Liste anpassen.

                      Ich antworte mal in der Reihenfolge eurer antworten:

                      @liv-in-sky Der erste Block nach dem Trigger iteriert mit der Variablen i über die Liste, die dort quasi live erzeugt wird. Da ich die Liste nirgendwo außerhalb verwende, braucht sie auch keinen Namen.

                      @thewhobox Dein Script verstehe ich nicht. Liste erzeugen ist klar. Trigger ist der entsprechende Gardena-Datenpunkt. Falls 0 (was ist 0?) in der Liste suche erstes Auftreten von value (Inhalt vom Gardena-DP)

                      @paul53 Das hatte ich ganz zum Anfang ausprobiert. Funktioniert hatte das jedoch nicht, allerdings komme ich zu dem gleichen Schluss wie du. Das schaue ich mir nochmal an.

                      @liv-in-sky Der Vorschlag trifft nicht das eigentliche Ziel, denn hier wird ja nur nach error gesucht (siehe Erläuterung oben). Auch ist mir nicht ganz klar, wie in diesem Beispiel die Liste mit den einzelnen Werten entstehen soll, die ich nicht zugesandt haben will. Und wofür ist die Variable statusAlsListe gut? Ich steh hier irgendwie auf dem Schlauch.

                      @paul53 Mir gefällt das auch. Nur die 0 verstehe ich nicht.

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

                        @Hiltex sagte:

                        Nur die 0 verstehe ich nicht.

                        Diese Funktion gibt den Index zurück, an dem der Wert gefunden wurde. Ist der Wert nicht in der Liste, wird 0 zurück gegeben.

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

                          Danke. Das probiere ich aus.

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

                            @Hiltex

                            der punkt statusAlsListe erzeugt eine liste aus dem datenpunkt status - somit könnte man - wenn man die meldungen kennt - die liste einfach nach einträgen mit if-abfragen durchsuchen und herausfiltern was man braucht - und danach entscheiden was damit passieren soll (sozusagen könnte es als eine art trigger des rasenmähers verstanden werden) - ich nutze das z.b bei der abfrage vom summary-datenpunkt des alexa-adapters

                            natürlich abhängig, wie die status-nachrichten des mähers aufgebaut sind

                            war auch nur eine idee - so wie es aussieht, hast du ja eine lösung gefunden- mittlerweile habe ich das mit deinem ersten befehl auch gecheckt - sorry - da war ich wohl noch nicht ganz wach 😞

                            1 Reply Last reply Reply Quote 0
                            • dslraser
                              dslraser Forum Testing Most Active @Hiltex last edited by dslraser

                              @Hiltex
                              Ich habe keinen Gardena, aber beim Worx gibt es zwei Datenpunkte mit Listenwerten.

                              Einmal den Status:

                              worx status.png

                              Und Error:

                              worx-error.png

                              Ich habe mir für diese beiden Datenpunkte noch zwei eigene zusätzliche Datenpunkte erstellt, da ich gern die Meldung in deutsch bekommen möchte. Ausserdem verwende ich die eigenen Datenpunkte zur Anzeige in iQontol.

                              Screenshot_20190715-150138_Chrome.jpg

                              Wenn hier Herstellerseitig/Adapterseitig ein neuer Eintag in die Liste kommt, müßte ich das also mitbekommen. (über das letzte sonst...) Bisher funktioniert es wie gewünscht.

                              Mein Blockly dazu sieht so aus:

                              Bildschirmfoto 2019-07-15 um 14.39.52.png

                              Bildschirmfoto 2019-07-15 um 14.40.16.png

                              Bildschirmfoto 2019-07-15 um 14.40.46.png

                              50.000 Zeichen Limit, daher hier als Textdatei
                              worx.txt

                              Edit: heute morgen hatte ich mal (kommt selten vor) einen Error. Da habe ich den Mäher ausgeschaltet und wieder auf den Rasen gelegt und dann wieder gestartet.

                              Bildschirmfoto 2019-07-15 um 14.51.48.png

                              Hiltex R 2 Replies Last reply Reply Quote 0
                              • Hiltex
                                Hiltex @dslraser last edited by

                                @dslraser Nette Lösung aber das wäre mir viel zu viel Information. Ich habs lieber sparsam und lass mich nur bei Problemen informieren. Was bringt mir sonst mein smartes Zuhause, wenn es ständig meine Aufmerksamkeit benötigt?

                                Folgende Lösung funktioniert jetzt wie gewünscht:
                                4fb78060-1311-48e3-896f-5ab826b2328e-grafik.png

                                Die Liste erweitere ich bei Bedarf, wenn eine Meldung ankommt, die ich vorher noch nicht berücksichtigt habe.

                                Wenn ich mehr wissen will, dann nutze ich meine VIS. Da kann ich alles sehen, wenn ich da Lust drauf habe.
                                0bbeacca-2181-46c0-801c-08b65ede0080-grafik.png

                                Danke an alle für die Hilfe.

                                dslraser M 2 Replies Last reply Reply Quote 1
                                • dslraser
                                  dslraser Forum Testing Most Active @Hiltex last edited by

                                  @Hiltex
                                  sollte auch nur ein Beispiel sein. Die Meldungen, die Du nicht willst, kannst Du ja auch weg lessen.

                                  Hiltex 1 Reply Last reply Reply Quote 0
                                  • Hiltex
                                    Hiltex @dslraser last edited by

                                    @dslraser ich wollte dich und deine Lösung auch nicht kritisieren, sondern nur zum Ausdruck bringen, dass das nicht das ist, was ich mir vorstelle. Sorry, wenn das falsch rüber gekommen ist.

                                    dslraser 1 Reply Last reply Reply Quote 1
                                    • dslraser
                                      dslraser Forum Testing Most Active @Hiltex last edited by

                                      @Hiltex
                                      quatsch, kein Problem

                                      1 Reply Last reply Reply Quote 0
                                      • M
                                        muuulle @Hiltex last edited by

                                        @Hiltex
                                        Das sieht großartig aus. Könntest du mir die Scripte und den VIS Teil zur Verfügung stellen?

                                        Vielen Dank

                                        Hiltex 1 Reply Last reply Reply Quote 0
                                        • Hiltex
                                          Hiltex @muuulle last edited by

                                          @muuulle Da will ich mal nicht so sein 😉

                                          Der Blockly-Export:

                                          <xml xmlns="http://www.w3.org/1999/xhtml">
                                            <variables>
                                              <variable type="" id="A^Lj$G?P/~^?QyF]Z6(t">Liste</variable>
                                              <variable type="" id="qLWFjsyZoVDS)!v=wv$2">message-text</variable>
                                              <variable type="" id="%I}=-P3`d=35#Sx/=[+o">value</variable>
                                            </variables>
                                            <block type="comment" id="0rsl!cM_@)YcW^M:9Ad~" x="37" y="13">
                                              <field name="COMMENT">Liste mit Meldungen, die NICHT gesendet werden</field>
                                              <next>
                                                <block type="variables_set" id="voF4G0J0Np.6N80Q],mj">
                                                  <field name="VAR" id="A^Lj$G?P/~^?QyF]Z6(t" variabletype="">Liste</field>
                                                  <value name="VALUE">
                                                    <block type="lists_create_with" id="uM3ml=Z10Ey-[]5HlI;q">
                                                      <mutation items="5"></mutation>
                                                      <value name="ADD0">
                                                        <block type="text" id="y2qXW!{@M-;R}NjLi)(5">
                                                          <field name="TEXT">ok_leaving</field>
                                                        </block>
                                                      </value>
                                                      <value name="ADD1">
                                                        <block type="text" id="16+HEUL,!U_YjGrXpiv`">
                                                          <field name="TEXT">ok_cutting</field>
                                                        </block>
                                                      </value>
                                                      <value name="ADD2">
                                                        <block type="text" id="a[B,_}H3Tc./m5mq@YF%">
                                                          <field name="TEXT">ok_searching</field>
                                                        </block>
                                                      </value>
                                                      <value name="ADD3">
                                                        <block type="text" id="Wqlq?8y`D@u*$LivFvt5">
                                                          <field name="TEXT">ok_charging</field>
                                                        </block>
                                                      </value>
                                                      <value name="ADD4">
                                                        <block type="text" id="O:kfq6]l[y^yEV?%7a5c">
                                                          <field name="TEXT">parked_timer</field>
                                                        </block>
                                                      </value>
                                                    </block>
                                                  </value>
                                                  <next>
                                                    <block type="on_ext" id="fgr0{0UaysX(pzL9kO~L">
                                                      <mutation items="1"></mutation>
                                                      <field name="CONDITION">ne</field>
                                                      <field name="ACK_CONDITION"></field>
                                                      <value name="OID0">
                                                        <shadow type="field_oid" id="H;vS9z#$3=|m97kIJfui">
                                                          <field name="oid">gardena.0.datapoints.c1dd3c29-f7e4-47be-93df-2067815e31b0.eca204ea-d62d-4c73-8076-17a28e8f70fc.abilities.2c579936-2445-3831-a3f0-3266dc017705.2863fa2f-a0d4-3e82-8bb3-5088c2d2be58</field>
                                                        </shadow>
                                                      </value>
                                                      <statement name="STATEMENT">
                                                        <block type="controls_if" id="A{hA@)q`=X7UPpmcM!e-">
                                                          <value name="IF0">
                                                            <block type="logic_compare" id="L3fd^]`tVU4!Q0%c}D)q">
                                                              <field name="OP">EQ</field>
                                                              <value name="A">
                                                                <block type="lists_indexOf" id="5P_]#z$~wB^@jwh#qk55">
                                                                  <field name="END">FIRST</field>
                                                                  <value name="VALUE">
                                                                    <block type="variables_get" id="05%5*6#yD,v~A9u?2rpJ">
                                                                      <field name="VAR" id="A^Lj$G?P/~^?QyF]Z6(t" variabletype="">Liste</field>
                                                                    </block>
                                                                  </value>
                                                                  <value name="FIND">
                                                                    <block type="variables_get" id="ZfZ.gfD[VmjS-Y{$i^,l">
                                                                      <field name="VAR" id="%I}=-P3`d=35#Sx/=[+o" variabletype="">value</field>
                                                                    </block>
                                                                  </value>
                                                                </block>
                                                              </value>
                                                              <value name="B">
                                                                <block type="math_number" id="WEtX5VFr$g%hs9d;n#^Z">
                                                                  <field name="NUM">0</field>
                                                                </block>
                                                              </value>
                                                            </block>
                                                          </value>
                                                          <statement name="DO0">
                                                            <block type="controls_if" id="4/M],9a?k.-@AK,Bhy)*">
                                                              <mutation else="1"></mutation>
                                                              <value name="IF0">
                                                                <block type="logic_compare" id="|%^)L*Ev(nYM.,|vq`e$">
                                                                  <field name="OP">EQ</field>
                                                                  <value name="A">
                                                                    <block type="variables_get" id="],j`1g0*.S{+J#Dpe?@R">
                                                                      <field name="VAR" id="%I}=-P3`d=35#Sx/=[+o" variabletype="">value</field>
                                                                    </block>
                                                                  </value>
                                                                  <value name="B">
                                                                    <block type="text" id="!Xhf2}Fm6ry,N~;MfHik">
                                                                      <field name="TEXT">error</field>
                                                                    </block>
                                                                  </value>
                                                                </block>
                                                              </value>
                                                              <statement name="DO0">
                                                                <block type="variables_set" id="KU2H(a!gnsdS*1g!#TI6">
                                                                  <field name="VAR" id="qLWFjsyZoVDS)!v=wv$2" variabletype="">message-text</field>
                                                                  <value name="VALUE">
                                                                    <block type="text_join" id="H(3u`N%S8=V9MlY/pRU!">
                                                                      <mutation items="5"></mutation>
                                                                      <value name="ADD0">
                                                                        <block type="text" id="0pz-12?Pjx9L^~+2%utv">
                                                                          <field name="TEXT">&lt;B&gt;Robi-Status:&lt;/B&gt;</field>
                                                                        </block>
                                                                      </value>
                                                                      <value name="ADD1">
                                                                        <block type="text_newline" id="U-nhX`7thOe_gy@bXez3">
                                                                          <field name="Type">\n</field>
                                                                        </block>
                                                                      </value>
                                                                      <value name="ADD2">
                                                                        <block type="variables_get" id="HiUK^Q^}EiGk)cAT=G%%">
                                                                          <field name="VAR" id="%I}=-P3`d=35#Sx/=[+o" variabletype="">value</field>
                                                                        </block>
                                                                      </value>
                                                                      <value name="ADD3">
                                                                        <block type="text_newline" id="p1+4wNSF6l]sjZMseOaO">
                                                                          <field name="Type">\n</field>
                                                                        </block>
                                                                      </value>
                                                                      <value name="ADD4">
                                                                        <block type="get_value" id=":O6+eQgA;2NTzr/Ow*4c">
                                                                          <field name="ATTR">val</field>
                                                                          <field name="OID">gardena.0.datapoints.c1dd3c29-f7e4-47be-93df-2067815e31b0.eca204ea-d62d-4c73-8076-17a28e8f70fc.abilities.2c579936-2445-3831-a3f0-3266dc017705.c81e86ee-16c6-3352-9ba1-28488718f64e</field>
                                                                        </block>
                                                                      </value>
                                                                    </block>
                                                                  </value>
                                                                </block>
                                                              </statement>
                                                              <statement name="ELSE">
                                                                <block type="variables_set" id="1J[J:2Xjb)j6`RyUPqy,">
                                                                  <field name="VAR" id="qLWFjsyZoVDS)!v=wv$2" variabletype="">message-text</field>
                                                                  <value name="VALUE">
                                                                    <block type="text_join" id="co*b6;a/T?,pp3}w2/xJ">
                                                                      <mutation items="3"></mutation>
                                                                      <value name="ADD0">
                                                                        <block type="text" id=",_gg?MBhxdKdtUGskN]{">
                                                                          <field name="TEXT">&lt;B&gt;Robi-Status:&lt;/B&gt;</field>
                                                                        </block>
                                                                      </value>
                                                                      <value name="ADD1">
                                                                        <block type="text_newline" id="UN!EmU]$y8:p}VsZM]+2">
                                                                          <field name="Type">\n</field>
                                                                        </block>
                                                                      </value>
                                                                      <value name="ADD2">
                                                                        <block type="variables_get" id="heEXEXYE27!Umy7yNlPx">
                                                                          <field name="VAR" id="%I}=-P3`d=35#Sx/=[+o" variabletype="">value</field>
                                                                        </block>
                                                                      </value>
                                                                    </block>
                                                                  </value>
                                                                </block>
                                                              </statement>
                                                              <next>
                                                                <block type="telegram" id="rWxr:B@M}XZ{:`mEBLmq">
                                                                  <field name="INSTANCE"></field>
                                                                  <field name="LOG"></field>
                                                                  <field name="SILENT">FALSE</field>
                                                                  <field name="PARSEMODE">HTML</field>
                                                                  <value name="MESSAGE">
                                                                    <shadow type="text" id="oO(Hh}{3KME6+k}i.yc1">
                                                                      <field name="TEXT">text</field>
                                                                    </shadow>
                                                                    <block type="variables_get" id="-S?wE;x+-*t~BJhi8+WW">
                                                                      <field name="VAR" id="qLWFjsyZoVDS)!v=wv$2" variabletype="">message-text</field>
                                                                    </block>
                                                                  </value>
                                                                </block>
                                                              </next>
                                                            </block>
                                                          </statement>
                                                        </block>
                                                      </statement>
                                                    </block>
                                                  </next>
                                                </block>
                                              </next>
                                            </block>
                                          </xml>
                                          

                                          Und der Export aus VIS als Dateianhang, da zu lang für die Zeichenbegrenzung.
                                          vis_maehroboter.txt

                                          Sieht dann so aus:
                                          1563197012598-0bbeacca-2181-46c0-801c-08b65ede0080-grafik.png

                                          1 Reply Last reply Reply Quote 0
                                          • R
                                            Ravermichl @dslraser last edited by

                                            @dslraser

                                            Klasse Script! Genau sowas hab ich auch für meinen Landroid gesucht. Hab es gerade übernommen und minimal abgeändert. Funktioniert einwandfrei. Wollte mich trotz des Alters des Posts noch dafür bedanken. Also: Danke 😁

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            956
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            blockly
                                            8
                                            24
                                            10773
                                            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