Ein zweites Skript schaltet das Relais wieder ab wenn die Leistungsaufnahme dann einmal über 100W gestiegen und dann wieder unter 75W gesunken ist oder es ist später als 08:30Uhr.
Beiträge von Liquidationen
VPN/Proxy erkannt
Es scheint, dass Sie einen VPN- oder Proxy-Dienst verwenden. Bitte beachten Sie, dass die Nutzung eines solchen Dienstes die Funktionalität dieser Webseite einschränken kann.
-
-
PatrickR danke dir schon mal!
-
Die KI hat mir den Code wie folgt verändert um die Fehlermeldung zu beheben und eine Schleife anstelle des Arrays verwendet.
Jetzt bekomme ich keine Ausgabe mehr in der Console aber das Skript stoppt trotzdem sofort wieder.
Code
Alles anzeigen// 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) { try { const holidays = JSON.parse(response.body); // Feiertage in ein Array von "YYYY-MM-DD" umwandeln const holidayDates = []; for (const key in holidays) { if (holidays[key] && holidays[key].datum) { holidayDates.push(holidays[key].datum); } } // Abruf der Ferientage starten, wenn die Feiertage geladen wurden fetchVacations(holidayDates); } catch (error) { print("Fehler beim Verarbeiten der Feiertage:", error.message); } } else { print("Fehler beim Abrufen der Feiertage:", response.code); } }); } // Funktion zum Abrufen der Ferientage von ferien-api.de function fetchVacations(holidayDates) { Shelly.call("HTTP.GET", { url: 'https://ferien-api.de/api/v1/holidays/' + REGION_FERIEN }, function (response) { if (response.code === 200) { try { const vacations = JSON.parse(response.body); // Ferientage in ein Array von "YYYY-MM-DD" umwandeln const vacationDates = vacations.map(vacation => { const start = new Date(vacation.start); const end = new Date(vacation.end); const dates = []; // Alle Tage zwischen Start- und Enddatum hinzufügen while (start <= end) { dates.push(start.toISOString().split("T")[0]); start.setDate(start.getDate() + 1); } return dates; }).flat(); // Feiertage und Ferientage kombinieren und speichern saveHolidaysAndVacations([...holidayDates, ...vacationDates]); } catch (error) { print("Fehler beim Verarbeiten der Ferientage:", error.message); } } else { print("Fehler beim Abrufen der Ferientage:", response.code); } }); } // Funktion zum Speichern der Feiertage und Ferientage function saveHolidaysAndVacations(dates) { Shelly.setComponentState("system", HOLIDAY_STORAGE_KEY, dates); } // Funktion zum Abrufen der gespeicherten Feiertage und Ferientage function getSavedHolidaysAndVacations() { const state = Shelly.getComponentState("system", HOLIDAY_STORAGE_KEY); return Array.isArray(state) ? state : []; } // Funktion zur Prüfung, ob heute ein Feiertag oder Ferientag ist function isHolidayOrVacation() { const today = new Date(); const todayStr = today.toISOString().split("T")[0]; // Format: "YYYY-MM-DD" const holidaysAndVacations = getSavedHolidaysAndVacations(); // Statt includes wird eine Schleife verwendet for (let i = 0; i < holidaysAndVacations.length; i++) { if (holidaysAndVacations[i] === todayStr) { return true; } } return false; } // 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();
-
Hmm… ein Syntax-Fehler
Uncaught SyntaxError: Got TEMPLATE LITERAL expected EOF20:51:46at url: `https://feiertage-api.de/api/?jahr=$%7Bnew Date().ge...20:51:46
^20:51:46
in function "fetchHolidays" called from fetchHolidays();20:51:46
^
-
Sorry beim Kopieren ist wohl was verloren gegangen und ich habe es nicht noch mal kontrolliert.
Hier noch mal alles…da ich beim Coden keinen Plan habe, habe ich ChatGPT um Hilfe gebeten.
Code
Alles anzeigen// 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 von "YYYY-MM-DD" umwandeln const holidayDates = Object.keys(holidays).map(key => holidays[key].datum); // Abruf der Ferientage starten, wenn die Feiertage geladen wurden fetchVacations(holidayDates); } else { print("Fehler beim Abrufen der Feiertage:", response.code); } }); } // Funktion zum Abrufen der Ferientage von ferien-api.de function fetchVacations(holidayDates) { Shelly.call("HTTP.GET", { url: `https://ferien-api.de/api/v1/holidays/${REGION_FERIEN}` }, function (response) { if (response.code === 200) { const vacations = JSON.parse(response.body); // Ferientage in ein Array von "YYYY-MM-DD" umwandeln const vacationDates = vacations.map(vacation => { const start = new Date(vacation.start); const end = new Date(vacation.end); const dates = []; // Alle Tage zwischen Start- und Enddatum hinzufügen while (start <= end) { dates.push(start.toISOString().split("T")[0]); start.setDate(start.getDate() + 1); } return dates; }).flat(); // Feiertage und Ferientage kombinieren und speichern saveHolidaysAndVacations([...holidayDates, ...vacationDates]); } else { print("Fehler beim Abrufen der Ferientage:", response.code); } }); } // Funktion zum Speichern der Feiertage und Ferientage function saveHolidaysAndVacations(dates) { Shelly.setComponentState("system", HOLIDAY_STORAGE_KEY, dates); } // Funktion zum Abrufen der gespeicherten Feiertage und Ferientage function getSavedHolidaysAndVacations() { const state = Shelly.getComponentState("system", HOLIDAY_STORAGE_KEY); return Array.isArray(state) ? state : []; } // Funktion zur Prüfung, ob heute ein Feiertag oder Ferientag ist function isHolidayOrVacation() { const today = new Date(); const todayStr = today.toISOString().split("T")[0]; // Format: "YYYY-MM-DD" const holidaysAndVacations = getSavedHolidaysAndVacations(); return 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();
-
Ähm … wo würde ich die sehen?
Wenn ich den “Play-Button“ betätige geht er sofort wieder aus. -
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
Alles anzeigen// 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(