-
Autor
Ich habe heute die KI (Microsoft Copilot) gefragt, ob sie mir ein script über eine Temperaturdifferenz-Regelung mit zwei Boilern, einer Umwälz-Pumpe, ein Umschaltventil und 5 Temperatursensoren: Kollektor, Vor- und Rücklauf, Boiler1 und Boiler 2 schreiben kann:
Hier das Ergebnis:
// Shelly Script für Differenztemperatursteuerung mit Umschaltventil, Hysterese, Minimaltemperatur und Vor-/Rücklauftemperatur
// Konfigurationsparameter
let tempBoiler1 = 0;
let tempBoiler2 = 0;
let tempKollektor = 0;
let tempKollektorVorlauf = 0;
let tempKollektorRücklauf = 0;
let thresholdBoiler1 = 60; // Schwellenwert für Boiler 1
let hysteresis = 2; // Hysterese-Wert in Grad Celsius
let minKollektorTemp = 40; // Minimale Kollektortemperatur für Pumpenbetrieb
let minDiffTemp = 3; // Minimale Temperaturdifferenz für Pumpenbetrieb
let relayPump = 0; // Relais für die Pumpe
let relayValve = 1; // Relais für das Umschaltventil
// Funktion zum Aktualisieren der Temperaturen
function updateTemperatures() {
Shelly.call("http.get", { url: "http://shelly-ip/status" }, function (res) {
let data = JSON.parse(res.body);
tempBoiler1 = data.ext_temperature[0].tC;
tempBoiler2 = data.ext_temperature[1].tC;
tempKollektor = data.ext_temperature[2].tC;
tempKollektorVorlauf = data.ext_temperature[3].tC;
tempKollektorRücklauf = data.ext_temperature[4].tC;
});
}
// Funktion zur Steuerung der Pumpe und des Ventils
function controlSystem() {
updateTemperatures();
if (tempKollektorVorlauf >= minKollektorTemp) {
if (tempBoiler1 >= thresholdBoiler1) {
// Umschaltventil auf Boiler 2 umschalten
Shelly.call("Switch.Set", { id: relayValve, on: true });
// Temperaturvergleich zwischen Boiler 2 und Kollektorvorlauf mit Hysterese und Mindestdifferenz
if (tempKollektorVorlauf > tempBoiler2 + hysteresis && (tempKollektorVorlauf - tempBoiler2) >= minDiffTemp) {
// Pumpe einschalten
Shelly.call("Switch.Set", { id: relayPump, on: true });
} else if (tempKollektorVorlauf <= tempBoiler2) {
// Pumpe ausschalten
Shelly.call("Switch.Set", { id: relayPump, on: false });
}
} else {
// Umschaltventil auf Boiler 1 zurückschalten (Standardzustand)
Shelly.call("Switch.Set", { id: relayValve, on: false });
// Pumpe einschalten, wenn Kollektortemperatur höher ist als Boiler 1 mit Hysterese und Mindestdifferenz
if (tempKollektorVorlauf > tempBoiler1 + hysteresis && (tempKollektorVorlauf - tempBoiler1) >= minDiffTemp) {
Shelly.call("Switch.Set", { id: relayPump, on: true });
} else if (tempKollektorVorlauf <= tempBoiler1 && tempKollektorVorlauf <= tempBoiler2) {
// Pumpe ausschalten, wenn Kollektortemperatur niedriger ist als beide Boiler
Shelly.call("Switch.Set", { id: relayPump, on: false });
}
}
} else {
// Pumpe ausschalten, wenn Kollektortemperatur unter der Minimaltemperatur liegt
Shelly.call("Switch.Set", { id: relayPump, on: false });
}
}
// Intervall zur regelmäßigen Überprüfung der Temperaturen
Timer.set(60000, true, function () {
controlSystem();
});