-
Autor
Kann mir jemand sagen warum mein Skript nach 5 Loops abbricht?
uncaught error: too many running timers.
JavaScript
let waterHeatingTimes = [
{ start: "06:00", end: "07:00" },
{ start: "13:00", end: "14:00" },
{ start: "20:00", end: "21:00" }
];
function isWaterHeatingTime() {
let now = new Date();
let currentTime = now.getHours() + ":" + (now.getMinutes() < 10 ? "0" : "") + now.getMinutes();
for (let i = 0; i < waterHeatingTimes.length; i++) {
if (currentTime >= waterHeatingTimes[i].start && currentTime <= waterHeatingTimes[i].end) {
return true;
}
}
return false;
}
function mapInterval(outdoorTemp) {
let minTemp = 0; // Minimum Außentemperatur
let maxTemp = 18; // Maximum Außentemperatur
let minInterval = 15 * 60; // Minimum Intervall in Sekunden
let maxInterval = 180 * 60; // Maximum Intervall in Sekunden
let interval = ((outdoorTemp - maxTemp) / (minTemp - maxTemp)) * (minInterval - maxInterval) + maxInterval;
return Math.max(minInterval, Math.min(interval, maxInterval));
}
Timer.set(10000, true, function () {
// Werte für Außentemperatur, Rücklauftemperatur und Wassertanktemperatur auslesen
let waterTankTemp = Shelly.getComponentStatus('Temperature', 100).tC; // Warmwassertanksensor
let returnFlowTemp = Shelly.getComponentStatus('Temperature', 101).tC; // Rücklaufsensor
let outdoorTemp = Shelly.getComponentStatus('Temperature', 102).tC; // Außentemperatursensor
let heatingOn = false;
let waterHeatingOn = false;
// Warmwassertank-Heizzeiten Logik
if (isWaterHeatingTime()) {
if (waterTankTemp < 35) {
waterHeatingOn = true;
}
} else {
// Heizkreissteuerung basierend auf Außentemperatur und Rücklauftemperatur
if (outdoorTemp < 18 && returnFlowTemp < 35) {
heatingOn = true;
let interval = mapInterval(outdoorTemp);
Timer.set(interval * 1000, false, function () {
// Heizkreis ausschalten nach dem Intervall
Shelly.call("Switch.Set", { id: 0, on: false });
});
}
}
// Schalte die Heizung oder den Warmwasser-Boiler basierend auf den Zuständen an oder aus
if (waterHeatingOn) {
Shelly.call("Switch.Set", { id: 0, on: true }); // Warmwasser an
print("Warmwasser wird geheizt.");
} else if (heatingOn) {
Shelly.call("Switch.Set", { id: 0, on: true }); // Heizung an
print("Heizung läuft.");
} else {
Shelly.call("Switch.Set", { id: 0, on: false }); // Beides aus
print("Heizung und Warmwasser sind aus.");
}
});
Alles anzeigen