Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Monat als Bedingung

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Monat als Bedingung

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

      Hallo,
      gibt es in Blockly eine Option, den aktuellen Monat als Bedingung zu nutzen?
      Ich würde gerne in einem Skript so etwas nutzen:

      Wenn der aktuelle Monat Mai, Juni, Juli, August, September ist, dann [...] ansonsten [...]

      Oder muss ich erst ein Skript erstellen, der den Monat als Objekt erstellt?

      Vielen Dank!

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

        @ionar Sowas?

        Screenshot 2022-10-18 at 10.08.17.png

        <xml xmlns="https://developers.google.com/blockly/xml">
          <block type="controls_if" id="]Xf,TLH[2hWhtzZAyiO#" x="-338" y="337">
            <mutation else="1"></mutation>
            <value name="IF0">
              <block type="logic_compare" id="-0Q[B-o3AK.-?BcNH?wm" inline="false">
                <field name="OP">GT</field>
                <value name="A">
                  <block type="lists_indexOf" id="F`;_-JP*?C@Rx;-Fx!B]">
                    <field name="END">FIRST</field>
                    <value name="VALUE">
                      <block type="lists_create_with" id="_Rn;0qv=Xu,^@OS`Bdl.">
                        <mutation items="5"></mutation>
                        <value name="ADD0">
                          <block type="math_number" id=",oOO/@POXoS~eWp+6=}C">
                            <field name="NUM">5</field>
                          </block>
                        </value>
                        <value name="ADD1">
                          <block type="math_number" id="SBtjdoy,XOsMkGsr2zp;">
                            <field name="NUM">6</field>
                          </block>
                        </value>
                        <value name="ADD2">
                          <block type="math_number" id="@B`!mLQOPN8u`a0Z^sZT">
                            <field name="NUM">7</field>
                          </block>
                        </value>
                        <value name="ADD3">
                          <block type="math_number" id="^O;/x)?([)]:*F{o|m^#">
                            <field name="NUM">8</field>
                          </block>
                        </value>
                        <value name="ADD4">
                          <block type="math_number" id="Zon53V9-%7}|lXKt5OZ[">
                            <field name="NUM">9</field>
                          </block>
                        </value>
                      </block>
                    </value>
                    <value name="FIND">
                      <block type="time_get" id="q,-5$nrng@pfapYXeR8p">
                        <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation>
                        <field name="OPTION">M</field>
                      </block>
                    </value>
                  </block>
                </value>
                <value name="B">
                  <block type="math_number" id="yp?!9v=vGa(:~Q|wW56.">
                    <field name="NUM">0</field>
                  </block>
                </value>
              </block>
            </value>
          </block>
        </xml>
        
        I 1 Reply Last reply Reply Quote 1
        • I
          ionar @haus-automatisierung last edited by

          @haus-automatisierung
          Die Blöcke verstehe ich nicht ganz, aber es wird wahrscheinlich das sein, was ich meine 😆

          Vielen Dank!

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

            @ionar sagte in Monat als Bedingung:

            Die Blöcke verstehe ich nicht ganz

            Was verstehst Du denn nicht? Es wird einfach geschaut, ob der aktuelle Monat in der Liste der von Dir definierten Monate vorkommt, oder nicht.

            @ionar sagte in Monat als Bedingung:

            Vielen Dank!

            Ich freue mich über einen Upvote des Beitrags, wenn es hilfreich war 🙂

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

              @haus-automatisierung
              Die Liste verstehe ich noch, konnte ich auch gerade mit Debug Output mit und ohne "10" in der Liste testen, um es zu verstehen.
              Aber das davor:

              "Wenn größer als Null und der aktuelle Monat als Zahl (dieser Monat 10) in der Liste 5-9 vorkommt, dann [...]"

              Ist das so richtig? Vielen Dank auf jeden Fall!

              liv-in-sky Codierknecht 2 Replies Last reply Reply Quote 0
              • Homoran
                Homoran Global Moderator Administrators last edited by

                https://forum.iobroker.net/post/874999

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

                  @ionar
                  sowas war erst gestern im forum https://forum.iobroker.net/post/874999

                  1 Reply Last reply Reply Quote 1
                  • Codierknecht
                    Codierknecht Developer Most Active @ionar last edited by Codierknecht

                    @ionar sagte in Monat als Bedingung:

                    @haus-automatisierung
                    Die Liste verstehe ich noch, konnte ich auch gerade mit Debug Output mit und ohne "10" in der Liste testen, um es zu verstehen.
                    Aber das davor:

                    "Wenn größer als Null und der aktuelle Monat als Zahl (dieser Monat 10) in der Liste 5-9 vorkommt, dann [...]"

                    Ist das so richtig? Vielen Dank auf jeden Fall!

                    "Monat als Zahl" liefert einfach den Zahlenwert des aktuellen Monats ... im Moment also eine "10".
                    "Suche ersten Auftreten" liefert die Position dieses Zahlenwertes in der vorgegeben Liste.
                    In einer Liste "5,6,7,8,9" würde das Ergebnis "0" "-1" lauten (0-basierter Index). Der Wert ist nicht enthalten.
                    Besteht die Liste aus den Werten "5,6,7,8,9,10", kommt als Ergebnis eine "6" "5" zurück.

                    Alles was größer oder gleich 0 ist bedeutet demnach schlichtweg, dass der gesuchte Wert in der Liste enthalten ist.
                    Darauf kannst Du dann reagieren und das "falls/sonst" mit Leben füllen.

                    Wenn die gewünschte Liste lediglich Monate von-bis enthält, ist das hier natürlich einfacher und vermutlich verständlicher: https://forum.iobroker.net/post/874999

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

                      @codierknecht sagte in Monat als Bedingung:

                      Alles was größer oder gleich 0 ist bedeutet demnach schlichtweg, dass der gesuchte Wert in der Liste enthalten ist.

                      Wenn man .indexOf() kennt, dann könnte man das denken.
                      Leider rechnet der Blockly-Baustein +1. Also > 0 bedeutet gefunden und == 0 wäre nicht gefunden. Finde ich auch verwirrend. Man möchte wohl den Nutzern das "Index fängt bei 0 an"-Thema vereinfachen.

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

                        @haus-automatisierung sagte in Monat als Bedingung:

                        @codierknecht sagte in Monat als Bedingung:

                        Alles was größer oder gleich 0 ist bedeutet demnach schlichtweg, dass der gesuchte Wert in der Liste enthalten ist.

                        Wenn man .indexOf() kennt, dann könnte man das denken.
                        Leider rechnet der Blockly-Baustein +1. Also > 0 bedeutet gefunden und == 0 wäre nicht gefunden. Finde ich auch verwirrend. Man möchte wohl den Nutzern das "Index fängt bei 0 an"-Thema vereinfachen.

                        Fast so schlimm wie das Ganze einzudeutschen ... gruselig.
                        Hab's korrigiert! Danke!

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

                          @codierknecht Ich muss mir auch ständig den generierten JS-Code anschauen, ... um zu gucken ob der Block wirklich das macht, was ich hoffe 🙂

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

                            @haus-automatisierung
                            Dieses eingedeutschte Zeugs erinnert mich fatal an ein deutsches VBA in Excel.

                            "Wenn ... dann ... sonst"
                            

                            und - noch besser

                            "für x = 1 bis 10 ... nächstes"
                            

                            da braucht man beim Lesen ein Beißholz.

                            1 Reply Last reply Reply Quote 1
                            • I
                              ionar last edited by

                              Danke für die ganzen hilfreichen Antworten!
                              Also müsste das Skript mit diesen Bedingungen dann ja laufen oder?
                              Hintergrund ist, dass im Winter "Sonnig+bewölkt" nicht wirklich sonnig genug ist, damit beschattet werden muss.

                              1.png

                              Homoran 1 Reply Last reply Reply Quote 0
                              • Homoran
                                Homoran Global Moderator Administrators @ionar last edited by

                                @ionar ich verstehe immer noch nicht, warum ihr unbedingt mit Listen arbeiten wollt.

                                I haus-automatisierung 2 Replies Last reply Reply Quote 0
                                • I
                                  ionar @Homoran last edited by

                                  @homoran Weil ich nicht wusste, wie ich deins als Bedingung einbaue 😆

                                  Homoran 1 Reply Last reply Reply Quote 0
                                  • Homoran
                                    Homoran Global Moderator Administrators @ionar last edited by

                                    @ionar sagte in Monat als Bedingung:

                                    @homoran Weil ich nicht wusste, wie ich deins als Bedingung einbaue 😆

                                    falls aktuelle Zeit als Monat als Nummer <=4 oder aktuelle Zeit als Monat als Nummer >= 10

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

                                      @homoran Habe ich etwas verpasst? Der generierte Code ist doch super kurz - wo ist das Problem damit?

                                      if ([5, 6, 7, 8, 9].indexOf((new Date().getMonth() + 1)) + 1 > 0) {
                                      

                                      Ich finde das sogar leichter zu verstehen (hat der TO ja direkt angepasst für Winter).

                                      Aber hier:

                                      Screenshot 2022-10-18 at 11.12.07.png

                                      <xml xmlns="https://developers.google.com/blockly/xml">
                                        <variables>
                                          <variable id=",g^U$HY6Nt@|S)Jbx`lZ">month</variable>
                                        </variables>
                                        <block type="variables_set" id="LVQRo5;55e$:qr7C|B`[" x="-312" y="788">
                                          <field name="VAR" id=",g^U$HY6Nt@|S)Jbx`lZ">month</field>
                                          <value name="VALUE">
                                            <block type="time_get" id="N*}8@y=d27R6jq^PL=c/">
                                              <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation>
                                              <field name="OPTION">M</field>
                                            </block>
                                          </value>
                                          <next>
                                            <block type="controls_if" id="di=z-NMxup=@@XdZt/=+">
                                              <mutation else="1"></mutation>
                                              <value name="IF0">
                                                <block type="logic_operation" id=";68kByEfgtLu?Nn;+T~Q">
                                                  <field name="OP">AND</field>
                                                  <value name="A">
                                                    <block type="logic_compare" id="Q7%5+-vR*V8MV2r?4+{G">
                                                      <field name="OP">GTE</field>
                                                      <value name="A">
                                                        <block type="variables_get" id="$Qn?7I|Vr?=%[Q=VDE2w">
                                                          <field name="VAR" id=",g^U$HY6Nt@|S)Jbx`lZ">month</field>
                                                        </block>
                                                      </value>
                                                      <value name="B">
                                                        <block type="math_number" id="+PAOo0XrfUI_x6#zJ)r=">
                                                          <field name="NUM">5</field>
                                                        </block>
                                                      </value>
                                                    </block>
                                                  </value>
                                                  <value name="B">
                                                    <block type="logic_compare" id="y/?1j/!_WV?kqMKZGoCp">
                                                      <field name="OP">LTE</field>
                                                      <value name="A">
                                                        <block type="variables_get" id="ZcaJPCpi;j[v(S|6Ro?U">
                                                          <field name="VAR" id=",g^U$HY6Nt@|S)Jbx`lZ">month</field>
                                                        </block>
                                                      </value>
                                                      <value name="B">
                                                        <block type="math_number" id="%97Gfdp=|e?CuN`e,Q`w">
                                                          <field name="NUM">9</field>
                                                        </block>
                                                      </value>
                                                    </block>
                                                  </value>
                                                </block>
                                              </value>
                                            </block>
                                          </next>
                                        </block>
                                      </xml>
                                      
                                      Homoran 1 Reply Last reply Reply Quote 2
                                      • Homoran
                                        Homoran Global Moderator Administrators @haus-automatisierung last edited by

                                        @haus-automatisierung sagte in Monat als Bedingung:

                                        Aber hier:

                                        danke, mit var sogar noch einfacher!
                                        am Handy unterwegs sind Blöcke so schwer zu zeichnen.

                                        @haus-automatisierung sagte in Monat als Bedingung:

                                        Ich finde das sogar leichter zu verstehen

                                        ich ehrlich gesagt nicht, zumal es ja wirklich über einen einfachen Zahlenvergleich geht.

                                        pro Liste wäre es dass diese "beliebig" ausgestaltet und damit auch nicht einfache mathematische Regeln erstellt werden könnten.
                                        Was IMHO mit duesem Beispiel aber nicht notwendig wäre

                                        1 Reply Last reply Reply Quote 1
                                        • Codierknecht
                                          Codierknecht Developer Most Active @Homoran last edited by

                                          @homoran
                                          In diesem Fall geht das sogar, weil der zu durchsuchende Bereich ein Intervall ist.
                                          Ob das dann leichter zu lesen ist, lasse ich mal dahingestellt.

                                          Schwieriger finde ich die Frage, ob Blockly denn auch von sich aus korrekt klammert.
                                          Ich stoße in meinem Umfeld immer wieder auf Fehler, weil vergessen wurde dass ein UND stärker bindet als ein ODER.
                                          Das ist in allen mir geläufigen Sprachen und z.B. auch in SQL so. Wenn man mal eine Klammer an der passenden Stelle vergessen hat, kommt's zu den kuriosesten Ergebnissen.

                                          Mit RegEx stehe ich seit Jahren auf Kriegsfuß, aber ich könnte mir vorstellen dass es auch damit gehen könnte.
                                          Oder mit einer JS-Funktion, die die Logik an anderer Stelle kapselt.

                                          Das Blockly des TO finde ich schon recht ambitioniert.
                                          Ich versuche, mich immer wieder auf ein Kernthema zu konzentrieren: Jeder Code muss auch irgendwann mal gewartet werden. Nicht selten denk man dabei: "Welcher Horst hat das denn verbrochen" .. um dann festzustellen: "Ups, ist ja mein eigener Code" 😄

                                          Egal, Hauptsache der TO kommt damit zurecht.

                                          OT: How To Write Unmaintainable Code 😄 😄 😄

                                          Homoran I 2 Replies Last reply Reply Quote 1
                                          • Homoran
                                            Homoran Global Moderator Administrators @Codierknecht last edited by

                                            @codierknecht sagte in Monat als Bedingung:

                                            In diesem Fall geht das sogar, weil der zu durchsuchende Bereich ein Intervall ist.

                                            zumindest geht es deshalb so einfach.

                                            @codierknecht sagte in Monat als Bedingung:

                                            Schwieriger finde ich die Frage, ob Blockly denn auch von sich aus korrekt klammert.

                                            da hatte ich noch nie Probleme, wenn man die Grundlagen der boolschen Algebra berücksichtigt.

                                            @codierknecht sagte in Monat als Bedingung:

                                            Oder mit einer JS-Funktion, die die Logik an anderer Stelle kapselt.

                                            da hab ich auch noch Probleme, aber ich kann kein Javascript 😢

                                            deswegen gilt für mich auch nicht

                                            @haus-automatisierung sagte in Monat als Bedingung:

                                            Der generierte Code ist doch super kurz -

                                            weil ich immer verduche das Blockly so einfach und vor allem übersichtlich zu halten.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            583
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            23
                                            1116
                                            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