Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Exec Befehle hintereinander ausführen

    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

    Exec Befehle hintereinander ausführen

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

      Hallo Leute,

      ich arbeite gerade an einer Viessmann Heizungssteuerung und rufe dann folgende Befehle auf:

      
      //Viessmann Instanz kurz Stoppen - beide können nicht schreiben
      exec('iobroker stop viessmann.0', function (error, stdout, stderr) {
          console.log('stdout: ' + stdout);
      });
      
      // Setzen der Heizzeiten
      exec(Befehl_SchaltzeitenMo, function (error, stdout, stderr) {
          console.log('stdout: ' + stdout);
      });
      
      ....
      
      exec(Befehl_SchaltzeitenSo, function (error, stdout, stderr) {
          console.log('stdout: ' + stdout);
      });
      
      //Viessmann Instanz wieder starten - beide können nicht schreiben
      exec('iobroker start viessmann.0', function (error, stdout, stderr) {
          console.log('stdout: ' + stdout);
      });
      
      

      Mein Problem ist jetzt, dass ich den letzten Befehl wirklich erst zum Schluss ausführen muss - er aber aktuell als zweites (laut Log) ausgeführt wird.

      Wie macht ihr das?

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

        Du musst mit den Callbacks arbeiten … oder mit Promises.

        Ich weiss, am Anfang ist das komisch ... aber Javascript ist halt asynchron.

        1 Reply Last reply Reply Quote 0
        • K
          Karl_999 last edited by

          Wenn die Befehle hintereinander abgearbeitet werden sollen und auch die maximale Laufzeit der Befehle bekannt ist, dann könnte timeout() helfen

          	setTimeout(function () {   
          		exec('iobroker stop viessmann.0', function (error, stdout, stderr) {
          		    console.log('stdout: ' + stdout);
          		}, 1000);	// wird nach einer Sekunde ausgeführt
          
          	setTimeout(function () {   
          		exec(Befehl_SchaltzeitenMo, function (error, stdout, stderr) {
          		    console.log('stdout: ' + stdout);
          		}, 2000);	// wird nach zwei Sekunden ausgeführt
          
          

          Das ist zwar durch die Brust in's Auge. Aber JS kennt nun mal kein delay(), das an dieser Stelle kurz wartet.

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

          Support us

          ioBroker
          Community Adapters
          Donate

          532
          Online

          31.8k
          Users

          79.9k
          Topics

          1.3m
          Posts

          3
          3
          511
          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