Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Delay zwischen 2 Befehlen

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    Delay zwischen 2 Befehlen

    This topic has been deleted. Only users with topic management privileges can see it.
    • bahnuhr
      bahnuhr Forum Testing Most Active last edited by

      Hallo,

      mit folgenden 2 Befehlen lasse ich mir eine wav vorspielen und danach einen Text ausgeben.

      request('http://192.abc.xyz.11:50000/track=abc.wav');

      setState('sayit.0.tts.text', "abcdefg" );

      Ich möchte nun dazwischen 1 Delay einbauen.

      Habe schon versucht mit "setStateDelayed"; aber irgendwie passt das nicht.

      Ist es irgendwie möglich dazwischen so etwas einzubauen.

      Also, dass das Script einfach wartet bis es fortführt.

      mfg

      Dieter

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

        Schau mal, ob Du hier fündig wirst (nach "javascript wait" gegoogelt):

        http://www.w3schools.com/js/js_timing.asp

        Gruß,

        Eric

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

          setTimeout(function() {setState('sayit.0.tts.text', "abcdefg" );}, 2000);
          
          1 Reply Last reply Reply Quote 0
          • bahnuhr
            bahnuhr Forum Testing Most Active last edited by

            setTimeout

            probiere ich aus.

            Danke für die Antwort.

            1 Reply Last reply Reply Quote 0
            • P
              pix last edited by

              @bahnuhr:

              Habe schon versucht mit "setStateDelayed"; aber irgendwie passt das nicht. `
              Was passt denn nicht? Geht das nicht?

              setStateDelayed('sayit.0.tts.text', "abcdefg", 2000 );
              

              Gruß

              Pix

              1 Reply Last reply Reply Quote 0
              • bahnuhr
                bahnuhr Forum Testing Most Active last edited by

                @pix:

                @bahnuhr:

                Habe schon versucht mit "setStateDelayed"; aber irgendwie passt das nicht. `
                Was passt denn nicht? Geht das nicht?

                setStateDelayed('sayit.0.tts.text', "abcdefg", 2000 );
                

                Gruß

                Pix `

                Doch, doch das geht schon.

                Aber danach kommen ja noch weitere Befehle.

                Und ich habe den Eindruck, dass das Script halt weiter läuft und die nächsten Befehle abgearbeitet werden (was ich aber nicht will).

                Ich möchte, dass das Script stoppt für 2 Sek. und erst dann der nächste Befehl folgt.

                mfg

                Dieter

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

                  @bahnuhr:

                  Und ich habe den Eindruck, dass das Script halt weiter läuft und die nächsten Befehle abgearbeitet werden (was ich aber nicht will). `
                  Dann muss setTimeout() so angewendet werden:

                  setTimeout(function() {
                     setState('sayit.0.tts.text', "abcdefg" );
                     // weitere Befehle
                  }, 2000);
                  

                  @bahnuhr:

                  Ich möchte, dass das Script stoppt für 2 Sek. und erst dann der nächste Befehl folgt. `
                  Das Script lässt sich nicht stoppen, sondern an das Timer-Objekt wird die Callback-Funktion übergeben, deren Befehle nach der Verzögerung abgearbeitet werden sollen.

                  1 Reply Last reply Reply Quote 0
                  • bahnuhr
                    bahnuhr Forum Testing Most Active last edited by

                    Danke.

                    Funktioniert.

                    mfg

                    Dieter

                    1 Reply Last reply Reply Quote 0
                    • P
                      pix last edited by

                      Nur für die Vollständigkeit: das kann setStateDelayed auch.

                      Doku hier: https://github.com/ioBroker/ioBroker.ja … atedelayed

                      setStateDelayed('sayit.0.tts.text', "abcdefg", 2000, function () {
                          /* weitere Befehle (werden erst gestartet, wenn Zeile drüber abgearbeitet.
                              Befehle können natürlich auch in eine separate Funktion 
                              gepackt und von hier aufgerufen werden.
                           */
                      });
                      

                      Gruß

                      Pix

                      1 Reply Last reply Reply Quote 0
                      • bahnuhr
                        bahnuhr Forum Testing Most Active last edited by Jey Cee

                        @paul53

                        Ich bekomme das mit dem Timeout nicht hin.

                        Nachfolgend mal ein Beispiel-Script.

                        Hier will ich mir per Telegram Bilder zusenden. Klappt auch soweit (kommen an).

                        Ich muss aber irgendwie abwarten, damit die Bilder gespeichert werden und dann nach x Sek. versendet werden.

                        Nachfolgender Timeout klappt nicht. Bilder kommen sofort.

                        Vielleicht hast du die Zeit mal drüber zu schauen.

                        for (x=66; x<=67; x++) {
                        log (x);
                        Telegram_Bild(x);
                        }
                        function Telegram_Bild (ip) {
                        //Bild senden mit Telegram
                        var request = require('request');
                        var fs = require('fs');
                        log ('ip Schleife= ' + ip);
                        setTimeout(function () {
                        request.get({url: '[http://192.168.243](http://192.168.243).' + ip + ':88//cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=abcd&pwd=abcd', encoding: 'binary'}, function (err, response, body) {
                        fs.writeFile("c:/tmp/snap.jpg", body, 'binary', function(err) {
                        if (err) {
                        console.error(err);
                        } else {
                        console.log('Snapshot sent');
                        //sendTo('telegram.0', 'c:/tmp/snap.jpg');
                        sendTo('telegram.0', {text: 'c:/tmp/snap.jpg', caption: 'Garage ' + ip + 'wird geöffnet.'});
                        }
                        });
                        });
                        }, ip-65*5000);
                        }
                        

                        Danke im Voraus.

                        mfg

                        Dieter

                        1 Reply Last reply Reply Quote 0
                        • P
                          pix last edited by

                          Du hast PN

                          1 Reply Last reply Reply Quote 0
                          • P
                            pix last edited by

                            Hallo Dieter,

                            wenn ich das richtig sehe, dann umfasst die Timout Funktion sowohl das Speichern, wie das Versenden des Bildes. Du willst aber eigentlich zwischen beiden Aktionen eine Pause. Also sollte die Timeout Funktion in den else-Teil der Fehlerabfrage.

                            Und darf ich fragen, was die Berechnung des Delays bringt?

                            ip - 65 * 5000
                            ````ip kann ja nur 66 oder 67 sein (ich vermute zwei Kameras). Soll also die Verzögerung bei beiden Kameras unterschiedlich sein? Wozu?
                            
                            Falls die Kameras sich gegenseitig stören beim Schreiben der Datei snap.jpg, kannst auch deren Namen mit der Variable ip bilden (snap66.jpg und snap67.jpg)````
                            for (x = 66; x <= 67; x++) {
                                log(x);
                                Telegram_Bild(x);
                            }
                            
                            function Telegram_Bild(ip) {
                            
                                //Bild senden mit Telegram
                                var request = require('request');
                                var fs = require('fs');
                                log('ip Schleife= ' + ip);
                            
                                request.get({
                                    url: 'http://192.168.243.' + ip + ':88//cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=abcd&pwd=abcd',
                                    encoding: 'binary'
                                }, function(err, response, body) {
                                    fs.writeFile("c:/tmp/snap" + ip + ".jpg", body, 'binary', function(err) {
                                        if (err) {
                                            console.error(err);
                                        } else {
                                            setTimeout(function() { // wenn kein Fehler, dann Zeitverzögert Bild senden
                                                console.log('Snapshot sent');
                                                //sendTo('telegram.0', 'c:/tmp/snap66.jpg');
                                                sendTo('telegram.0', {
                                                    text: 'c:/tmp/snap' + ip + '.jpg',
                                                    caption: 'Garage ' + ip + 'wird geöffnet.'
                                                });
                                            }, 5000);
                                        }
                                    });
                                });
                            }
                            

                            Gruß

                            Pix

                            1 Reply Last reply Reply Quote 0
                            • bahnuhr
                              bahnuhr Forum Testing Most Active last edited by

                              Das Probier ich aus.

                              Danke dir.

                              Mfg

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

                                @pix:

                                Hallo Dieter,

                                for (x = 66; x <= 67; x++) {
                                    log(x);
                                    Telegram_Bild(x);
                                }
                                
                                function Telegram_Bild(ip) {
                                
                                    //Bild senden mit Telegram
                                    var request = require('request');
                                    var fs = require('fs');
                                    log('ip Schleife= ' + ip);
                                
                                    request.get({
                                        url: 'http://192.168.243.' + ip + ':88//cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=abcd&pwd=abcd',
                                        encoding: 'binary'
                                    }, function(err, response, body) {
                                        fs.writeFile("c:/tmp/snap" + ip + ".jpg", body, 'binary', function(err) {
                                            if (err) {
                                                console.error(err);
                                            } else {
                                                setTimeout(function() { // wenn kein Fehler, dann Zeitverzögert Bild senden
                                                    console.log('Snapshot sent');
                                                    //sendTo('telegram.0', 'c:/tmp/snap66.jpg');
                                                    sendTo('telegram.0', {
                                                        text: 'c:/tmp/snap' + ip + '.jpg',
                                                        caption: 'Garage ' + ip + 'wird geöffnet.'
                                                    });
                                                }, 5000);
                                            }
                                        });
                                    });
                                }
                                

                                Gruß

                                Pix `
                                Hi Pix,

                                kurze Frage,

                                ist es eigentlich nicht so, das man sich das setTimeout schenken kann wenn man den Callback der fs.writeFile benutzt? Die sollte doch theoretisch erst aufgerufen werden wenn das schreiben beendet ist, bzw ein Fehler entstanden ist. Oder liegt mein leihenhaftes Halbwissen völlig daneben? :oops:

                                1 Reply Last reply Reply Quote 0
                                • bahnuhr
                                  bahnuhr Forum Testing Most Active last edited by

                                  Ausgangslage, was wollte ich:

                                  • das Script soll mir Bilder meiner Cams senden per Telegram.

                                  • das Bild soll erst versendet werden wenn es ordnungsgemäß gespeichert ist. (Deshalb zeitverzögert; wenn dies nicht notwendig dann auch gut)

                                  • das gespeicherte Bild soll nach Versand wieder gelöscht werden (hab ich bisher noch nicht hinbekommen)

                                  • ich wollte die Nachrichten per Telegram in der richtigen Reihenfolge.

                                  Also erst cam 62, dann 63, …. (Deshalb for .. To; dies klappt bisher nicht -> die Nachrichten kommen willkürlich, erst Bild 67, dann 62, dann 64, etc.)

                                  So, ich glaub das wars.

                                  Fazit:

                                  Wie bekomme ich das hin, mit

                                  • Datei wieder löschen

                                  • Reihenfolge der Nachrichten

                                  Mit freundlichen Grüßen

                                  Dieter

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

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  998
                                  Online

                                  31.6k
                                  Users

                                  79.4k
                                  Topics

                                  1.3m
                                  Posts

                                  5
                                  15
                                  10718
                                  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