Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Mehrfachstart vom Script verhindern.

    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

    Mehrfachstart vom Script verhindern.

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

      Hallo zusammen.

      ich habe ein Script welches mein Badezimmerlicht per Xiaomi Tür sensor anschaltet und nach 20 min wieder automatisch aus schaltet.

      Jetzt ist es so wenn innerhalb dieser Zeit die Tür mehrmals geöffnet und geschlossen wird geht das licht natürlich mehr mals an und aus. Sprich für jedes mal tür öffnen wird das licht einmal an und aus geschaltert.

      WIe kann ich einen Mehrfachstart verhindern?

      Hier mal die log aus dem Debugmodus:

      ! ````
      08:20:47.288 [warn] javascript.0 script.js.common.Lichtschaltung_Bad_Yeelight: setForeignState(id=yeelight-2.0.color-0x0000000005e2899c.control.power, state=true) - was not executed, while debug mode is active
      08:20:47.288 [warn] javascript.0 script.js.common.Lichtschaltung_Bad_Yeelight: setForeignState(id=yeelight-2.0.color-0x0000000005e2899c.control.color_mode, state=false) - was not executed, while debug mode is active
      08:20:49.057 [warn] javascript.0 script.js.common.Lichtschaltung_Bad_Yeelight: setForeignState(id=yeelight-2.0.color-0x0000000005e2899c.control.power, state=true) - was not executed, while debug mode is active
      08:20:49.058 [warn] javascript.0 script.js.common.Lichtschaltung_Bad_Yeelight: setForeignState(id=yeelight-2.0.color-0x0000000005e2899c.control.color_mode, state=false) - was not executed, while debug mode is active
      08:20:51.161 [warn] javascript.0 script.js.common.Lichtschaltung_Bad_Yeelight: setForeignState(id=yeelight-2.0.color-0x0000000005e2899c.control.power, state=true) - was not executed, while debug mode is active
      08:20:51.162 [warn] javascript.0 script.js.common.Lichtschaltung_Bad_Yeelight: setForeignState(id=yeelight-2.0.color-0x0000000005e2899c.control.color_mode, state=false) - was not executed, while debug mode is active
      08:20:57.288 [warn] javascript.0 script.js.common.Lichtschaltung_Bad_Yeelight: setForeignState(id=yeelight-2.0.color-0x0000000005e2899c.control.power, state=false) - was not executed, while debug mode is active
      08:20:58.554 [warn] javascript.0 script.js.common.Lichtschaltung_Bad_Yeelight: setForeignState(id=yeelight-2.0.color-0x0000000005e2899c.control.power, state=false) - was not executed, while debug mode is active
      08:20:59.058 [warn] javascript.0 script.js.common.Lichtschaltung_Bad_Yeelight: setForeignState(id=yeelight-2.0.color-0x0000000005e2899c.control.power, state=false) - was not executed, while debug mode is active
      08:21:00.468 [warn] javascript.0 script.js.common.Lichtschaltung_Bad_Yeelight: setForeignState(id=yeelight-2.0.color-0x0000000005e2899c.control.power, state=false) - was not executed, while debug mode is active
      08:21:01.029 [warn] javascript.0 script.js.common.Lichtschaltung_Bad_Yeelight: setForeignState(id=yeelight-2.0.color-0x0000000005e2899c.control.power, state=false) - was not executed, while debug mode is active
      08:21:03.309 [warn] javascript.0 script.js.common.Lichtschaltung_Bad_Yeelight: setForeignState(id=yeelight-2.0.color-0x0000000005e2899c.control.power, state=false) - was not executed, while debug mode is active

      
      Und hier mal das Script:
      
      >! ````
       <block xmlns="http://www.w3.org/1999/xhtml" type="on" id="O!Nt:TG-7m1]E}YOQ/q`" x="-462" y="-362"><field name="OID">mihome.0.devices.magnet_158d00024367fc.state</field>
        <field name="CONDITION">ne</field>
      
        <statement name="STATEMENT"><block type="controls_if" id="X?jm3]+06ScU#u;XqB=f"><value name="IF0"><block type="logic_compare" id="cJ:g@@(4?}9vc13o;,]x"><field name="OP">EQ</field>
                <value name="A"><block type="get_value" id="_|3^~3:HeKf[yg%d2L)~"><field name="ATTR">val</field>
                    <field name="OID">mihome.0.devices.magnet_158d00024367fc.state</field></block></value> 
                <value name="B"><block type="logic_boolean" id="FG8(-!*4im|d=a0U#W(F"><field name="BOOL">TRUE</field></block></value></block></value> 
            <statement name="DO0"><block type="control" id="o`B!sjT8bH9[gW9wr/zW"><mutation delay_input="false"></mutation>
                <field name="OID">yeelight-2.0.color-0x0000000005e2899c.control.power</field>
                <field name="WITH_DELAY">FALSE</field>
                <value name="VALUE"><block type="logic_boolean" id="RHDXRX8m:RFk2=1Dw*{d"><field name="BOOL">TRUE</field></block></value> 
                <next><block type="control" id="Oq*eMqqb.IMs9l(yQ6bD"><mutation delay_input="false"></mutation>
                    <field name="OID">yeelight-2.0.color-0x0000000005e2899c.control.color_mode</field>
                    <field name="WITH_DELAY">FALSE</field>
                    <value name="VALUE"><block type="logic_boolean" id="[@MzVtWsU5F-jMOro;qB"><field name="BOOL">FALSE</field></block></value></block></next></block></statement> 
            <next><block type="timeouts_settimeout" id="b%rkn[Ok9!69u{H=?[+x"><field name="NAME">timeout</field>
                <field name="DELAY">10</field>
                <field name="UNIT">sec</field>
                <statement name="STATEMENT"><block type="control" id="wOz_(1@CVE4Zzti4(Q!L"><mutation delay_input="false"></mutation>
                    <field name="OID">yeelight-2.0.color-0x0000000005e2899c.control.power</field>
                    <field name="WITH_DELAY">FALSE</field>
                    <value name="VALUE"><block type="logic_boolean" id="V%Tex^uhmH#!tDgchEEy"><field name="BOOL">FALSE</field></block></value></block></statement></block></next></block></statement></block> 
      

      Wie kann ich das verhindern? Wenn mögloch bitte einfach erklären bin ein absoluter anfänger 😉 Danke

      1 Reply Last reply Reply Quote 0
      • J
        J Riemann last edited by

        6696_blocklicht.jpeg

        1 Reply Last reply Reply Quote 0
        • H
          Hohenbostler last edited by

          @J Riemann:

          blocklicht.jpeg `

          Hi Danke. Kannst du das ganze auch etwas erklären. was du wieso machst?

          1 Reply Last reply Reply Quote 0
          • J
            J Riemann last edited by

            Wenn die geöffnet Tür wird (Trigger-Block true) und in dem Moment das Licht aus ist (Falls Wert false..), dann schalte das Licht an (mache: Steuere Objekt true) und verzögert um 20 Minuten (Timeout) schalte das Licht aus (steuere innerhalb Timeout-Block).

            Den "stop" Timeout habe ich eingebaut damit nicht aus irgendwelchen Gründen mehrere Instanzen des Timeout parallel gestartet werden (z.B. wenn Du nach 5 Min das Licht händisch ausschaltest und dann die Tür wieder öffnest. Wäre das jetzt der Fall wird das Licht wieder eingeschaltet und die 20 Min Verzögerung zum ausschalten laufen neu).

            Alles befindet sich innerhalb des Triggerblocks weil eben dieser Ablauf nur abhängig vom Trigger ausgeführt werden soll.

            1 Reply Last reply Reply Quote 0
            • H
              Hohenbostler last edited by

              Ok Danke . So klappt es bei mir jetzt auch.

              Letzendlich ist nur das stop timeout relevant. Danke

              1 Reply Last reply Reply Quote 0
              • J
                J Riemann last edited by

                Nein, nicht ganz, das "stop" wäre in diesem Fall nicht dringend erforderlich, ohne würde es auch laufen. Das "stop" deckt nur alle Eventualitäten ab.

                Dein Skript hat immer fürs einschalten gesorgt, meins schaltet nur ein wenn das Licht aus ist.

                Dein Timeout stand unter dem "Falls - mache" Block was dazu führt das bei jedem Skriptdurchlauf ein neuer Timeout gestartet wurde.

                Bei mir wird nur ein Timeout gestartet wenn das Licht aus war und eingeschaltet wurde weil der Timeout sich innerhalb des "Falls - mache" befindet.

                Dein Trigger lief auf "bei Änderung", darum wurde beim öffnen und auch beim schließen das Skript ausgeführt. Weil Timeout unten dran hing wurde Timeout bei jeden auslösen gestartet egal ob die Tür geöffnet oder geschlossen wurde. Bei mir läuft das Skript nur wenn die Tür geöffnet wurde.

                Unter "Mache" hast Du das Licht eingeschaltet und sofort wieder ausgeschaltet und dann per Timeout nochmals ausgeschaltet.

                Du siehst, optisch ganz wenige Änderungen mit großen Auswirkungen.

                1 Reply Last reply Reply Quote 0
                • H
                  Hohenbostler last edited by

                  Ok jetzt bin ich wieder raus.

                  Aber naja es funktioniert erstmal so.. Der rest kommt hoffe ich step by step. Danke.

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  747
                  Online

                  31.7k
                  Users

                  79.9k
                  Topics

                  1.3m
                  Posts

                  2
                  7
                  817
                  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