Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Programmteil hinter Timeout wird nicht ausgeführt

    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

    [gelöst] Programmteil hinter Timeout wird nicht ausgeführt

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

      Hallo liebes Forum,

      folgendes Blockly funktioniert super: um 6:15 Uhr gehen die Rollis auf 20% und 15min später um 6:30 Uhr gehen sie auf 40%. Dabei bleibt es aber auch: der letzte Timeout-Block, der 75 Minuten später um 7:45 Uhr die Rollis auf 100% schalten sollte, wird schlichtweg ignoriert, obwohl nicht anders aufgebaut als andere. Es passiert auch später nichts mehr, die Rollis bleiben den ganzen Tag bei 40%.

      455_timeout.jpg

      Woran mag das liegen? Sind die Timeouts irgendwie auf eine gewisse Zeit begrenzt oder so?

      Gebe ich dem Aktor über die Objekte selbst die 100%, klappt das problemlos.

      Danke und viele Grüße

      Christian

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

        Hol den timeout5 Block raus aus dem timeout3 Block und häng ihn unter den timeout3 Block.

        Gruß

        1 Reply Last reply Reply Quote 0
        • AlCalzone
          AlCalzone Developer last edited by

          Ich sehe keinen Grund, warum das nötig sein sollte.

          @ChristianF: Kannst du mal testweise den erzeugen JavaScript-Code posten? Eventuell wird da was falsch übersetzt.

          1 Reply Last reply Reply Quote 0
          • C
            ChristianF last edited by

            Klar, gern.

            @Buzzy: wenn ich den zweiten Block <u>unter</u> den ersten statt <u>in</u> den ersten baue, nimmt er die Verzögerung des 1. Blocks nicht mit, oder? Lösung wäre dann halt nur, dem Timer nicht 75 sondern 90 Minuten zu geben, richtig?

            Danke für Eure Hilfe!

            var timeout6, timeout4, timeout3, timeout7, timeout2, timeout5;
            
            schedule("15 6 * * *", function () {
              if (getState("feiertage.0.heute.boolean").val == true || getState("ical.1.events.Vacation").val == true) {
                // Feiertag oder Urlaub: erst um 9
                timeout6 = setTimeout(function () {
                  setStateDelayed("hm-rpc.0.LEQ143xxx0.1.LEVEL"/*RL-Ankl_1.LEVEL*/, 20, 1000, false);
                  setStateDelayed("hm-rpc.0.LEQ143xxx4.1.LEVEL"/*RL-SZ-O_.LEVEL*/, 20, 2000, false);
                  setStateDelayed("hm-rpc.0.LEQ143xxx0.1.LEVEL"/*RL-SZ-S_1.LEVEL*/, 20, 3000, false);
                  setStateDelayed("hm-rpc.0.LEQ143xxx5.1.LEVEL"/*RL-KI-S_.LEVEL*/, 20, 4000, false);
                  setStateDelayed("hm-rpc.0.LEQ143xxx9.1.LEVEL"/*RL-Ki-O_1.LEVEL*/, 20, 5000, false);
                  timeout7 = setTimeout(function () {
                    setStateDelayed("hm-rpc.0.LEQ143xxx0.1.LEVEL"/*RL-Ankl_1.LEVEL*/, 100, 1000, false);
                    setStateDelayed("hm-rpc.0.LEQ143xxx4.1.LEVEL"/*RL-SZ-O_.LEVEL*/, 100, 2000, false);
                    setStateDelayed("hm-rpc.0.LEQ143xxx0.1.LEVEL"/*RL-SZ-S_1.LEVEL*/, 100, 3000, false);
                    setStateDelayed("hm-rpc.0.LEQ143xxx5.1.LEVEL"/*RL-KI-S_.LEVEL*/, 100, 4000, false);
                    setStateDelayed("hm-rpc.0.LEQ143xxx9.1.LEVEL"/*RL-Ki-O_1.LEVEL*/, 100, 5000, false);
                  }, 300000);
                }, 9600000);
              } else if ((new Date().getDay() === 0 ? 7 : new Date().getDay()) == 0 || (new Date().getDay() === 0 ? 7 : new Date().getDay()) == 6) {
                // Wochenende? Auch erst um 9
                timeout4 = setTimeout(function () {
                  setStateDelayed("hm-rpc.0.LEQ143xxx0.1.LEVEL"/*RL-Ankl_1.LEVEL*/, 20, 1000, false);
                  setStateDelayed("hm-rpc.0.LEQ143xxx4.1.LEVEL"/*RL-SZ-O_.LEVEL*/, 20, 2000, false);
                  setStateDelayed("hm-rpc.0.LEQ143xxx0.1.LEVEL"/*RL-SZ-S_1.LEVEL*/, 20, 3000, false);
                  setStateDelayed("hm-rpc.0.LEQ143xxx5.1.LEVEL"/*RL-KI-S_.LEVEL*/, 20, 4000, false);
                  setStateDelayed("hm-rpc.0.LEQ143xxx9.1.LEVEL"/*RL-Ki-O_1.LEVEL*/, 20, 5000, false);
                  timeout2 = setTimeout(function () {
                    setStateDelayed("hm-rpc.0.LEQ143xxx0.1.LEVEL"/*RL-Ankl_1.LEVEL*/, 100, 1000, false);
                    setStateDelayed("hm-rpc.0.LEQ143xxx4.1.LEVEL"/*RL-SZ-O_.LEVEL*/, 100, 2000, false);
                    setStateDelayed("hm-rpc.0.LEQ143xxx0.1.LEVEL"/*RL-SZ-S_1.LEVEL*/, 100, 3000, false);
                    setStateDelayed("hm-rpc.0.LEQ143xxx5.1.LEVEL"/*RL-KI-S_.LEVEL*/, 100, 4000, false);
                    setStateDelayed("hm-rpc.0.LEQ143xxx9.1.LEVEL"/*RL-Ki-O_1.LEVEL*/, 100, 5000, false);
                  }, 300000);
                }, 9600000);
              } else {
                // Kein Sonderfall: 0615
                setStateDelayed("hm-rpc.0.LEQ143xxx0.1.LEVEL"/*RL-Ankl_1.LEVEL*/, 20, 1000, false);
                setStateDelayed("hm-rpc.0.LEQ143xxx4.1.LEVEL"/*RL-SZ-O_.LEVEL*/, 20, 2000, false);
                setStateDelayed("hm-rpc.0.LEQ143xxx0.1.LEVEL"/*RL-SZ-S_1.LEVEL*/, 20, 3000, false);
                setStateDelayed("hm-rpc.0.LEQ143xxx5.1.LEVEL"/*RL-KI-S_.LEVEL*/, 20, 4000, false);
                setStateDelayed("hm-rpc.0.LEQ143xxx9.1.LEVEL"/*RL-Ki-O_1.LEVEL*/, 20, 5000, false);
                timeout3 = setTimeout(function () {
                  setStateDelayed("hm-rpc.0.LEQ143xxx0.1.LEVEL"/*RL-Ankl_1.LEVEL*/, 40, 1000, false);
                  setStateDelayed("hm-rpc.0.LEQ143xxx4.1.LEVEL"/*RL-SZ-O_.LEVEL*/, 40, 2000, false);
                  setStateDelayed("hm-rpc.0.LEQ143xxx0.1.LEVEL"/*RL-SZ-S_1.LEVEL*/, 40, 3000, false);
                  setStateDelayed("hm-rpc.0.LEQ143xxx5.1.LEVEL"/*RL-KI-S_.LEVEL*/, 40, 4000, false);
                  setStateDelayed("hm-rpc.0.LEQ143xxx9.1.LEVEL"/*RL-Ki-O_1.LEVEL*/, 40, 5000, false);
                  timeout5 = setTimeout(function () {
                    setStateDelayed("hm-rpc.0.LEQ143xxx0.1.LEVEL"/*RL-Ankl_1.LEVEL*/, 100, 1000, false);
                    setStateDelayed("hm-rpc.0.LEQ143xxx4.1.LEVEL"/*RL-SZ-O_.LEVEL*/, 100, 2000, false);
                    setStateDelayed("hm-rpc.0.LEQ143xxx0.1.LEVEL"/*RL-SZ-S_1.LEVEL*/, 100, 3000, false);
                    setStateDelayed("hm-rpc.0.LEQ143xxx5.1.LEVEL"/*RL-KI-S_.LEVEL*/, 100, 4000, false);
                    setStateDelayed("hm-rpc.0.LEQ143xxx9.1.LEVEL"/*RL-Ki-O_1.LEVEL*/, 100, 5000, false);
                  }, 4500000);
                }, 900000);
              }
            });
            
            
            1 Reply Last reply Reply Quote 0
            • AlCalzone
              AlCalzone Developer last edited by

              Das siehst du richtig, der Timeout müsste dann 90 Minuten sein.

              Bei Durchsicht des JS-Codes fällt mir nichts auf, außer, dass die Bedingung für den zweiten deiner 3 Blocks seltsam ist (ich verstehe sie nicht).

              Bist du sicher, dass dein 3. Block mit drei Schaltblöcken statt zwei tatsächlich ausgeführt wird? Oder wird womöglich einer der anderen ausgeführt und du denkst es ist der letzte?

              Packe doch mal in jeden deiner Fälle einen Debug-Output, damit du im Log nachvollziehen kannst, welcher Code-Pfad tatsächlich ausgeführt wird.

              1 Reply Last reply Reply Quote 0
              • C
                ChristianF last edited by

                Ich habe es jetzt testweise auf 90 Minuten umgestellt, bzw. auf 85 damit ich den Unterschied sehe 😉

                Zu den Bedingungen der Blöcke:

                • der erste checkt, ob heute ein Feiertag (Feiertagsadapter) oder ein Urlaubstag (iCal) ist

                • der zweite checkt, ob heute ein Samstag (Wochentag 6) oder Sonntag (Wochentag 0) ist

                • der dritte Block gilt, wenn keiner der anderen Sonderfälle greift (also ein normaler Wochentag ist).

                (ersten und zweiten Check hätte ich gern zusammengezogen und nur eine Unterscheidung "früh aufstehen ja/nein" gehabt, habe ich aber nicht hinbekommen)

                Zu den Schaltblöcken:

                • Der erste Block zieht die Rollis auf 20% hoch, das bedeutet dass die Schlitze sichtbar werden und unten ein kleiner Spalt offensteht

                • Der zweite Block zieht die Rollis bis 40% hoch, es wird also deutlich heller im Raum

                • Der dritte Block zieht die Rollis ganz hoch

                Warum das Ganze? Es handelt sich um ein "Wake up light": der Körper "gewöhnt" sich deutlich besser an den Gedanken, dass gleich Aufstehen angesagt ist, wenn es nicht mehr komplett dunkel ist. Wenn dann der Wecker klingelt, hat der Körper bereits eine halbe Stunde vorm Aufstehen "realisiert", dass es gleich los geht und ist nicht gleich am frühen Morgen gestresst. Und ich muss sagen: es funktioniert prima. Einfach mal "Wake up light" oder "Lichtwecker" googlen.

                Ich habe nun ein Debug-Output eingebaut, mal sehen was passiert.

                Danke!

                Viele Grüße

                Christian

                1 Reply Last reply Reply Quote 0
                • AlCalzone
                  AlCalzone Developer last edited by

                  Der Sinn des ganzen ist mir schon klar.

                  Was mich irritiert, ist die 2. Bedingung:

                  (new Date().getDay() === 0 ? 7 : new Date().getDay()) == 0
                  

                  Die kann eigentlich nie zutreffen:

                  Wenn heute Sonntag ist (getDay() === 0), wird 7 mit 0 verglichen (falsch).

                  Wenn heute kein Sonntag ist (getDay() > 0), wird 1-6 mit 0 verglichen (falsch).

                  1 Reply Last reply Reply Quote 0
                  • C
                    ChristianF last edited by

                    Hmm, das ist wirklich merkwürdig. Hier das Blockly dazu:

                    455_bedingung.jpg

                    Hier nochmal der Code dazu (es sind jetzt die Debugs und Comments dazugekommen, sorry):

                            setStateDelayed("hm-rpc.0.LEQ143xxx9.1.LEVEL"/*RL-Ki-O_1.LEVEL*/, 100, 5000, false);
                          }, 300000);
                        }, 9600000);
                      } else if ((new Date().getDay() === 0 ? 7 : new Date().getDay()) == 0 || (new Date().getDay() === 0 ? 7 : new Date().getDay()) == 6) {
                        // Wochenende? Auch erst um 9
                        console.log('Wochenende-Block: nix zu tun um 0615');
                        timeout4 = setTimeout(function () {
                          console.log('Wochenende-Block: 20 Prozent um 0900');
                          setStateDelayed("hm-rpc.0.LEQ143xxx0.1.LEVEL"/*RL-Ankl_1.LEVEL*/, 20, 1000, false);
                    
                    

                    Übrigens ist der Übeltäter des Ausfalls des Scripts von Montag gefunden: der Javascript Adapter ist aufgrund eines Fehlers in einem anderen Script im 30min Takt abgestürzt. Hat nur vorher niemand gemerkt. Nur jetzt, wo ein längerer Timeout dazwischen lag, ist es aufgefallen.

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

                      Hallo

                      Wochentag = 0 gibt es nicht.

                      Montag=1 …. Sonntag = 7

                      Wochentag < 6 ist normaler Wochentag

                      Wochentag > 5 ist Wochenende

                      EDIT: vielleicht interessant für Dich viewtopic.php?f=21&t=12021

                      Grüße

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

                        Normalerweise ist 0 oder 7 beides möglich und entspricht dem Wochentag 'Sonntag'..

                        Gruß

                        1 Reply Last reply Reply Quote 0
                        • C
                          ChristianF last edited by

                          Hallo,

                          "beides geht" wäre ja merkwürdig. Wenn die Woche entweder mit 0 oder 1 anfängt, würde es ja komplett unterschiedliche Verhaltensweisen geben.

                          Ich habe mir schnell ein Demoscript gebaut und mir den heutigen Tag ausgeben lassen, und es wird für Freitag = 5 ausgegeben. Habe es nun auf 6 und 7 umgeschrieben und werde morgen spät abends mal schnell schauen, ob er für Sonntag nun eine 6 oder 7 auswirft.

                          Merkwürdig dass es so unterschiedliche Aussagen online gibt.

                          Danke für Eure Hilfe!

                          1 Reply Last reply Reply Quote 0
                          • C
                            ChristianF last edited by

                            Moin,

                            inzwischen ist Sonntag, und siehe da…

                            javascript.0	2018-05-20 00:01:00.020	info	script.js.common.Homematic-Scripte.Skript2: So
                            javascript.0	2018-05-20 00:01:00.020	info	script.js.common.Homematic-Scripte.Skript2: Sonntag
                            javascript.0	2018-05-20 00:01:00.017	info	script.js.common.Homematic-Scripte.Skript2: 7
                            
                            

                            -> JavaScript und damit auch ioBroker rechnet Sonntag als Tag Nr. 7 . Komisch, wo im amerikanischen Denkkreis die Woche ja mit dem Sonntag anfängt (daher meine Verwirrung, zumal unter https://wiki.selfhtml.org/wiki/JavaScri … ate/getDay genau das Gegenteil (0-6) beschrieben wird).

                            Vielleicht hilft es ja jemandem.

                            Danke allen, die geholfen haben!

                            Viele Grüße

                            Christian

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

                              Wie gesagt, normalerweise sind die entsprechenden Funktionen so programmiert dass sie 0 und 7 als Sonntag akzeptieren..

                              Bei mir sieht es heute zum Beispiel so im log aus..

                              ...js.Verschiedenes.RolloAutomatik: Tag: 0
                              

                              😉

                              Gruß

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

                                Auf die Schnelle siehe hier: https://github.com/ioBroker/ioBroker.ja … e-schedule

                                Change Log der Umstellung in ioBroker finde ich gerade nicht.

                                In Blockly kann ich meine Beschreibung empfehlen.

                                Grüße

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

                                  Hier die Definition in Blockly.

                                  Auszug:
                                  147_beispiel.png
                                  Hier gibt es die komplette Beschreibung https://github.com/ioBroker/ioBroker.ja … blockly.md

                                  Grüße

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

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  837
                                  Online

                                  31.7k
                                  Users

                                  79.9k
                                  Topics

                                  1.3m
                                  Posts

                                  4
                                  15
                                  886
                                  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