Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Rollo öffnen nach einschalten des Lichtes

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Rollo öffnen nach einschalten des Lichtes

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

      Hallo zusammen,

      ich stehe momentan vor einem Problem. Und zwar bekomme ich das folgende Szenario in Blockly nicht gelöst.

      Ziel:

      • Zwei Rollos sollen sich nach Betätigen eines Lichtschalters nach 10 Minuten in einem Zeitintervall zwischen 05:00 - 10:00 Uhr an allen Tagen der Woche öffnen.
      • Spätestens um 10:00 Uhr sollen die Rollos hochfahren, sollte der Lichtschalter nicht betätigt werden.
      • Wenn der Lichtschalter in dem oben genannten Zeitraum betätigt wird und innerhalb 30 Sekunden ein anderer LIchtschalter im Bad betätigt wird, sollen die Rollos NICHT öffnen (Szenario Toilettengang)
      • Nach einmaligen Ausführen, also öffnen der Rollos soll nicht weiter getriggert werden (ist dies überhaupt möglich?)

      Probleme habe ich beim dritten und vierten Punkt. Der Rest dürfte passen. Hat jemand eine Idee für mich, wie ich dies am besten umsetzen könnte?

      Hier noch mein Blockly Script (Nicht wundern "Position" ist jeweils ein anderes Rollo)

      <xml xmlns="http://www.w3.org/1999/xhtml">
        <block type="schedule" id="W5*r7?BYFE?GM[ye|mru" x="-937" y="-588">
          <field name="SCHEDULE">* 18-19 * * *</field>
          <statement name="STATEMENT">
            <block type="controls_if" id="9.{|MF7O(mwXgKb6JA0r">
              <mutation elseif="1"></mutation>
              <value name="IF0">
                <block type="logic_compare" id="82W1HmeT@29P?L]%hH0)">
                  <field name="OP">EQ</field>
                  <value name="A">
                    <block type="get_value" id="k#=Uc+y3//58SQ7+4hnI">
                      <field name="ATTR">val</field>
                      <field name="OID">shelly.0.SHSW-1#98F4ABF295EB#1.Relay0.Switch</field>
                    </block>
                  </value>
                  <value name="B">
                    <block type="logic_boolean" id="7p9vJ[ZELwUBz2JriN~T">
                      <field name="BOOL">TRUE</field>
                    </block>
                  </value>
                </block>
              </value>
              <statement name="DO0">
                <block type="control" id="{XS;qbz*)HDF!)MfXu^e">
                  <mutation delay_input="true"></mutation>
                  <field name="OID">shelly.0.SHSW-25#110B3F#1.Shutter.Position</field>
                  <field name="WITH_DELAY">TRUE</field>
                  <field name="DELAY_MS">10</field>
                  <field name="UNIT">sec</field>
                  <field name="CLEAR_RUNNING">FALSE</field>
                  <value name="VALUE">
                    <block type="math_number" id="e:2{h#ENOj(8vRt0hUE$">
                      <field name="NUM">100</field>
                    </block>
                  </value>
                  <next>
                    <block type="control" id="]_~9}:f`aXDQ{uRQpvKB">
                      <mutation delay_input="true"></mutation>
                      <field name="OID">shelly.0.SHSW-25#F380FA#1.Shutter.Position</field>
                      <field name="WITH_DELAY">TRUE</field>
                      <field name="DELAY_MS">10</field>
                      <field name="UNIT">sec</field>
                      <field name="CLEAR_RUNNING">FALSE</field>
                      <value name="VALUE">
                        <block type="math_number" id="%_m[?3*^Yb~nfccQ?JRS">
                          <field name="NUM">100</field>
                        </block>
                      </value>
                    </block>
                  </next>
                </block>
              </statement>
              <value name="IF1">
                <block type="logic_compare" id="}be%;x]TZd5;g1@mG}lG">
                  <field name="OP">EQ</field>
                  <value name="A">
                    <block type="get_value" id="Fa];UO1aIol:MVQtn!GL">
                      <field name="ATTR">val</field>
                      <field name="OID">shelly.0.SHSW-1#98F4ABF295EB#1.Relay0.Switch</field>
                    </block>
                  </value>
                  <value name="B">
                    <block type="logic_operation" id="9oED(@|mbge!M5+_0R+F">
                      <field name="OP">AND</field>
                      <value name="A">
                        <block type="logic_boolean" id="~wJyHEBN$p~:T.L],IXd">
                          <field name="BOOL">TRUE</field>
                        </block>
                      </value>
                      <value name="B">
                        <block type="logic_compare" id="Y}{fA::^3mLYr,{;I2Nu">
                          <field name="OP">EQ</field>
                          <value name="A">
                            <block type="get_value" id="4cUP^q89[.e/VlzA!w5F">
                              <field name="ATTR">val</field>
                              <field name="OID">shelly.0.SHSW-1#F42B0C#1.Relay0.Switch</field>
                            </block>
                          </value>
                          <value name="B">
                            <block type="logic_boolean" id="i8*WlB6?LC0$s)Y3_wYQ">
                              <field name="BOOL">TRUE</field>
                            </block>
                          </value>
                        </block>
                      </value>
                    </block>
                  </value>
                </block>
              </value>
              <statement name="DO1">
                <block type="control" id="X|uV-R#nu@.FBk9FH3(K">
                  <mutation delay_input="false"></mutation>
                  <field name="OID">shelly.0.SHSW-25#110B3F#1.Shutter.Position</field>
                  <field name="WITH_DELAY">FALSE</field>
                  <value name="VALUE">
                    <block type="math_number" id="u1[IbXJmw[#8]00h~xr=">
                      <field name="NUM">0</field>
                    </block>
                  </value>
                  <next>
                    <block type="control" id="v!.q85}DXgi#g(o~HK10">
                      <mutation delay_input="false"></mutation>
                      <field name="OID">shelly.0.SHSW-25#F380FA#1.Shutter.Position</field>
                      <field name="WITH_DELAY">FALSE</field>
                      <value name="VALUE">
                        <block type="math_number" id="WA`l#(Z/^1geC.E]~J+E">
                          <field name="NUM">0</field>
                        </block>
                      </value>
                    </block>
                  </next>
                </block>
              </statement>
            </block>
          </statement>
          <next>
            <block type="comment" id="Oj?gkf{c.i@wL~0qqrmj">
              <field name="COMMENT">Um 10:00 Rollos öffnen, sollten diese noch geschlossen sein</field>
              <next>
                <block type="schedule" id="NR-Cf(cC5mvZS;HpE4cP">
                  <field name="SCHEDULE">0 10 * * *</field>
                  <statement name="STATEMENT">
                    <block type="controls_if" id="~W~61XGf02y@S(q_fd!o">
                      <value name="IF0">
                        <block type="logic_compare" id="io5Zeb,@VlPShT8)@DY+">
                          <field name="OP">EQ</field>
                          <value name="A">
                            <block type="get_value" id="P}D({2x@U8zS}lhv3dXO">
                              <field name="ATTR">val</field>
                              <field name="OID">shelly.0.SHSW-25#110B3F#1.Shutter.Position</field>
                            </block>
                          </value>
                          <value name="B">
                            <block type="math_number" id=")^u?-dP*g#g#[FME]^@]">
                              <field name="NUM">0</field>
                            </block>
                          </value>
                        </block>
                      </value>
                      <statement name="DO0">
                        <block type="control" id="$$t*1zu%ozm7Zu))Owq[">
                          <mutation delay_input="false"></mutation>
                          <field name="OID">shelly.0.SHSW-25#110B3F#1.Shutter.Position</field>
                          <field name="WITH_DELAY">FALSE</field>
                          <value name="VALUE">
                            <block type="math_number" id="#G*a#/r32j}VlH6;1%N8">
                              <field name="NUM">100</field>
                            </block>
                          </value>
                        </block>
                      </statement>
                      <next>
                        <block type="controls_if" id="xy0`iDvpkS@?2DWAh9`i">
                          <value name="IF0">
                            <block type="logic_compare" id="Hk%D_ER4$om5`jU0Cg7I">
                              <field name="OP">EQ</field>
                              <value name="A">
                                <block type="get_value" id="xUjM1L|3bn4lKH-l]-dM">
                                  <field name="ATTR">val</field>
                                  <field name="OID">shelly.0.SHSW-25#F380FA#1.Shutter.Position</field>
                                </block>
                              </value>
                              <value name="B">
                                <block type="math_number" id="xxM@`]coc5|E[U:,OpfH">
                                  <field name="NUM">0</field>
                                </block>
                              </value>
                            </block>
                          </value>
                          <statement name="DO0">
                            <block type="control" id="sq{h=f{2Zmu6-x50+kH@">
                              <mutation delay_input="false"></mutation>
                              <field name="OID">shelly.0.SHSW-25#F380FA#1.Shutter.Position</field>
                              <field name="WITH_DELAY">FALSE</field>
                              <value name="VALUE">
                                <block type="math_number" id="0MBut31]rL+x/O7B^OJ[">
                                  <field name="NUM">100</field>
                                </block>
                              </value>
                            </block>
                          </statement>
                        </block>
                      </next>
                    </block>
                  </statement>
                </block>
              </next>
            </block>
          </next>
        </block>
      </xml>
      
      Homoran 1 Reply Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @Baki074 last edited by

        @Baki074
        Bitte Blockly auch als Screenshot zeigen.

        Das wird aber ziemlich komplex!
        Verschiedene Trigger - Sperrvariablen usw. da es diverse Abhängigkeiten einerseits und verschiedene unabhängige Auslöser gibt

        1 Reply Last reply Reply Quote 0
        • B
          Baki074 last edited by

          blockly.JPG

          1 Reply Last reply Reply Quote 0
          • X
            xbow42 last edited by

            das genau zum Minutenwechsel der Schalter gedrückt wird ist unwahrscheinlich ,dein "sonst wenn" ist sehr eigenartig 😉
            Ich würde das anders angehen trigger auf switch=true und dann die weiteren aktionen prüfen.
            mal ein Ansatz:
            iobroker-rollo.png
            deine letzte Bedingung "Nach einmaligen..." ist auch einfach-> dann noch [nur wenn rollo.state ungleich 100 mache :)]
            10:00 trigger sollte so passen oder du änderst auf wenn <100 dann könntest du auch schon mal paar cm hochgefahren haben um etwas Luft zu schappen. rest erledigt die 10UhrAutomatik

            also mach mal!

            B 1 Reply Last reply Reply Quote 1
            • B
              Baki074 @xbow42 last edited by

              @xbow42

              Vielen Dank für deine Hilfe. Ich denke ich bin schon etwas weitergekommen.
              Allerdings verstehe ich die Überprüfung beim Badschalter nicht ganz. Zeitstempel - Auslöser kann doch nie weniger oder gleich 0 sein, wenn ich den Auslöser am Anfang schon auf 0 gesetzt habe, oder?
              Sorry, ist das erste Mal dass ich mit Variablen arbeite ^^

              Blockly.JPG

              1 Reply Last reply Reply Quote 0
              • X
                xbow42 last edited by

                Zeitstempel ist die Zeit in Sekunden die seit dem 1.1.1970 vergangen sind.
                Am Anfang auf 0 setzen ist um die Variable erst mal einem definierten Wert zu belegen.
                Die Bedingung sollte nur dein 0-30sek-Zeitfenster verdeutlichen. Aber du hast schon recht, der wert kann nie kleine 0 werden, die vordere Und-Bedingung ist daher nicht nötig und kann raus.

                Das Script sieht doch schon mal gut aus. Guter Stil ist wohl auch vor dem [timeout 10min] noch ein [stop timeout] um evtl laufene Timer zu löschen.
                Dann las mal laufen zum testen

                Du brauchst dich nicht entschuldigen. Wichtig ist doch dass man durch das tolle Forum dazu lernt und nicht nur weiß wie copy&paste funktioniert 😉 Klick auch öfter mal oben rechts auf das [Bockly/JS]-symbol und sieh dir an was für ein javascript erzeugt wird. Ich finde so lernt man auch einiges.

                B 1 Reply Last reply Reply Quote 1
                • B
                  Baki074 @xbow42 last edited by Baki074

                  @xbow42
                  Alles klar, dann habe ich das mit dem Zeitstempel schon mal verstanden.

                  Script funktioniert allerdings nur bedingt.
                  Habe um dies zu testen einfach mal ein aktuelles Zeitintervall definiert.
                  Die Rollos werden auch nach dem definierten Timeout hochgefahren.

                  Allerdings werden sie auch hochgefahren, wenn der Lichtschalter im Bad innerhalb der 30 Sekunden betätigt wird. Also muss beim Trigger für das Badfenster etwas noch nicht passen.

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

                    @Baki074
                    Dann bau mal ein paar debug-Bausteine mit jeweils aussagekräftem Text an die neuralgischen Punkte, damit du siehst wo es hängt

                    1 Reply Last reply Reply Quote 0
                    • X
                      xbow42 last edited by xbow42

                      hab gerade in einem anderen Beitrag von @Paul gelesen das Zeitstempel ein ms-Wert ist
                      denn dem so ist, pass mal bei dem Badlichschalter-Trigger an

                      • debug<[[Zeitstempel]-[AusloeserTS]]
                      • die 30 an zu 30000.

                      die Bedingung im oberen Trigger würde ich auch abändern.
                      z.Z. wenn ein Fenster nicht ganz offen ist werden immer beide mit 100 angesteuert, macht zwar nichts aber von der Logik nicht so toll.

                      B 1 Reply Last reply Reply Quote 0
                      • B
                        Baki074 @xbow42 last edited by

                        @xbow42 said in Rollo öffnen nach einschalten des Lichtes:

                        hab gerade in einem anderen Beitrag von @Paul gelesen das Zeitstempel ein ms-Wert ist
                        denn dem so ist, pass mal bei dem Badlichschalter-Trigger an

                        debug<[[Zeitstempel]-[AusloeserTS]]
                        die 30 an zu 30000.

                        Hat leider auch nicht den gewünschten Erfolg gebracht.
                        Ich habe auch die Verlinkungen der Objekt IDs nochmals kontrolliert, also ob ich den richtigen Schalter gewählt habe.. Auch hier hat alles gepasst.

                        ICh habe auch versucht den Zimmerschalter ein - und gleich wieder auszuschalten und dann innerhalb der 30 Sekunden den Badschalter zu betätigen. Einige dieser "Schalterszenarien" habe ich probiert. Hat aber leider auch nichts gebracht.

                        Übrigens, das Skript sieht nun folgendermaßen aus:

                        Unbenannt.JPG

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

                          @Baki074 Was liefert der Datenpunkt 'switch' für Werte?

                          B 1 Reply Last reply Reply Quote 0
                          • X
                            xbow42 last edited by

                            ich kann kein debugbaustein sehen
                            was kommt für ein wert wenn du im 2. Trigger (badfenster) den baustein einbaust?iobroker-rollo2.png
                            kommt überhaut ein wert, spricht löst der trigger überhaupt aus?

                            1 Reply Last reply Reply Quote 0
                            • B
                              Baki074 @Homoran last edited by

                              @Homoran said in Rollo öffnen nach einschalten des Lichtes:

                              Was liefert der Datenpunkt 'switch' für Werte?

                              true oder false.

                              werte.JPG

                              @xbow42 said in Rollo öffnen nach einschalten des Lichtes:

                              kommt überhaut ein wert, spricht löst der trigger überhaupt aus?

                              Ich erhalte folgende Zeile:
                              17:11:43.804 info javascript.0 (1216) script.js.Rollosteuerung.Rollosteuerung_Zimmer: NaN

                              Allerdings weiß ich nicht für was NaN steht.

                              1 Reply Last reply Reply Quote 0
                              • X
                                xbow42 last edited by xbow42

                                not a number; also sowas wie kein gültiger Wert.
                                Dass der Zeitstempel nicht gültig ist kann ich mit nicht vorstellen. Vermutlich hat Ausloeser keinen gültigen wert.
                                Bist du sicher das du nur eine Variable verwendest. Der Fehler ist vielleicht weil ich oben noch mit AusloeserTS gearbeitet habe. Muss also da auch AusloeserTS heißen, sorry.

                                B 1 Reply Last reply Reply Quote 0
                                • B
                                  Baki074 @xbow42 last edited by

                                  @xbow42 said in Rollo öffnen nach einschalten des Lichtes:

                                  Der Fehler ist vielleicht weil ich oben noch mit AusloeserTS gearbeitet habe. Muss also da auch AusloeserTS heißen, sorry.

                                  Habe ich bereits mit AusloeserTS im Script. War also bereits richtig.
                                  Zeitstempel ist ja auch nur eine Variable, oder?
                                  Zumindest habe ich diese als Variable angelegt, also gleich wie AusloeserTS.

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

                                    @Baki074 sagte in Rollo öffnen nach einschalten des Lichtes:

                                    Zeitstempel ist ja auch nur eine Variable, oder?

                                    nein - das findest du unter Trigger und ist der Zeitstempel des Triggers

                                    (ist ein Baustein mit pulldown)

                                    1 Reply Last reply Reply Quote 0
                                    • B
                                      Baki074 last edited by

                                      Aha, das war also schon mal ein Punkt ^^
                                      Leider funktioniert das Script immer noch nicht.

                                      Langsam bin ich echt am Verzweifeln... Ansonsten muss ich mir was anderes überlegen.
                                      Ist halt doof, da das Script für mich eigentlich schlüssig wirkt.

                                      1 Reply Last reply Reply Quote 0
                                      • X
                                        xbow42 last edited by

                                        mit der Aussage sollen wir jetzt die Glaskugel anschmeißen?
                                        was für Werte geben deine Debug-Bausteine aus?
                                        an welchen Stellen hast du welche eingebaut?
                                        zeig mal das Script und die logausgaben dazu.

                                        1 Reply Last reply Reply Quote 0
                                        • B
                                          Baki074 last edited by

                                          Jetzt hats geklappt!
                                          Allerdings keine Ahnung warum. Ich habe mit einem debug Baustein getestet welcher Wert rauskommt wenn ich den Badlichtschalter innerhalb 30 Sekunden betätige. Wert war 7225. Also nach knapp sieben Sekunden habe ich den Schalter betätigt.

                                          Dann habe ich einfach nochmal die Bedingung für den Badlichtschalter neu "gebaut".
                                          Dann hat's funktioniert!

                                          Ich danke euch für eure Hilfe!

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

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          532
                                          Online

                                          31.6k
                                          Users

                                          79.6k
                                          Topics

                                          1.3m
                                          Posts

                                          blockly
                                          3
                                          19
                                          884
                                          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