Aufgrund der erhöhten Luftfeuchtigkeit im Keller bin ich auf die Suche nach Lösungen zur automatischen Lüftung gegangen und recht schnell stolperte ich über Lösungen, die auf Grundlage der Taupunkte einen oder mehrere Lüfter immer dann automatisch starten, wenn es sinnvoll ist.
Grob beschrieben ist es immer dann sinnvoll, wenn in der Außenluft weniger Wasser enthalten ist, als in der Innenluft. Das beschreibt sich eigentlich auch durch die Luftfeuchtigkeit, aber hier eben in der absoluten Luftfeuchtigkeit und nicht in der relativen. Also… Kann man alles mehr oder weniger einfach hin und her rechnen.
Der Ansatz über Arduino und dort fest verbauten Sensoren fand ich zwar spannend, aber eigentlich wollte ich lieber vorhandene Sensoren verwenden und überhaupt erstmal schauen, ob der Ansatz vielversprechend ist. Den genauen Aufbau werde ich hier auch mal zeigen, wenn er denn wieder vorzeigbar ist.
Mein Test war aber recht erfolgreich und bestand grob aus 2 Lüftern an 2 Shellys, 3 Temperatur- und Luftfeuchtesensoren und Home Assistant als „intelligente“ Instanz dazwischen. Die Luftfeuchtigkeit immer Keller konnte ich damit tatsächlich signifikant senken. Da wir aktuell aber wirklich sehr intensiv in Sanierungsmaßnahmen stecken, werde ich den Aufbau und ein paar Daten eben an anderer Stelle nochmal beschreiben. An dieser Stelle dient dieser Text also primär mir selbst als Notizbuch.
Es ist noch nicht perfekt, aber folgende Sensoren habe ich in Home Assistant angelegt, damit aus den Daten der Xiaomi Temperatur- und Luftfeuchte-Sensoren entsprechend die absolute Feuchte und der Taupunkt berechnet wird. Da ich am Anfang sehr unsicher war, habe ich auch noch einen Taupunkt Delta aufgenommen. Die Berechnung ist vermutlich nicht perfekt, aber vielleicht annähernd gut genug. Hier kommt die /config/sensor.yaml:
- platform: template sensors: absolute_humidity: friendly_name: "Absolute Feuchte Keller" unit_of_measurement: "g/m^3" icon_template: mdi:water-percent-alert value_template: "{{ 1000*e**(19.016-(4064.95/(float(states('sensor.lywsd03mmc_4_temperature'))+236.25)))*100/(461.66*(float(states('sensor.lywsd03mmc_4_temperature'))+273.15)) * float(states('sensor.lywsd03mmc_4_humidity'))/100 | float }}" absolute_humidity_outdoor: friendly_name: "Absolute Feuchte Außen" unit_of_measurement: "g/m^3" icon_template: mdi:water-percent-alert value_template: "{{ 1000*e**(19.016-(4064.95/(float(states('sensor.lywsd03mmc_3_temperature'))+236.25)))*100/(461.66*(float(states('sensor.lywsd03mmc_3_temperature'))+273.15)) * float(states('sensor.lywsd03mmc_3_humidity'))/100 | float }}" absolute_humidity_indoor_oben: friendly_name: "Absolute Feuchte Oben" unit_of_measurement: "g/m^3" icon_template: mdi:water-percent-alert value_template: "{{ 1000*e**(19.016-(4064.95/(float(states('sensor.lywsd03mmc_6_temperature'))+236.25)))*100/(461.66*(float(states('sensor.lywsd03mmc_6_temperature'))+273.15)) * float(states('sensor.lywsd03mmc_6_humidity'))/100 | float }}" taupunkt_oben: friendly_name: "Taupunkt Oben" unit_of_measurement: "°C" icon_template: mdi:thermometer value_template: > {% set h = states('sensor.lywsd03mmc_6_humidity') | float %} {% set t = states('sensor.lywsd03mmc_6_temperature') | float %} {% set a = 17.625 %} {% set b = 243.04%} {{ ((b*(log(h/100)+((a*t)/(b+t)))) / (a-log(h/100)-((a*t)/(b+t)))) |float |round(1) }} taupunkt_aussen: friendly_name: "Taupunkt Außen" unit_of_measurement: "°C" icon_template: mdi:thermometer value_template: > {% set h = states('sensor.lywsd03mmc_3_humidity') | float %} {% set t = states('sensor.lywsd03mmc_3_temperature') | float %} {% set a = 17.625 %} {% set b = 243.04%} {{ ((b*(log(h/100)+((a*t)/(b+t)))) / (a-log(h/100)-((a*t)/(b+t)))) |float |round(1) }} taupunkt_keller: friendly_name: "Taupunkt Keller" unit_of_measurement: "°C" icon_template: mdi:thermometer value_template: > {% set h = states('sensor.lywsd03mmc_4_humidity') | float %} {% set t = states('sensor.lywsd03mmc_4_temperature') | float %} {% set a = 17.625 %} {% set b = 243.04%} {{ ((b*(log(h/100)+((a*t)/(b+t)))) / (a-log(h/100)-((a*t)/(b+t)))) |float |round(1) }} taupunkt_delta: friendly_name: "Taupunkt Delta" unit_of_measurement: "°C" icon_template: mdi:thermometer value_template: "{{ ( states('sensor.taupunkt_keller') | float | round(1)) - ( states('sensor.taupunkt_aussen') | float | round(1)) }}"