Automatische Benachrichtigungen erhält man am einfachsten, indem man eine Szene anlegt.
In meinem Fall wird der Schaltzustand des Shelly Plus 1 überwacht.
Der Referenzwert der Taupunktberechnung ist die gemessene Temperatur am Vorlauf (Kühlkreis).
Bei Unterschreitung des Taupunkts wird der potentialfreie Kontakt getrennt und es erfolgt eine Benachrichtigung "Taupunkt unterschritten"
Bei Überschreitung des Taupunkts wird der potentialfreie Kontakt geschlossen und es erfolgt eine Benachrichtung "Taupunkt wieder erreicht".
Nun mußte ich feststellen, daß sich an das Add-on nur ein DHT22-Sensor anschließen läßt. Es können dann keine zusätzlichen DS18B20-Temperaturfühler angebracht werden.
Also habe ich einen weiteren Shelly Plus 1 mit Add-on gekauft und den Temperaturfühler für den Vorlauf der Fußbodenheizung dort angeschlossen.
Die Abfrage des Temperaturwerts erfolgt nun über eine http-Abfrage.
Bei meiner Viessmann-Wärmepumpe kann ich den Shelly über den potentialfreien Kontakt mit dem Steckplatz F11 verbinden und so den Feuchteanbauschalter (Taupunktschalter) ersetzen.
So schaltet die Kühlung bei Unterschreiten des Taupunkts ab.
Leicht modifiziert kann man damit z.B. auch eine Belüftung des Kellers steuern, dann ist die Temperatur der kalten Wand die Referenztemperatur.
Das Skript sieht jetzt so aus:
function Loop(){
Shelly.call(
"HTTP.GET",
{
url: "http://192.168.XXX.XXX/rpc/Temperature.GetStatus?id=100"
}, // Abfrage der Referenztemperatur am zusätzlichen Shelly, hier am Vorlauf des Kühlkreises
function(result, error_code, error_message) {
if (error_code !== 0) {
print('Error');
} else {
let jsonData = JSON.parse(result.body);
let RefDewPoint= jsonData.tC;
//Berechnung des Taupunkts
let a = 17.27; // Konstante für die Magnus-Formel
let b = 237.7; // Temperaturkonstante in der Magnus-Formel
function calculateDewPoint(t, rh) {
// Berechnung des Sättigungsdampfdrucks
let gamma = (a * t) / (b + t) + Math.log(rh / 100.0);
// Berechnung des Taupunkts basierend auf dem Sättigungsdampfdruck
let dp = (b * gamma) / (a - gamma);
return dp;
}
// Abfrage Raumtemperatur und Luftfeuchtigkeit, daraus Berechnung des Taupunkts
let temp= Shelly.getComponentStatus('Temperature', 100).tC;
let humidity= Shelly.getComponentStatus('Humidity', 100).rh;
let dewPoint = calculateDewPoint(temp, humidity);
print("Temperatur: ", temp, "°C");
print("Luftfeuchtigkeit: ", humidity, "%");
print("Taupunkt: ", dewPoint.toFixed(2), "°C");
print("Vorlauftemperatur(°C):", RefDewPoint);
// Schaltersteuerung anhand der Referenztemperatur/Vorlauftemperatur
if(RefDewPoint<= dewPoint) {
//Ausschalten des Shelly-Ausgangs wenn Taupunkt unterschritten
Shelly.call("switch.set", {id:0, on:false});
}
if(RefDewPoint> dewPoint) {
//Einschalten des Shelly-Ausgangs wenn Taupunt überschritten
Shelly.call("switch.set", {id:0, on:true});
}
}
}
);
}
Timer.set(20000,true,Loop);
Alles anzeigen
Wenn hier jemand noch etwas ergänzen oder verbesssern möchte - bitte gerne.
Wie gesagt: an Programmierkenntnissen mangelt es mir.