Hallo Leute,
da mir hier im Forum schon gut geholfen wurde, möchte ich Euch das Ergebniss mal zeigen. Sicherlich von anderen schon 1000mal gemacht. Aber wer ein paar Anregungen dazu braucht, darf sich hier gerne bedienen.
Ziel ist es einen Raum zu entfeuchten. Das geht am billigsten wenn trockenere Luft als sie drinnen ist von draußen nach drinnen gepumpt wird. Mit einem Lüfter. Das geht nur über einen Vergleich der Absoluten Luftfeuchtigkeit (ALF). Die Relative Luftfeuchtigkeit (RLF) ist dafür ungeeignet, da sie temperaturabhängig ist. Der DHT22 liefert RLF und Temperatur. Aber damit kann man ALF und , wers braucht, auch den Taupunkt berechnen. Letzteren braucht man für die Lüftersteuerung nicht. Ich nutze Näherungsformeln, die aber genauer als die Sensoren sind.
Warum so viel Aufwand? Na ja. wenn auch recht selten, aber es gibt Fälle wo die Luft draußen feuchter ist als drinnen.
Aufbau: Shelly 1PM mit Addon und DHT22. Das ganze 2x. Innenshelly und Aussenshelly. Es gibt auch Bluetoothsensoren dafür. Ich habe mich aber für die 2 Shellys mit Addon entschieden, da falls ich das Projekt in die Tonne haue, dann noch 2 Shellys zum Spielen habe.
Beide Shellys laufen im gleichen Netzwerk. Wenn die Sensoren installiert sind, sollte man sie mindestens 1h nebeneinander betreiben und dann auf die gleichen Werte kalibrieren (mit dem Offset).
Auf dem Innenshelly läuft das Script. Dieses schaltet aber beide Shellys. Es kann also an beiden ein Lüfter angeschlossen werden. Der Aussenshelly ist einfach nur da und liefert die Daten von draußen.
Und hier mein Script:
let IPAussenShelly="192.168.2.55" //IP des AussenShelly, ShellyPlus mit AddOn und DHT22, liefert nur Meßdaten
let MindestInnenTemperatur=17; //unter dieser Temperatur wird nicht gelüfet, da das Zimmer sonst auskühlt
let MindestALFunterschied=2; //Mindestunterschied der ALF zwischen Innen und Aussen zum Lüften.
let InnenTemperatur=0;
let InnenRLF=0;
let InnenTaupunkt=0;
let InnenALF=0;
let AussenTemperatur=0;
let AussenRLF=0;
let AussenTaupunkt=0;
let AussenALF=0;
function InnenwerteLesen()
{Shelly.call("Shelly.GetStatus", null , function (result, error)
{
if (error==0)
{
InnenTemperatur = result["temperature:100"].tC;
InnenRLF = result["humidity:100"].rh;
InnenTaupunkt=243.12*((17.62*InnenTemperatur)/(243.12+InnenTemperatur)+Math.log(InnenRLF/100))/(((17.62*243.12)/(243.12+InnenTemperatur))-Math.log(InnenRLF/100));
InnenALF=(InnenRLF*4.85*(Math.exp(InnenTemperatur/15.5)))/100;
print("Innenemperatur: " + InnenTemperatur + " °C-------InnenRLF: " + InnenRLF + " %-------" +
"Innentaupunkt: " + InnenTaupunkt + "°C-------InnenALF: "+InnenALF+" g/m³");
return;
}
else{print("Error=" + error +" Innenshelly keine Antwort"); return;}
},);
};
function AussenwerteLesen()
{Shelly.call("HTTP.GET", {url: "http://"+IPAussenShelly+"/rpc/Shelly.GetStatus", }, function (result, error)
{
if(error==0)
{
AussenTemperatur = (JSON.parse(result.body)["temperature:100"].tC);
AussenRLF = (JSON.parse(result.body)["humidity:100"].rh);
AussenTaupunkt=243.12*((17.62*AussenTemperatur)/(243.12+AussenTemperatur)+Math.log(AussenRLF/100))/(((17.62*243.12)/(243.12+AussenTemperatur))-Math.log(AussenRLF/100));
AussenALF=(AussenRLF*4.85*(Math.exp(AussenTemperatur/15.5)))/100;
print("Aussentemperatur: " + AussenTemperatur + " °C-----AussenRLF: " + AussenRLF + " %-----" +
"Aussentaupunkt: " + AussenTaupunkt + "°C-----AussenALF: "+AussenALF+" g/m³");
return;
}
else{print("Error=" + error +" Aussenshelly keine Antwort");return; }
},)
};
//Hauptprogramm
Timer.set(10000, true, function()//Zyklische Ausführung ,t MUSS größer 10s sein da sonst zu viele Shelly.Calls geoeffnet und dieser dann einkackt.
{
InnenwerteLesen();
AussenwerteLesen();
if(AussenALF+MindestALFunterschied<InnenALF && InnenTemperatur> MindestInnenTemperatur) //Wenn AussenALF +5g/m³ kleiner ist als InnenALF UND InnenTemperatur>17°C dann Lüfer EIN
{print("Lüfter an")
Shelly.call("HTTP.GET", {url: "http://localhost/rpc/Switch.Set?id=0&on=true", }, function (result, error){} );//Innenschelly wird geschaltet
Shelly.call("HTTP.GET", {url: "http://"+IPAussenShelly+"/rpc/Switch.Set?id=0&on=true", }, function (result, error){} );//Aussenshelly wird auch geschaltet
}
else
{print("Lüfter aus")
Shelly.call("HTTP.GET", {url: "http://localhost/rpc/Switch.Set?id=0&on=false", }, function (result, error){} );//Innenschelly wird geschaltet
Shelly.call("HTTP.GET", {url: "http://"+IPAussenShelly+"/rpc/Switch.Set?id=0&on=false", }, function (result, error){} );//Aussenshelly wird auch geschaltet
};
});
Alles anzeigen
ducis