Hallo,
ich habe hierzu eine alternatives Skript für mich gebastelt. Es verwendet keine Zufallszeiten, sondern einfach die Daten aus einem definierten Zeitraum aus der Historyinstanz (bei mir SQL). Fahre ich eine Woche weg, spiele ich einfach die letzte Woche ab und habe damit auch logische Lichtabfolgen. Ich habe es für 10 ids gebaut und es gibt keine Fehlerabfragen. Vielleicht hilft das ja auch jemandem von euch. Meine Scriptingfähigkeiten sind eher so Copy-Paste. Deshalb wiederholt sich hier auch 10mal der Code da ich sonst nicht wusste wie ich die asynchronen Arrays zusammen bekomme. Wer also Ideen zur Verbesserung hat, darf da gerne dran basteln. 😉
//Das Script lädt eine Liste der Schaltvorgänge der angegebenen Datenpunkte für einen definierten Zeitraum und spielt diese dann nocheinmal ab.
var Zeitspanne = 604800000; //Wie weit in der Vergangenheit mit dem Replay begonnen werden soll in ms (Tag:86400000, Woche: 604800000 )
var id1 ='sonoff.0.EG-KUECHE-Oberschranklicht.POWER'; //ids der zu Schaltenden Geraete
var id2 ='sonoff.0.EG-KUECHE-Vitrinenlicht.POWER';
var id3 ='sonoff.0.EG-HWR-Deckenlicht.POWER';
var id4 ='sonoff.0.EG-FLUR-Deckenlicht.POWER';
var id5 ='sonoff.0.EG-WZ-Wandlicht.POWER';
var id6 ='sonoff.0.EG-WZ-Stehlampe.POWER';
var id7 ='sonoff.0.EG-BAD-Deckenlicht.POWER';
var id8 ='sonoff.0.OG-FLUR-Deckenlicht.POWER';
var id9 ='sonoff.0.OG-BAD-Deckenlicht.POWER';
var id10 ='sonoff.0.OG-OST-Deckenlicht.POWER';
//id1
var Pause1;
sendTo('sql.0', 'getHistory', { //einlesen der Werte aus der History Instanz. Hier SQL
id: id1,
options: {
start: new Date().getTime() - Zeitspanne, //Ermitteln ab wann die Daten eingelesen werden sollen
aggregate: 'onchange'
}
}, function (result) {
j = 0;
function schalten(j) {
setState(id1 ,result.result[j].val); //Schalten der id mit dem Wert nr j aus der Liste
j++;
if (j < result.result.length) { //Falls Ende der Liste erreicht, aufhoeren
Pause1 = result.result[j].ts +Zeitspanne- new Date().getTime(); //Pause bis zum naesten Stateupdate berechnen
console.log('Zeit bis zum naesten Statusupdate von '+ id1 +' : ' + Pause1 + ' ms');
setTimeout (function () {schalten (j);}, Pause1);} //wieder aufrufen der Funktion verzoegert um die Pause
}
schalten (0);
});
//id2
var Pause2;
sendTo('sql.0', 'getHistory', { //einlesen der Werte aus der History Instanz. Hier SQL
id: id2,
options: {
start: new Date().getTime() - Zeitspanne, //Ermitteln ab wann die Daten eingelesen werden sollen
aggregate: 'onchange'
}
}, function (result) {
j = 0;
function schalten(j) {
setState(id2 ,result.result[j].val); //Schalten der id mit dem Wert nr j aus der Liste
j++;
if (j < result.result.length) { //Falls Ende der Liste erreicht, aufhoeren
Pause2 = result.result[j].ts +Zeitspanne- new Date().getTime(); //Pause bis zum naesten Stateupdate berechnen
console.log('Zeit bis zum naesten Statusupdate von '+ id2 +' : ' + Pause2 + ' ms');
setTimeout (function () {schalten (j);}, Pause2);} //wieder aufrufen der Funktion verzoegert um die Pause
}
schalten (0);
});
//id3
var Pause3;
sendTo('sql.0', 'getHistory', { //einlesen der Werte aus der History Instanz. Hier SQL
id: id3,
options: {
start: new Date().getTime() - Zeitspanne, //Ermitteln ab wann die Daten eingelesen werden sollen
aggregate: 'onchange'
}
}, function (result) {
j = 0;
function schalten(j) {
setState(id3 ,result.result[j].val); //Schalten der id mit dem Wert nr j aus der Liste
j++;
if (j < result.result.length) { //Falls Ende der Liste erreicht, aufhoeren
Pause3 = result.result[j].ts +Zeitspanne- new Date().getTime(); //Pause bis zum naesten Stateupdate berechnen
console.log('Zeit bis zum naesten Statusupdate von '+ id3 +' : ' + Pause3 + ' ms');
setTimeout (function () {schalten (j);}, Pause3);} //wieder aufrufen der Funktion verzoegert um die Pause
}
schalten (0);
});
//id4
var Pause4;
sendTo('sql.0', 'getHistory', { //einlesen der Werte aus der History Instanz. Hier SQL
id: id4,
options: {
start: new Date().getTime() - Zeitspanne, //Ermitteln ab wann die Daten eingelesen werden sollen
aggregate: 'onchange'
}
}, function (result) {
j = 0;
function schalten(j) {
setState(id4 ,result.result[j].val); //Schalten der id mit dem Wert nr j aus der Liste
j++;
if (j < result.result.length) { //Falls Ende der Liste erreicht, aufhoeren
Pause4 = result.result[j].ts +Zeitspanne- new Date().getTime(); //Pause bis zum naesten Stateupdate berechnen
console.log('Zeit bis zum naesten Statusupdate von '+ id4 +' : ' + Pause4 + ' ms');
setTimeout (function () {schalten (j);}, Pause4);} //wieder aufrufen der Funktion verzoegert um die Pause
}
schalten (0);
});
//id5
var Pause5;
sendTo('sql.0', 'getHistory', { //einlesen der Werte aus der History Instanz. Hier SQL
id: id5,
options: {
start: new Date().getTime() - Zeitspanne, //Ermitteln ab wann die Daten eingelesen werden sollen
aggregate: 'onchange'
}
}, function (result) {
j = 0;
function schalten(j) {
setState(id5 ,result.result[j].val); //Schalten der id mit dem Wert nr j aus der Liste
j++;
if (j < result.result.length) { //Falls Ende der Liste erreicht, aufhoeren
Pause5 = result.result[j].ts +Zeitspanne- new Date().getTime(); //Pause bis zum naesten Stateupdate berechnen
console.log('Zeit bis zum naesten Statusupdate von '+ id5 +' : ' + Pause5 + ' ms');
setTimeout (function () {schalten (j);}, Pause5);} //wieder aufrufen der Funktion verzoegert um die Pause
}
schalten (0);
});
//id6
var Pause6;
sendTo('sql.0', 'getHistory', { //einlesen der Werte aus der History Instanz. Hier SQL
id: id6,
options: {
start: new Date().getTime() - Zeitspanne, //Ermitteln ab wann die Daten eingelesen werden sollen
aggregate: 'onchange'
}
}, function (result) {
j = 0;
function schalten(j) {
setState(id6 ,result.result[j].val); //Schalten der id mit dem Wert nr j aus der Liste
j++;
if (j < result.result.length) { //Falls Ende der Liste erreicht, aufhoeren
Pause6 = result.result[j].ts +Zeitspanne- new Date().getTime(); //Pause bis zum naesten Stateupdate berechnen
console.log('Zeit bis zum naesten Statusupdate von '+ id6 +' : ' + Pause6 + ' ms');
setTimeout (function () {schalten (j);}, Pause6);} //wieder aufrufen der Funktion verzoegert um die Pause
}
schalten (0);
});
//id7
var Pause7;
sendTo('sql.0', 'getHistory', { //einlesen der Werte aus der History Instanz. Hier SQL
id: id7,
options: {
start: new Date().getTime() - Zeitspanne, //Ermitteln ab wann die Daten eingelesen werden sollen
aggregate: 'onchange'
}
}, function (result) {
j = 0;
function schalten(j) {
setState(id7 ,result.result[j].val); //Schalten der id mit dem Wert nr j aus der Liste
j++;
if (j < result.result.length) { //Falls Ende der Liste erreicht, aufhoeren
Pause7 = result.result[j].ts +Zeitspanne- new Date().getTime(); //Pause bis zum naesten Stateupdate berechnen
console.log('Zeit bis zum naesten Statusupdate von '+ id7 +' : ' + Pause7 + ' ms');
setTimeout (function () {schalten (j);}, Pause7);} //wieder aufrufen der Funktion verzoegert um die Pause
}
schalten (0);
});
//id8
var Pause8;
sendTo('sql.0', 'getHistory', { //einlesen der Werte aus der History Instanz. Hier SQL
id: id8,
options: {
start: new Date().getTime() - Zeitspanne, //Ermitteln ab wann die Daten eingelesen werden sollen
aggregate: 'onchange'
}
}, function (result) {
j = 0;
function schalten(j) {
setState(id8 ,result.result[j].val); //Schalten der id mit dem Wert nr j aus der Liste
j++;
if (j < result.result.length) { //Falls Ende der Liste erreicht, aufhoeren
Pause8 = result.result[j].ts +Zeitspanne- new Date().getTime(); //Pause bis zum naesten Stateupdate berechnen
console.log('Zeit bis zum naesten Statusupdate von '+ id8 +' : ' + Pause8 + ' ms');
setTimeout (function () {schalten (j);}, Pause8);} //wieder aufrufen der Funktion verzoegert um die Pause
}
schalten (0);
});
//id9
var Pause9;
sendTo('sql.0', 'getHistory', { //einlesen der Werte aus der History Instanz. Hier SQL
id: id9,
options: {
start: new Date().getTime() - Zeitspanne, //Ermitteln ab wann die Daten eingelesen werden sollen
aggregate: 'onchange'
}
}, function (result) {
j = 0;
function schalten(j) {
setState(id9 ,result.result[j].val); //Schalten der id mit dem Wert nr j aus der Liste
j++;
if (j < result.result.length) { //Falls Ende der Liste erreicht, aufhoeren
Pause9 = result.result[j].ts +Zeitspanne- new Date().getTime(); //Pause bis zum naesten Stateupdate berechnen
console.log('Zeit bis zum naesten Statusupdate von '+ id9 +' : ' + Pause9 + ' ms');
setTimeout (function () {schalten (j);}, Pause9);} //wieder aufrufen der Funktion verzoegert um die Pause
}
schalten (0);
});
//id10
var Pause10;
sendTo('sql.0', 'getHistory', { //einlesen der Werte aus der History Instanz. Hier SQL
id: id10,
options: {
start: new Date().getTime() - Zeitspanne, //Ermitteln ab wann die Daten eingelesen werden sollen
aggregate: 'onchange'
}
}, function (result) {
j = 0;
function schalten(j) {
setState(id10 ,result.result[j].val); //Schalten der id mit dem Wert nr j aus der Liste
j++;
if (j < result.result.length) { //Falls Ende der Liste erreicht, aufhoeren
Pause10 = result.result[j].ts +Zeitspanne- new Date().getTime(); //Pause bis zum naesten Stateupdate berechnen
console.log('Zeit bis zum naesten Statusupdate von '+ id10 +' : ' + Pause10 + ' ms');
setTimeout (function () {schalten (j);}, Pause10);} //wieder aufrufen der Funktion verzoegert um die Pause
}
schalten (0);
});