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:
Hier mein code:
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);
}
Alles anzeigen