Hallo zusammen,
ich habe leider ein kleines Skriptproblem und hoffe, dass ihr mir dabei helfen könnt.
Hintergrund:
Ich schalte beim Verlassen des Hauses den Alarmstatus auf 1 und damit ist die Alarmanlage aktiv.
Damit einhergehend soll nun folgendes geschehen:
- Alle 10 Minuten soll überprüft werden, ob die aktuelle Zeit sich zwischen dem Sonnenuntergang und 23:30 Uhr befindet und sich gleichzeitig noch der Alarmstatus auf 1 befindet. (funktioniert)
- Wenn dem so ist, soll die Steckdose 4 angeschaltet werden (funktioniert)
- Außerdem soll das Badezimmerlicht in SCHEINBAR unregelmäßigen Zeiten an un wieder aus geschaltet werden (funktioniert)
--> daher auch der Zeitplan mit den verschiedenen Minuten und kein Timeout
- Wenn die obige Regel nicht mehr greift, dann soll die Steckdose 4 um 23:31 Uhr wieder ausgeschaltet werden.
Hierzu hatte ich es im ersten Versuch mit folgendem Blockly getestet (hmmm, mir ist gerade gar nicht klar, wie ich das Bild hochladen kann, ist es nur über eine Quelle möglich, muss ich es also irgendwo im Netz hinterlegen?):
on({id: "mihome.0.Alarmstatus1"/*Alarmstatus 1*/, val: true}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
schedule("*/10 * * * *", function () {
if (compareTime(getAstroDate("sunset", undefined, 0), '23:30', "between", null) && getState("mihome.0.Alarmstatus1").val == true) {
setState("[definition='84','0']sonoff[/definition].0.steckdose4.POWER"/*steckdose4 POWER*/, true);
schedule("10,35,51 * * * *", function () {
setState("[definition='84','0']sonoff[/definition].0.shellybadezimmer.POWER"/*shellybadezimmer POWER*/, true);
});
schedule("16,39,59 * * * *", function () {
setState("[definition='84','0']sonoff[/definition].0.shellybadezimmer.POWER"/*shellybadezimmer POWER*/, false);
});
} else {
schedule("31 23 * * *", function () {
setState("[definition='84','0']sonoff[/definition].0.steckdose4.POWER"/*steckdose4 POWER*/, false);
});
}
});
});
Alles anzeigen
Das Problem:
Auch wenn der Alarmstatus nicht mehr auf 1 gesetzt war, hat das Licht im Badezimmer weiterhin fröhlich geschaltet.
Ich habe mich also gefragt, wie ich diese Zeitpläne abbrechen kann und kam auf den Zeitplan mit Bezeichnung und CRON-Regel, damit ich ein entspechenden stop einbauen kann:
var Abwesenheitstrigger, Abwesenheitfernaus, Abwesenheitbadan, Abwesenheitbadaus;
on({id: "mihome.0.Alarmstatus1"/*Alarmstatus 1*/, val: true}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
Abwesenheitstrigger = schedule('*/10 * * * *', function () {
if (compareTime(getAstroDate("sunset", undefined, 0), '23:30', "between", null) && getState("mihome.0.Alarmstatus1").val == true) {
setState("[definition='84','0']sonoff[/definition].0.steckdose4.POWER"/*steckdose4 POWER*/, true);
Abwesenheitbadan = schedule('10,35,51 * * * *', function () {
setState("[definition='84','0']sonoff[/definition].0.shellybadezimmer.POWER"/*shellybadezimmer POWER*/, true);
});
Abwesenheitbadaus = schedule('16,39,59 * * * *', function () {
setState("[definition='84','0']sonoff[/definition].0.shellybadezimmer.POWER"/*shellybadezimmer POWER*/, false);
});
} else {
Abwesenheitfernaus = schedule('31 23 * * *', function () {
setState("[definition='84','0']sonoff[/definition].0.steckdose4.POWER"/*steckdose4 POWER*/, false);
});
}
});
});
on({id: "mihome.0.Alarmstatus1"/*Alarmstatus 1*/, change: "ne"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
if (getState("mihome.0.Alarmstatus1").val == false) {
(function () {if (Abwesenheitstrigger) {clearSchedule(Abwesenheitstrigger); Abwesenheitstrigger = null;}})();
(function () {if (Abwesenheitbadan) {clearSchedule(Abwesenheitbadan); Abwesenheitbadan = null;}})();
(function () {if (Abwesenheitbadaus) {clearSchedule(Abwesenheitbadaus); Abwesenheitbadaus = null;}})();
(function () {if (Abwesenheitfernaus) {clearSchedule(Abwesenheitfernaus); Abwesenheitfernaus = null;}})();
}
});
Alles anzeigen
Leider ist die Zeitsteuerung auch hierbei nicht abgebrochen und das Badezimmerlicht schaltet an und aus, obwohl ich bereits zu Hause bin.
Bestimmt fällt euch auf Anhieb der Fehler auf
Beste Grüße