Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Ausführung einer Skript Ausführung verzögern

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Ausführung einer Skript Ausführung verzögern

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

      Ist es möglich, code verzögert ausführen zu lassen

      Beispiel:

      log("Anfang");
      // Hier die Codezeile, die suche so etwas wie wait(1000);
      log("Ende 1 Sekunde später);
      
      

      Ich kenne das Konstrukt setStateDelayed();

      Das funktioniert aber nicht, wenn man mehrerer Änderungen an einem gleichen State machen möchte.

      Dann wird immer nur die letzte Zuweisung ausgeführt.

      Mein Use Case sind Sonos Sprachausgaben.

      Es scheint wohl, dass das Queue Management im Sonos Adapter nicht richtig funktioniert, so dass man nicht einfach

      mehrere Text2Speechausgaben hineineinander machen kann, sondern diese Ausgaben verzögern muss.

      Deshalb möchte ich eine Verzögerung einfügen, die auf den selben State gehen.

      1 Reply Last reply Reply Quote 0
      • D
        dwm last edited by

        Hm,

        grundsätzlich mit setTimeout …

        log("Anfang");
        // Hier die Codezeile, die suche so etwas wie wait(1000);
        setTimeout( function() { log("Ende 1 Sekunde später); }, 1000);
        
        

        Du kannst aber dem setStateDelayed einen Parameter mitgeben, damit der vorherige Timer eben NICHT überschrieben wird.

        setStateDelayed (id, state, isAck, delay, clearRunning, callback)
        

        wenn Du bei clearRunning eine false setzt, das ist per Default true.

        Im Beispiel sieht das beim javascript Adapter so aus:

            setStateDelayed('Kitchen.Light.Lamp', true,  1000);// Switch ON the light in the kitchen in one second
            setStateDelayed('Kitchen.Light.Lamp', false, 5000, false, function () { // Switch OFF the light in the kitchen in 5 seconds and let first timeout run.
                log('Lamp is OFF');
            });
        
        

        Schaltet also die Küchenlampe nach 1s ein und nach 5s aus.

        Werner

        1 Reply Last reply Reply Quote 0
        • T
          tempestas last edited by

          Nach meiner Erfahrung kann es bei SayIt immer wieder auch so zu Verzögerungen kommen. Daher könnte eine Verzögerung im Skript ggf trotzdem nicht ausreichen. Oder aber du setzt die Verzögerung so groß, dass deine Ansage dann natürlich sehr zerrissen ist.

          Was spricht dagegen, die Ansage in einem Rutsch zu machen? Du wirst wohl kaum einem 5 minütigem Dialog zuhören, oder?

          1 Reply Last reply Reply Quote 0
          • M
            Marty56 last edited by

            @dwm

            Super. Danke für die sehr gute Erklärung.

            @tempestas

            Ich hatte bei dem Sonos Adapter und langen Texten eine Fehlermeldungen "file to short" oder so etwas ähnliches.

            Es scheinen nur Texte mit ca. 4-5 Sekunden vernünftig zu funktionieren.

            PS: Habe gerade nochmal mit einer anderen Say Instanz getestet, die System benutzt. Hier das gleiche.

            Fehlermeldung, wenn der Text zu lang ist:

            sayit.4 2017-06-21 16:36:05.588 error Cannot get file: received file is too short

            1 Reply Last reply Reply Quote 0
            • M
              Marty56 last edited by

              Die Länge des Text hängt vom Text2Speech Konverter ab.

              Ich hatte vorher Google benutzt und habe mit Cloud.0 experimentiert und damit lassen sich viel

              längere Texte konvertieren, so dass der Vorschlag von tempestas umsetzbar ist.

              1 Reply Last reply Reply Quote 0
              • T
                tempestas last edited by

                Genau, wollte ich dir gerade schreiben aber du hast es ja schon rausgefunden.

                Google macht glaube ich nach 70 Zeichen Schluss und gibt dann die (sinnlose) Nachricht aus, dass die Nachricht zu kurz wäre..

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

                Support us

                ioBroker
                Community Adapters
                Donate

                496
                Online

                31.7k
                Users

                79.8k
                Topics

                1.3m
                Posts

                3
                6
                1227
                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