Hier ist das Skript, bei mir läuft es super:
Zusammenfassend:
Das Skript dient dazu, ein Relais basierend auf einer Temperaturdifferenz zu steuern. Dies könnte beispielsweise in einem Heizsystem verwendet werden, um eine Pumpe oder ein Ventil zu steuern, wenn die Temperaturdifferenz zwischen Vorlauf und Rücklauf einen bestimmten Wert unterschreitet.
Wichtige Punkte:
Das Skript verwendet die Shelly-spezifischen Funktionen Shelly.call() und Shelly.getComponentStatus(), um mit dem Gerät zu interagieren.
Das Skript verwendet Timer, um Funktionen in bestimmten Intervallen auszuführen.
Das Skript gibt Statusmeldungen über die Funktion print() aus.
Ich habe 3 Zahlen fett markiert die ich eventuell noch anpassen werde bzw habe.. Zum Beispiel habe ich die Wartezeit von 20 Sekunden auf 60 Sekunden erhöht.
Wichtig ist noch, dass das Relais bei mir über eine Aktion (TSolar < als 30 Grad ) eingeschalten wird und nicht üer das Skript. Das macht es mir sehr viel einfacher den Wert anzupassen.
Viel Spaß beim Testen
Grüße Jürgen
// Konfiguration
var relaisId = 0;
let TwarmSensorId = 100;
let TkaltSensorId = 103;
let schwellwertTemperaturdifferenz = 3;
let messIntervall = 2000;
// Funktion zur Überprüfung des Relaiszustands
function checkRelayState() {
Shelly.call("Switch.GetStatus", { id: relaisId }, function (result, error) {
if (error) {
print("Fehler beim Abrufen des Relaiszustands:", JSON.stringify(error));
Timer.set(messIntervall, false, checkRelayState);
return;
}
let relaisZustand = result.output;
print("Relaiszustand:", relaisZustand ? "Ein" : "Aus");
if (relaisZustand) {
print("Relais ist EIN. Warte 60 Sekunden...");
Timer.set(60000, false, measureTemperatureDifference);
} else {
print("Relais ist AUS. Überprüfung wird fortgesetzt...");
Timer.set(messIntervall, false, checkRelayState);
}
});
}
// Funktion zur Messung der Temperaturdifferenz
function measureTemperatureDifference() {
let tempTwarm = Shelly.getComponentStatus('Temperature', TwarmSensorId).tC;
let tempTkalt = Shelly.getComponentStatus('Temperature', TkaltSensorId).tC;
print("TempWarm ist:", tempTwarm, " TempKalt ist:", tempTkalt);
if (tempTwarm !== null && tempTkalt !== null) {
let temperaturDifferenz = tempTwarm - tempTkalt;
print("Temperaturdifferenz:", temperaturDifferenz, "°C");
if (temperaturDifferenz < schwellwertTemperaturdifferenz) {
print("Temperaturdifferenz unter Schwelle. Relais wird ausgeschaltet.");
Shelly.call("Switch.Set", { id: relaisId, on: false }, function () {
checkRelayState(); // Neustart der Relaisüberprüfung
});
} else {
print("Temperaturdifferenz über Schwelle. Überprüfung wird fortgesetzt...");
Timer.set(messIntervall, false, measureTemperatureDifference);
}
} else {
print("Fehler beim Abrufen der Temperaturen. Eine oder beide Werte sind null.");
Timer.set(messIntervall, false, measureTemperatureDifference);
}
}
// Skriptstart
checkRelayState();