Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelößt] Frage zu Rückgabewert/Callback nach request

    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ößt] Frage zu Rückgabewert/Callback nach request

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

      Hallo,

      ich will eine Netzwerksteckdose Netio230B per Javascript steuern (ich weiß es gibt da schon einen fertigen Node-Red-Flow, der auch funktioniert, ich wollte es trotzdem per Script probieren) was auch grundsätzlich funktioniert. An einer Sache beiße ich mir jedoch die Zähne aus. Ich bekomme das mit dem Rückgabewert nicht gebacken, was wohl daran liegt, das request die Antwort asynchron liefert, sprich bis die Antwort da ist ist das Script schon weiter und es gibt nur ein undefinded als Rückmeldung.

      Im Prinzip habe ich das gleiche Problem wie @ruhr70 hier –> viewtopic.php?t=1073#p8488 , ich habe aber nicht wirklich verstanden wie das denn letztendlich gelöst wurde.

      So sieht mein Script aus, aktuell nur für eine Steckdose:

      ! ````
      // Variablen deklarieren / ID´s einlesen
      var request = require ('request');
      var bSetAusgang1 = "javascript.0.Netio230B.Set_Ausgang_1";
      ! // Ausgang 1 behandeln
      on({id: bSetAusgang1, val: true}, function() {
      log("1. Ausgang 1 soll geschaltet werden");
      let result = LeseStatus (1); // Aufrufendes Script mit Nummer des zu lesenden Ausgangs
      log("3. In der aufrufenden Funktion kommt an: " + result);
      // weitere Anweisungen
      setState(bSetAusgang1, false); // VIS-Variable wieder zurücksetzen
      });
      ! // Status der Ausgänge lesen
      function LeseStatus (Out) {
      var url = "http://192.168.0.190/cgi/control.cgi?login=p:USER:PASSWORD&p=l";
      var OutStatus;
      request(url, function (error, state, body) {
      if (body) {
      var abody = body.slice(6, 13).split(' '); // Status der 4 Ausgänge extrahieren und in Array splitten
      OutStatus = abody[Out-1]; // Übergebener Wert ist vom Typ string!!
      log("2. Ausgang " + Out + " hat Zustand " + OutStatus);
      }
      });
      // Hier soll nun als Rückgabewert der Status des Ausgangs (0 oder 1) zurückgegeben werden
      }

      
      Kann mir vielleicht jemand einen Schubs geben oder erklären, wie ich das mit dem Rückgabewert anpacken muss.
      
      Gruß Steffen
      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        Was möchtest Du mit

        	// weitere Anweisungen
        
        

        machen, das Du nicht auch in der Callback-Funktion von request() erledigen kannst ?

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

          Hallo paul53,

          da soll dann je nach Rückmeldung der Ausgang ein oder ausgeschaltet werden.

          Der Gedanke war folgender:

          Die Steckdosenleiste hat 4 Ausgänge ich wollte zum Schalten des jeweiligen Ausgangs immer die Funktion LeseStatus aufrufen und dann eben wie oben geschrieben je nach Rückmeldung den Ausgang ein oder ausschalten.

          Aber je mehr ich darüber nachdenke, so glaube ich, das ich zu kompliziert denke!
          > das Du nicht auch in der Callback-Funktion von request() erledigen kannst ?
          Vor allem nach dem was du geschrieben hast - ich schau mal ob ich das was ich machen will dort unterkriege!

          Gruß Steffen

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

            Hallo paul53,

            danke, du hast mich mit deiner Frage auf den richtigen weg gebracht! Habe das was ich will nun im Script unter request gepackt und es funktioniert einwandfrei. Habe mal wieder viel zu kompliziert gedacht!

            Danke nochmals,

            Gruß Steffen

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

              Hier noch meine Lösung, falls jemand ein ähnliches Problem hat:

              ! ````
              // Variablen deklarieren / ID´s einlesen
              var request = require ('request');
              var bSetAusgang1 = "javascript.0.Netio230B.Set_Ausgang_1";
              var bAusgang1 = "javascript.0.Netio230B.Ausgang_1";
              ! // Ausgang 1 behandeln
              on({id: bSetAusgang1, val: true}, function() {
              log("1. Ausgang 1 soll geschaltet werden");
              LeseStatus (1);
              setState(bSetAusgang1, false); // VIS-Variable wieder zurücksetzen
              });
              ! // Status der Ausgänge lesen
              function LeseStatus (Out) {
              var url = "http://192.168.0.190/cgi/control.cgi?login=p:USER:PASSWORD&p=l";
              var OutStatus;
              request(url, function (error, state, body) {
              if (body) {
              var abody = body.slice(6, 13).split(' '); // Status der 4 Ausgänge extrahieren und in Array splitten
              OutStatus = abody[Out-1]; // Übergebener Wert ist vom Typ string!!
              log("2. Ausgang " + Out + " hat Zustand " + OutStatus);
              if (OutStatus === "1") {
              log("3. Ausgang " + Out + " wird ausgeschaltet");
              SchalteAusgang ("0uuu");
              setState(bAusgang1, false);
              }
              if (OutStatus === "0") {
              log("3. Ausgang " + Out + " wird eingeschaltet");
              SchalteAusgang ("1uuu");
              setState(bAusgang1, true);
              }
              }
              });
              }
              ! // Ausgänge schalten
              function SchalteAusgang (befehl) {
              var url = "http://192.168.0.190/cgi/control.cgi?login=p:USER:PASSWORD&p=" + befehl;
              log ("4. Sende Befehl: " + url);
              request(url, function(error, state, body) {
              log("5. Rückmeldung: " + state);
              });
              }

              
              Gruß Steffen
              1 Reply Last reply Reply Quote 0
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate

              681
              Online

              31.7k
              Users

              79.9k
              Topics

              1.3m
              Posts

              2
              5
              322
              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