Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Hilfe bei require 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

    Hilfe bei require request

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

      ich liefere in der function doSwitch nach dem require-request ohne zu prüfen true zurück, was dann quasi ausgewertet wird und an telegram gesendet wird. und hier ist genau mein problem. ich habe einige versuche getätigt den response abzuwarten, aber das kommt scheinbar asynchron und damit lieferte ich immer false und eine falsche benachrichtigung an den telegram bot.

      kann mir da jemand weiter helfen?

      so sieht der positive response vom require-request aus:

      {"message":"Command used:10","status":"uisuccess"}
      

      Hier mein code:

      var idText = 'INFO.lastTelegramRequest';
      var idTextId = 'INFO.lastTelegramRequestId';
      var actualTelegramRequest = getState("telegram.0.communicate.request").val;
      var actualTelegramRequestId = getState("telegram.0.communicate.requestMessageId").val;
      var helperTelegramRequest = actualTelegramRequest.substring(actualTelegramRequest.indexOf("]") + 1, actualTelegramRequest.length);
      var actionDone = true;
      var homepilotIp = getState("homepilot.0.station.ip").val;
      var returnText = "";
      
      createState(idTextId, {
          type: 'string',
          name: 'Letzte Telegram request ID',
          desc: 'um zu vergleichen ob man etwas tun muss',
          def: ' ',
          role: 'value'
      });
      
      createState(idText, {
          type: 'string',
          name: 'Letzter Telegram request',
          desc: 'um zu vergleichen ob man etwas tun muss',
          def: ' ',
          role: 'value'
      });
      
      var lastTelegramRequest = getState("javascript." + instance + "." + idText).val;
      var lastTelegramRequestId = getState("javascript." + instance + "." + idTextId).val;
      
      if (lastTelegramRequestId != actualTelegramRequestId) {
          switch(helperTelegramRequest) {
              case "Licht-Innenhof-An":
                  actionDone = doSwitch("10011", true);
                  returnText = helperTelegramRequest + "..." + (actionDone ? "ok" : "failed");
                  break;
      
              case "Licht-Innenhof-Aus":
                  actionDone = doSwitch("10011", false);
                  returnText = helperTelegramRequest + "..." + (actionDone ? "ok" : "failed");
                  break;
      
              case "Licht-Strasse-An":
                  actionDone = doSwitch("1010048", true);
                  returnText = helperTelegramRequest + "..." + (actionDone ? "ok" : "failed");
                  break;
      
              case "Licht-Strasse-Aus":
                  actionDone = doSwitch("1010048", false);
                  returnText = helperTelegramRequest + "..." + (actionDone ? "ok" : "failed");
                  break;    
      
              case "Licht-Garten-An":
                  actionDone = doSwitch("1010002", true);
                  returnText = helperTelegramRequest + "..." + (actionDone ? "ok" : "failed");
                  break;
      
              case "Licht-Garten-Aus":
                  actionDone = doSwitch("1010002", false);
                  returnText = helperTelegramRequest + "..." + (actionDone ? "ok" : "failed");
                  break;
      
              case "Licht-Carport-An":
                  actionDone = doSwitch("1010035", true);
                  returnText = helperTelegramRequest + "..." + (actionDone ? "ok" : "failed") + "\r\n";
                  actionDone = doSwitch("1010036" ,true);
                  returnText += helperTelegramRequest + "..." + (actionDone ? "ok" : "failed");
                  break;
      
              case "Licht-Carport-Aus":
                  actionDone = doSwitch("1010035", false);
                  returnText = helperTelegramRequest + "..." + (actionDone ? "ok" : "failed") + "\r\n";
                  actionDone = doSwitch("1010036", false);
                  returnText += helperTelegramRequest + "..." + (actionDone ? "ok" : "failed");
                  break;     
      
              case "Licht-Outdoor-Info":
                  $('channel[state.id=homepilot.0.devices.DuoFernUniversal-Aktor2-Kanal.*.state](functions=licht)(rooms=outdoor)').each(function(id, i) {
                      var  name = getState(id.substring(0, id.lastIndexOf('.')) + ".name").val;
      
                      returnText += name + "..." + (getState(id).val ? "on" : "off") + "\r\n";
                  });
      
                  break;
      
              default:
                  returnText = "Nothing to do";    
          }    
      
          sendToTelegram(returnText);
          writeActualTelegramRequest(idText, actualTelegramRequest); 
          writeActualTelegramRequest(idTextId, actualTelegramRequestId);
      } else {
          sendToTelegram("Gleiche MessageId => Nothing to do");    
      }
      
      function doSwitch(deviceId, switchOn) {
          try {    
              var requestUri = "http://" + homepilotIp + "/deviceajax.do?cid=" + (switchOn ? "10" : "11") + "&did=" + deviceId + "&command=1";
      
              require("request")((requestUri));
              console.log("request: " + requestUri);
      
          } catch (e) { console.error(e); }
      
          return true;
      }
      
      function sendToTelegram(textToSend) {
          sendTo("telegram", "send", {text: (String(textToSend))});    
      }
      
      function writeActualTelegramRequest(stateId, request) {
          setState("javascript." + instance + "." + stateId, request);    
      }
      
      
      1 Reply Last reply Reply Quote 0
      • H
        homecineplexx last edited by

        gibts da echt keinen JavaScript-Guru? 🙂

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

          Ich bin gewiss kein Guru, aber die Zeile:

          require("request")((requestUri))
          

          Kommt mir komisch vor. Bzw ist mir diese Schreibweise nicht bekannt.

          Als Beispiel

          const request = require('request');
          request('http://www.google.com', (err, res, body) = > {
            console.log(res);
          });
          
          1 Reply Last reply Reply Quote 0
          • BuZZy
            BuZZy last edited by

            @blauholsten:

            const request = require('request');
            request('http://www.google.com', (err, res, body) = > {
              console.log(res);
            });
            ```` `  
            

            Yes.. Das ist der richtige weg..

            const request = require('request');
            request(requestUri, (err, res, body) = > {
                if (!err) {
                    hier wird der Code ausgeführt sobald das Ergebnis von dem Request zurück gekommen ist und
                    musst dann hier in diesem Block return true oder false geben..
                }    
            });
            

            Gruß

            1 Reply Last reply Reply Quote 0
            • H
              homecineplexx last edited by

              @BuZZy:

              @blauholsten:

              const request = require('request');
              request('http://www.google.com', (err, res, body) = > {
                console.log(res);
              });
              ```` `  
              

              Yes.. Das ist der richtige weg..

              const request = require('request');
              request(requestUri, (err, res, body) = > {
                  if (!err) {
                      hier wird der Code ausgeführt sobald das Ergebnis von dem Request zurück gekommen ist und
                      musst dann hier in diesem Block return true oder false geben..
                  }    
              });
              

              Gruß `

              ok, super danke. werde ich heute so probieren.

              dieses````
              require("request")((requestUri));

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

              Support us

              ioBroker
              Community Adapters
              Donate

              897
              Online

              31.7k
              Users

              79.9k
              Topics

              1.3m
              Posts

              3
              5
              717
              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