raspberry.tips
raspberry.tips - Raspberry Pi Projekte und Tutorials
Wer einen Gewölbe-Keller oder eine schlechte Bausubstanz hat wird das alte Feuchtigkeit und Schimmel Problem in den Kellerräumen kennen. Im Keller habe ich bereits einen passenden Lüfter installiert, konnte diesen aber bislang nicht effektiv automatisch steuern.
Hier kommt meine Hausautomatisierung mit dem Raspberry Pi auf Basis von FHEM mit HomeMatic Selbstbau CUL und meinen drahtlosen Luftfeuchtigkeitsmessern zum Einsatz, die vorhandene Schalter-Lösung wird um einen einfachen HomeMatic Schaltaktor ersetzt, die Steuerung des Lüfters wird anhand von Temperatur und Luftfeuchte Messungen zweier Temperatur und Luftfeuchte Sensoren realisiert einen für Außen und einen im Keller.
Die automatische Steuerung soll so ablaufen:
- Die Taupunkte über Temperatur- und Luftfeuchte-Sensoren für draußen und für den Keller berechnen
- Zu hohe Luftfeuchtigkeit herrscht dann wenn der Taupunkt weniger als 3°C unter der Temperatur im Keller liegt
- Wenn die Luftfeuchte zu hoch ist soll der Lüfter für 15 Minuten anspringen und dann nach 45 Minuten erneut prüfen
- Der Lüfter darf nur zwischen 08 und 21 Uhr laufen um das störende Brummen nachts zu vermeiden
Hardware
Neben den bereits vorhandenen Komponenten verwende ich folgende
- Einen HomeMatic Schaltaktor mit einem Kanal
- Etwas übrige Installationsleitung 3x 1,5mm² NYM-J oder 5×1,5mm² zum Verkabeln
- Eine Aufputz Abzweigdose (eine mit min 40mm höhe, in die dünnen passt der Aktor nicht)
- Einen 100mm Badlüfter, am Besten mit Rückstauklappe für den Einbau. Achtet auf das Förderungsvolumen
Wer die Sensoren für die Temperatur und Luftfeuchte nicht selbst bauen möchte kann natürlich auch die fertigen HomeMatic Komponenten verwenden und in FHEM einbinden. Diese sind natürlich etwas teurer
- HomeMatic Sensor für außen, an der Nordseite anbringen
- HomeMatic Sensor für innen, einer pro Raum
Verkabelung
Wichtig!
Arbeiten an 230V sind lebensgefährlich! Arbeitet immer mit abgeschalteter Versorgungsspannung und prüft bevor ihr startet das auch tatsächlich keine Spannung mehr anliegt. Wenn Ihr euch unsicher seit lasst die Arbeiten von einem Fachmann durchführen.
Ich habe den Aktor mit etwas doppelseitigem Klebeband in der Abzweigdose befestigt und mit 5×1,5mm NYM-J rausgeführt.
Mit dem Kabel bin ich dann in die vorhandene Aufputz Abzweigdose des Lüfters und habe wie folgt verkabelt. Besonderheit hier ist das der Lüfter neben einem Leiter Anschluss einen L1 besitzt der normalerweise mit einem Schalter zwischen L und L1 den Lüfter startet. Um den Lüfter mit dem Schaltaktor starten zu können ist die geschaltete Phase des Aktors (1) daher mit L und L1 am Lüfter verbunden.
FHEM Konfiguration
FHEM Pairing des HomeMatic Schaltaktor mit dem Selbstbau CUL
Das Pairing ist bei den Schaltaktoren leider immer sehr nervig da zum aktivieren des Pairing Modus ein Taster auf dem S1 für 4 Sekunden geschalten werden muss anstelle wie bei den anderen Geräten einfach einen kleinen Drücker am Aktor dafür vorzusehen.
Ich habe das Pairing so durchgeführt:
- Strom ausschalten
- Einen einfachen (Licht)schalter zwischen L und S1 klemmen
- In Fhem für euren CUL den Pairing Modus aktivieren (Name des Geräts ist nanoCUL)
set nanoCUL hmPairForSec 600
- Strom anschalten und Lichtschalter drücken bis die LED (Mode) anfängt zu blinken (Pairing hält nur 20 Sekunden an)
- Ein paar Minuten abwarten bis das Device in FHEM auftaucht
- Strom abschalten und Schalter demontieren
Alternativ kann das HomeMatic Gerät mit der Serien Nummer inFHEM vorangelegt werden, das erspart das versetzen in der Pairing Modus. Hat bei mir bisher leider nicht zuverlässig funktioniert.
set nanoCUL hmPairSerial ABC1234567
Nach ein paar Minuten sollte FHEM den Aktor erkannt haben.
HomeMatic Schaltaktor in FHEM einrichten
Nachdem das Pairing abgeschlossen ist solltet ihr einen neuen Raum im Hauptmenu finden (HM_CUL o.ä.), darin findet Ihr dann den Schaltaktor, mein 1 Kanal ist mit dem Namen “HM_4024BE” aufgetaucht. Ich möchte den Aktor natürlich in Keller_Lüfter umbenennen und in den Raum Keller verschieben. Daher setze ich in FHEM folgende Kommandos ab.
set HM_4024BE deviceRename Keller_Luefter attr Keller_Luefter room Keller
Ihr könnt den Lüfter nun schon über die Weboberfläche schalten, die Automatisierung folgt in den nächsten Schritten. Ich gruppiere noch aus kosmetischen Gründen und ändere das Symbol je nach Status
attr Keller_Luefter group Luefter attr Keller_Luefter devStateIcon off:vent_ventilation_level_0 on:vent_ventilation_level_3
FHEM Konfiguration – Werte für Luftfeuchte und Temperatur
Da bei mir die Temperatur und Luftfeuchte in meinem EMONCMS System über meinen Selbstbau Sensoren landen musste ich diese erst wieder aus EMONCMS in FHEM bekommen, dazu verwende ich das Modul HTTPMOD um die Daten aus meinem Online EmonCMS abzurufen, das ganze sieht so aus:
Device für Keller Luftfeuchte mit Online Abfrage aus EMONCMS, die ID am Ende der URL ist der Feed von EmonCMS:
define Keller_Luftfeuchte HTTPMOD http://xxx.de/feed/timevalue.json?apikey=xxx&id=35 300 attr Keller_Luftfeuchte userattr reading01Name reading01Regex reading02Name reading02Regex attr Keller_Luftfeuchte group Luftfeuchte attr Keller_Luftfeuchte icon temperature_humidity attr Keller_Luftfeuchte reading01Name Zeit attr Keller_Luftfeuchte reading01Regex localtime("time":"([\d]+)) attr Keller_Luftfeuchte reading02Name Luftfeuchte attr Keller_Luftfeuchte reading02Regex "value":"([\d\.]+) attr Keller_Luftfeuchte room Luftfeuchte attr Keller_Luftfeuchte stateFormat {sprintf("Luftfeuchte %.1f %", ReadingsVal($name,"Luftfeuchte",0))} attr Keller_Luftfeuchte timeout 5 attr Keller_Luftfeuchte verbose 4
Device für Keller Temperatur mit Online Abfrage aus EMONCMS, die ID am Ende der URL ist der Feed von EmonCMS:
define Keller_Temperatur HTTPMOD http://xxx.de/feed/timevalue.json?apikey=xxx&id=37 300 attr Keller_Temperatur userattr reading01Name reading01Regex reading02Name reading02Regex attr Keller_Temperatur fp_Grundriss 673,295,1, , attr Keller_Temperatur group Temperatur attr Keller_Temperatur icon temp_temperature attr Keller_Temperatur reading01Name Zeit attr Keller_Temperatur reading01Regex localtime("time":"([\d]+)) attr Keller_Temperatur reading02Name Temperatur attr Keller_Temperatur reading02Regex "value":"([\d\.]+) attr Keller_Temperatur room Temperatur attr Keller_Temperatur stateFormat {sprintf("Temperatur %.1f C", ReadingsVal($name,"Temperatur",0))} attr Keller_Temperatur timeout 5 attr Keller_Temperatur verbose 4
Um den später wichtigen Wert für den Taupunkt und somit die Entscheidung für das automatische Anschalten des Lüfters treffen zu können musste ich noch eine Änderung vornehmen. Ein FHEM Device braucht zur Berechnung des Taupunktes (dewPoint) zwei readings einmal temperature und humidity.
Das ganze passiert über ein notify, sobald sich der Wert Luftfeuchte oder der Wert Temperatur auf einem der Devices ändert werden über ein setreading für dem Device KellerTemperatur die benötigten Readings humidity und temperature mit den aktuellen Werten geschrieben.
define Keller_UpdateHumidity notify Keller_Luftfeuchte:Luftfeuchte:.* setreading Keller_Temperatur humidity $EVTPART1 define Keller_UpdateTemperatur notify Keller_Temperatur:Temperatur:.* setreading Keller_Temperatur temperature $EVTPART1
Jetzt benutzen wir das angepsrochene Modul dewpoint um für alle Geräte/Devices welche die Readings humidity und temperature besitzen den Taupunkt zu berechnen:
define dew_all dewpoint dewpoint .* temperature humidity dewpoint
Das Ganze sieht dann z.B. für meine Kellertemperatur, unter welcher ich ja extra die beiden Readings mit notify angelegt habe so aus:
FHEM Konfiguration – Lüfter automatisch steuern
Der Lüfter soll natürlich nur dann anlaufen wenn es sinnvoll und gewünscht ist, da ich nun für den Keller und draußen den Taupunkt habe kann ich berechnen und visualisieren ob lüften sinnvoll ist. Folgende Konfiguration verwende ich in den nächsten Tagen zum Testen:
- Ein Job KellerLüftungsJob, der alle 30 Minuten läuft wird definiert
- Innerhalb des Jobs lese ich mit ReadingsVal die benötigten Werte in Variablen ein (Taupunkt, Temperatur etc)
- Prüfe dann in einer IF Abfrage ob die aktuelle Zeit zwischen 7 und 21 Uhr liegt da der Lüfter nachts nicht laufen soll
- In weiteren IF Abfragen wird geprüft ob der Taupunkt außen niedriger ist als innen und überhapt gelüftet werden darf und der Lüfter noch nicht läuft
- Wenn alle Bedingungen Positiv waren wird via set Keller_Luefter on-for-timer 900 der Lüfter für 15Minuten gestartet
- Die Zeilen Log 1, “Text” erzeugen einen Eintrag in der FHEM Logdatei, Abrufbar über das Hauptmenu
Zum Einspielen in FHEM klickt ihr im Menu auf “Edit Files” > “fhem.cfg” und fügt die Konfiguration ganz unten ein, speichert dann die Konfiguration.
define KellerLueftungsJob at +*00:30:00 {\ my $taupunktAussen=ReadingsVal("Aussen_Temperatur","dewpoint","-1");;\ my $temperaturAussen=ReadingsVal("Aussen_Temperatur","Temperatur","-1");;\ my $luftfeuchteAussen=ReadingsVal("Aussen_Luftfeuchte","Luftfeuchte","-1");;\ my $taupunktKeller=ReadingsVal("Keller_Temperatur","dewpoint","-1");;\ my $temperaturKeller=ReadingsVal("Keller_Temperatur","Temperatur","-1");;\ my $luftfeuchteKeller=ReadingsVal("Keller_Luftfeuchte","Luftfeuchte","-1");;\ my $taupunktWert = $taupunktKeller - $temperaturKeller;;\ if ($hour > "07" & $hour < "21") {\ if ($taupunktAussen < $taupunktKeller) {\ if (Value("Keller_Luefter") eq "off") {\ Log 1, "Luefter an fuer 900sek";;\ fhem("\ set Keller_Luefter on-for-timer 900\ ");;\ }\ else {\ Log 1, "Luefter laueft schon, luftfeuchte zu hoch";;\ }\ }\ else {\ Log 1, "Luefter aus luftfeuchte ok";;\ fhem("\ set Keller_Luefter off\ ");;\ }\ }\ else {\ Log 1, "Luefter aus ruhige stunden";;\ fhem("\ set Keller_Luefter off\ ");;\ }\ }
Die Steuerung muss sicherlich noch auf die Umgebung optimiert werden, hierzu brauche ich aber erst mal Daten einiger Tage um entscheiden zu können. Eine Aktualisierung poste ich dann hier.
Grafiken erstellen
Taupunkt visualisieren
Natürlich möchte ich den Taupunkt noch in einer hübschen Grafik angezeigt bekommen. Hierzu erstelle ich erst mal für alle Räume einen Taupunkt-Log als Basis für die spätere Visualisierung:
define FileLog_Taupunkte FileLog ./log/Taupunkte-%Y-%m.log (Keller_Temperatur|Schlafen_Temperatur|Wohnzimmer_Temperatur|Bad_Temperatur|Aussen_Temperatur):(dewpoint).* attr FileLog_Taupunkte alias Log Taupunkte attr FileLog_Taupunkte group Logfile attr FileLog_Taupunkte logtype text attr FileLog_Taupunkte room Logfiles
Aus der Logfile definieren wir dann die SVG Grafik und schieben Sie in den Raum Keller
define SVG_FileLog_Taupunkte_1 SVG FileLog_Taupunkte:SVG_FileLog_Taupunkte_1:CURRENT attr SVG_FileLog_Taupunkte_1 room Keller
Die Definition was innerhalb der Grafik angezeigt wird ist in der Datei “SVG_FileLog_Taupunkte_1.gplot” hinterlegt, fügt am Besten meine Definition über “Edit Files” > “SVG_FileLog_Taupunkte_1.gplot” ein.
set terminal png transparent size <SIZE> crop set output '<OUT>.png' set xdata time set timefmt "%Y-%m-%d_%H:%M:%S" set xlabel " " set title '<TL>' set ytics set y2tics set grid set ylabel "Taupunkt" set y2label "Taupunkt" set title 'Taupunkte' #FileLog_Taupunkte 4:Keller_Temperatur.dewpoint\x3a:1: #FileLog_Taupunkte 4:Schlafen_Temperatur.dewpoint\x3a:1: #FileLog_Taupunkte 4:Aussen_Temperatur.dewpoint\x3a:1: #FileLog_Taupunkte 4:Bad_Temperatur.dewpoint\x3a:1: #FileLog_Taupunkte 4:Wohnzimmer_Temperatur.dewpoint\x3a:1: plot "<IN>" using 1:2 axes x1y2 title 'Keller' ls l1 lw 1 with lines,\ "<IN>" using 1:2 axes x1y2 title 'Schlafzimmer' ls l2 lw 1 with lines,\ "<IN>" using 1:2 axes x1y2 title 'Aussen' ls l3 lw 1 with lines,\ "<IN>" using 1:2 axes x1y2 title 'Bad' ls l4 lw 1 with lines,\ "<IN>" using 1:2 axes x1y2 title 'Wohnzimmer' ls l5 lw 1 with lines
Unter Umständen müsst ihr über den Raum Keller mit Klick auf “SVG_FileLog_Taupunlte_1” noch eure File-Logs / Werte ändern falls diese anders heißen.
Weitere Visualisierungen
Natürlich wollte ich, um das richtige Lüften kontrollieren zu können, noch pro Raum eine Grafik mit den Werten für Luftfeuchte, Temperatur und Taupunkt. Diese habe ich mir im Raum Taupunkte wie folgt erstellt. Beispiel Keller:
define SVG_FileLog_KellerUebersicht_1 SVG FileLog_Taupunkte:SVG_FileLog_KellerUebersicht_1:CURRENT attr SVG_FileLog_KellerUebersicht_1 room Keller
Hier die dazu passende gplot File, ich benutze Temperatur und Luftfeuchte aus den File Logs meiner Sensoren, für eure Sensoren müsst ihr noch einen FileLog anlegen und dann in den Einstellungen die Quelle ändern.
set terminal png transparent size <SIZE> crop set output '<OUT>.png' set xdata time set timefmt "%Y-%m-%d_%H:%M:%S" set xlabel " " set title 'Keller Uebersicht' set ytics set y2tics set grid set ylabel "Luftfeuchte" set y2label "Temperatur" #FileLog_Temperatur 4:Keller_Temperatur.Temperatur\x3a:1: #FileLog_Taupunkte 4:Keller_Temperatur.dewpoint\x3a:1: #FileLog_Luftfeuchte 4:Keller_Luftfeuchte.*:1: #FileLog_Keller_Luefter 4:Keller_Luefter.pct\x3a:1: plot "<IN>" using 1:2 axes x1y2 title 'Temperatur' ls l8 lw 1 with lines,\ "<IN>" using 1:2 axes x1y2 title 'Taupunkt' ls l7 lw 3 with lines,\ "<IN>" using 1:2 axes x1y1 title 'Luftfeuchte' ls l3fill lw 1 with lines,\ "<IN>" using 1:2 axes x1y1 title 'Lüfter %' ls l0fill lw 1 with lines
Raspberry Pi automatische Lüftersteuerung mit FHEM und HomeMatic
raspberry.tips