NEWS
Hilfe bei require request
-
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); }
-
gibts da echt keinen JavaScript-Guru?
-
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); });
-
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ß
-
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