Mitarbeiterantwort
Mai 14, 2020 - 12:55
Die Ursache ist, dass die Status-Abfragen und Befehle asynchron ausgeführt werden. Wenn das executeDeviceCommand ausgeführt wird, sind noch nicht die Werte für device und time vorhanden – deren Ergebnis kommt erst hinterher an.
Ich habe es mal umgeschrieben, wie es klappen sollte. Dabei wird immer erst abgewartet, bis der Status im Callback erhalten wurde.
Ich habe es mal umgeschrieben, wie es klappen sollte. Dabei wird immer erst abgewartet, bis der Status im Callback erhalten wurde.
//
// Variables
//
var room = "Garden";
//
// Functions
//
var fnGetDevice = function(cb) {
getDeviceStatus(
"rm.CentralServer",
"sv.Irrigation.dev",
{"value":"state"},
function(err, status) {
err && console.error(err.message);
if (err || !status) {
console.error('Value cannot be read.');
cb(null);
return;
}
var device = status.toString();
console.log(device);
cb(device);
}
);
};
var fnGetTime = function(cb) {
getDeviceStatus(
"rm.CentralServer",
"sv.Irrigation.XXm",
{"value":"state"},
function(err, status) {
err && console.error(err.message);
if (err || !status) {
console.error('Value cannot be read.');
cb(null);
return;
}
var time = status * 60;
console.log(time);
cb(time);
}
);
};
//
// Main
//
fnGetDevice(function(device) {
fnGetTime(function(time) {
if (device === null || time === null) {
return;
}
executeDeviceCommand(
room,
device,
{"value":"onFor","ext":time,"unit":"s"},
function(err) {
err && console.error(err.message);
}
);
});
});
Von
Hallo Sebastian,
funktioniert. Das mit dem Asynchron werde ich mir merken und dies hier zukünftig als blur print verwenden.
Danke und ciao
Walter
Neuen Kommentar hinzufügen