-
Autor
Hallo zusammen,
ich habe folgendes Skript für eines unserer Shelly 1PM Mini um es jeden Wochentag (außerhalb von Ferien und Feiertagen) einzuschalten. Das Skript kann ich aktivieren aber sobald ich es starte, stoppt es sofort wieder.
Wo liegt das Problem?
Code
// Konfigurationswerte
const SWITCH_ID = 0; // ID des Switches (bei Bedarf anpassen)
const ACTIVE_DAYS = [1, 2, 3, 4, 5]; // Montag (1) bis Freitag (5)
const SCHEDULE_HOUR = 5; // Stunde der Einschaltzeit
const SCHEDULE_MINUTE = 55; // Minute der Einschaltzeit
const HOLIDAY_STORAGE_KEY = "holidaysAndVacations"; // Schlüssel für gespeicherte Feiertage/Ferien
const REGION_HOLIDAYS = "BW"; // Feiertage-Region (Baden-Württemberg)
const REGION_FERIEN = "BW"; // Ferien-Region (Baden-Württemberg)
// Funktion zum Einschalten des Shelly Switches
function turnOnSwitch() {
Shelly.call("Switch.Set", { id: SWITCH_ID, on: true });
}
// Funktion zum Abrufen der Feiertage von feiertage-api.de
function fetchHolidays() {
Shelly.call("HTTP.GET", {
url: `https://feiertage-api.de/api/?jahr=${new Date().getFullYear()}&nur_land=${REGION_HOLIDAYS}`
}, function (response) {
if (response.code === 200) {
const holidays = JSON.parse(response.body);
// Feiertage in ein Array vorn holidaysAndVacations.includes(todayStr);
}
// Funktion zur Prüfung, ob der aktuelle Tag und die Uhrzeit der geplanten Aktivierung entsprechen
function checkSchedule() {
const now = new Date();
const currentDay = now.getDay(); // Wochentag (0 = Sonntag, 1 = Montag, ..., 6 = Samstag)
const currentHour = now.getHours();
const currentMinute = now.getMinutes();
// Prüfen, ob heute ein gültiger Tag und keine Ferien/Feiertage sind
if (ACTIVE_DAYS.includes(currentDay) && !isHolidayOrVacation()) {
// Prüfen, ob die aktuelle Zeit der geplanten Einschaltzeit entspricht
if (currentHour === SCHEDULE_HOUR && currentMinute === SCHEDULE_MINUTE) {
turnOnSwitch();
}
}
}
// Täglicher Abruf der Feiertage und Ferientage um Mitternacht
Timer.set(24 * 60 * 60 * 1000, true, fetchHolidays); // Einmal täglich
// Regelmäßige Prüfung der Zeit (jede Minute)
Timer.set(60000, true, checkSchedule);
// Initialer Abruf der Feiertage und Ferientage beim Start
fetchHolidays(
Alles anzeigen