Für die, die es interessiert ;-)
Habe es gelöst bekommen aber durch eine Änderung im Script (2 Funktionen), vielleicht braucht es mal jemand:
In der ersten Funktion werden die schedules erstellt und übergeben an eine zweite Funktion dann die aktuelle Zeit beim Auslösen des Schedule-Befehls
async function scheduleDeviceStates(){
try {
for(var i = 0; i < devices.length; i++) {
await clearExistingSchedules(devices[i].deviceName);
if(getState(instanz + pfad0 + devices[i].deviceName + '.onTime1').val != 'OFF'){
deviceSchedules[devices[i].deviceName + '.onTime1'] = schedule({hour: getState(instanz + pfad0 + devices[i].deviceName + '.onTime1').val.split(':')[0], minute: getState(instanz + pfad0 + devices[i].deviceName + '.onTime1').val.split(':')[1]}, function (deviceID) {
switchDevicesByTime(new Date().getHours() +':'+ new Date().getMinutes(),'onTime1');
});
deviceSchedules[devices[i].deviceName + '.offTime1'] = schedule({hour: getState(instanz + pfad0 + devices[i].deviceName + '.offTime1').val.split(':')[0], minute: getState(instanz + pfad0 + devices[i].deviceName + '.offTime1').val.split(':')[1]}, function () {
switchDevicesByTime(new Date().getHours() +':'+ new Date().getMinutes(),'offTime1');
});
}
if(getState(instanz + pfad0 + devices[i].deviceName + '.onTime2').val != 'OFF'){
deviceSchedules[devices[i].deviceName + '.onTime2'] = schedule({hour: getState(instanz + pfad0 + devices[i].deviceName + '.onTime2').val.split(':')[0], minute: getState(instanz + pfad0 + devices[i].deviceName + '.onTime2').val.split(':')[1]}, function () {
switchDevicesByTime(new Date().getHours() +':'+ new Date().getMinutes(),'onTime2');
});
deviceSchedules[devices[i].deviceName + '.offTime2'] = schedule({hour: getState(instanz + pfad0 + devices[i].deviceName + '.offTime2').val.split(':')[0], minute: getState(instanz + pfad0 + devices[i].deviceName + '.offTime2').val.split(':')[1]}, function () {
switchDevicesByTime(new Date().getHours() +':'+ new Date().getMinutes(),'offTime2');
});
}
}
} catch (error) {
log(`Unexpected error - ${error}`, 'error');
}
}
Die zweite Funktion, schaltet dann in einem Intervall alle Elemente der Reihe nach durch, bei denen die Übermittelte Uhrzeit als Auslösezeit eingetragen ist.
function switchDevicesByTime(swTime,dp){
var hours = swTime.split(':')[0] < 10 ? '0' + swTime.split(':')[0] : swTime.split(':')[0];
var minutes = swTime.split(':')[1] < 10 ? '0' + swTime.split(':')[1] : swTime.split(':')[1];
var swValue;
var i =0;
var DevicesInterval = setInterval(function() {
if(i < devices.length){
log(hours+':'+minutes+'----------------'+dp)
if(dp.substr(0,dp.length -1) == 'onTime'){
if(devices[i].deviceType == 'state') swValue = true;
if(devices[i].deviceType == 'level') swValue = 100;
}
if(dp.substr(0,dp.length -1) == 'offTime'){
if(devices[i].deviceType == 'state') swValue = false;
if(devices[i].deviceType == 'level') swValue = 0;
}
if(getState(instanz + pfad0 + devices[i].deviceName + '.'+dp).val.indexOf(hours+':'+minutes)!=-1){
if(getState(devices[i].deviceID).val != swValue)setState(devices[i].deviceID, swValue);
}
i++;
}else {
clearInterval(DevicesInterval);
}
}, 1000); // alle 1 Sekunden ausführen
}