Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JS: Wie auf socket-Ergebnis warten?

    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

    JS: Wie auf socket-Ergebnis warten?

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

      Hallo!

      Ich weiß, es ist eine schlechte Praxis, blockierende I/O-Operationen zu verwenden, aber ich möchte gerne eine bestimmte Ablaufsteuerung in einem Skript programmieren.
      Hierzu habe ich ein Blockly gebaut, welches in mehreren Schritten Wasser in der Heizung auffüllt:

      Prüfe Heizungsdruck
      Wenn zu niedrig -> Starte Logik:
      Schalte Pumpe aus
      Öffne Wasserventil bis Druck ok
      Schließe Ventil
      Schalte Pumpe ein

      Das lässt sich auch prima lösen, jedoch muss ich für die Pumpensteuerung einen Befehl per TCP-Socket an meine ebusd-Installation senden und auf das Ergebnis (ob es geklappt hat) reagieren.

      Hierzu nutze ich folgendes JavaScript:

      var net = require('net');
      
      function sendMessage(host, port, message) {
        var retry = 0;
        var finished = false;
      
        var client = net.connect({host:host, port: port}, function () {
        
          console.log('connected to server!');
          client.write(message);
        });
        client.on('data', function (data) {
            // OK: "done..."
            // Nicht OK: "ERR..."
            // Rückgabe nach "quit": "connection closed"
      
            if(data.toString().indexOf('connection closed')<0) {
      
            
              if(data.toString().indexOf('done')>=0) {
                  
                  log("eBus ok!", 'warn');
                  client.write('quit\r\n');
                  finished = true;
              } else {
                  log("eBus: " + data.toString() + " versuche erneut", 'warn');
                  retry++;
                  if(retry<5) {
                      sleep(2000);
                      client.write(message);
                  } else {
                      log("eBus FEHLER!", 'warn');
                      client.write('quit\r\n');
                      finished = true;
                  }
                  
              }
            }
      
          
          
        });
        client.on('end', function () {
          console.log('disconnected from server');
          finished = true;
        });
        client.on('error', function (error) {
          console.error('error: ' + error);
          client.end();
          finished = true;
        });
      }
      
      sendMessage('IP-Adresse', 8888, 'write -c MM1 MKModus Stand-By\r\n');
      

      Gerne würde ich das als JS-Funktion in Blockly nutzen, jedoch muss mir der Code dafür unbedingt das Ergebnis der ganzen Aktion zurückgeben. Im jetzigen Zustand erfolgt die Rückkehr nach SendMessage ja umgehend und ich weiß nicht, ob der Vorgang erfolgreich war.

      Habt ihr irgendeine Idee, wie man das lösen könnte?

      arteck 1 Reply Last reply Reply Quote 0
      • arteck
        arteck Developer Most Active @oxident last edited by

        @oxident setzt dich mal mit await und async auseinander

        O 1 Reply Last reply Reply Quote 1
        • O
          oxident @arteck last edited by

          @arteck Hatte gehofft, da drumherum zu kommen. Jetzt habe ich wohl keine Ausrede mehr 😉

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

          Support us

          ioBroker
          Community Adapters
          Donate

          850
          Online

          31.8k
          Users

          80.0k
          Topics

          1.3m
          Posts

          blockly javascript
          2
          3
          147
          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