Hallo zusammen,
ich habe mir ein kleines Perl-Skript gehackt, um meine Lüftungsanlage bei Abwesenheit kurzzeitig auf Stufe 4 zu schalten, damit das Haus in Abwesenheit gelüftet wird.
Falls jemand Interesse an der Steuerung der Profi-Air 400 Touch hat, bitte melden. Evtl. könnte man ein entsprechendes Modul erstellen.
Hallo ds__
es wäre besser, wenn Du das ganze hier mal vorstellen würdest, dann lesen auch andere mit, die nicht umbedingt diese Anlage haben. Mit diesem Aufruf wirst Du nicht unbedingt Erfolg haben.
Gruß
Christian
Zitat von: ch.eick am 29 Juli 2019, 09:10:48
es wäre besser, wenn Du das ganze hier mal vorstellen würdest, dann lesen auch andere mit, die nicht umbedingt diese Anlage haben. Mit diesem Aufruf wirst Du nicht unbedingt Erfolg haben.
Eigentlich habe ich nicht viel gemacht.
Mittels Fritzbox und Presence stelle ich fest, ob alle das Haus verlassen haben. Falls das der Fall ist, rufe ich meine Perl-Funktion alleAbwesend() auf. Wenn jemand anwesend ist, wird lueftungNormal() aufgerufen.
Die Funktion alleAbwesend() schaltet die Lüftung für 20 Minuten auf die höchste Stufe. Hierbei gibt es allerdings ein paar Ausnahmen:
- Keine Starklüftung, wenn innerhalb der letzten 5 Stunden bereits gelüftet wurde.
- Am Abend und nachts wird keine Lüftung durchgeführt. Die Lüftung wird auf Stufe 1 geschaltet.
- Wenn eine bestimmte Außentemperatur überschritten wird, wird ebenfalls keine Lüftung durchgeführt. Die Außentemperatur lese ich aus meiner Wärmepumpe aus.
Wenn eine der genannten Ausnahmen greift, wird die Lüftung auf niedrigster Stufe gefahren.
Die Funktion lueftungNormal() schaltet die Lüftung auf Stufe 2. Bei Hitze und am Abend wird Stufe 1 gefahren. Nachts wird auf Stufe 3 geschaltet.
Das Schalten der Lüftungsanlage erfolgt über ein HTTP-Get auf http://[IP-Lüftung]/stufe.cgi?stufe=[Stufe]".
{
my $letzterLauf = 0;
sub alleAbwesend() {
my $hour = (localtime())[2];
my $aktZeit = time();
my $zeitdiff = $aktZeit -$letzterLauf;
if (!isGrosseHitze() && $hour<18 && $hour >10 && ($letzterLauf == 0 || $zeitdiff>(3600*5))) {
get("http://[IP-Lüftung]/stufe.cgi?stufe=4");
Log 1, "Alle Abwesend: Lüftung auf Stufe 4";
$letzterLauf = time();
} elsif ($zeitdiff>60*20) {
get("http://[IP-Lüftung]/stufe.cgi?stufe=1");
Log 1, "Lüftung: Stufe 1 wegen Abwesenheit";
}
}
}
sub isGrosseHitze() {
return ReadingsVal("waermepumpe", "ambientTemperature", 0)>25;
}
sub lueftungNormal() {
my $hour = (localtime())[2];
if (isGrosseHitze()) {
Log 1, "Lüftung: Stufe 1 (Hitze)";
} elsif ($hour >= 0 && $hour <8) {
get("http://[IP-Lüftung]/stufe.cgi?stufe=3");
Log 1, "Lüftung: Stufe 3";
} elsif ($hour>=19 && $hour<=23) {
get("http://[IP-Lüftung]/stufe.cgi?stufe=1");
Log 1, "Lüftung: Stufe 1";
} else {
get("http://[IP-Lüftung]/stufe.cgi?stufe=2");
Log 1, "Lüftung: Stufe 2";
}
}
Der Code ist nicht perfekt. Es gibt noch Verbesserungsmöglichkeiten.
Hallo nochmal.
Vielen Dank für den Code Einblick. Das kann ich eventuell auch für meine Vallox verwenden.
Gruß Christian
Gesendet von meinem SM-G930F mit Tapatalk