Hinweis ob sich Lüften lohnt oder nicht

Hallo zusammen,

ich möchte gerne über HA einen Hinweis haben, ob sich anhand der absoluten Luftfeuchte außen das Lüften in der Waschküche im Keller lohnt.

Für die Außentemperatur und relative Luftfeuchte würde ich Sensoren vom Deutschen Wetterdienst nehmen, für innen habe ich im ersten Schritt einen oder zwei von Sonoff.

Mit diesen beiden Wertepaaren könnte ich die absolute Feuchte für innen und außen berechnen und wenn die absolute Feuchte draußen geringer ist, dann würde sich das Lüften zunächst lohnen.

Dann müsste irgendwo in HA ein Statusfeld grün aufleuchten.

(Im ersten Schritt vernachlässige ich die kühleren Außenwände, hier müsste eine zusätzliche Info kommen, ob hier mit Tauwasserausfall zu rechnen ist. Aber wie gesagt, das kommt später).

Ich wüsste wohl, wie ich z.B. in Python die Berechnung und den Vergleich der absoluten Feuchte erfassen kann, ich weiß aber überhaupt nicht, wie ich das in HA umsetzen soll.

Kann mir jemand auf die Sprünge helfen?

VG

Christian

So oder ähnlich würde die Berechnung/Vergleich in Python aussehen:

def absolute_humidity(T, rh_percent):
    es = 6.112 * math.exp((17.67 * T) / (T + 243.5))
    phi = rh_percent / 100.0
    return (es * phi * 216.7) / (T + 273.15)  # g/m³

T_aussen, rh_aussen = 10, 70
T_keller, rh_keller = 18, 75

ah_aussen = absolute_humidity(T_aussen, rh_aussen)
ah_keller = absolute_humidity(T_keller, rh_keller)

lueften = ah_aussen < ah_keller

Sowas ähnliches habe ich mal hier zusammen gestellt:

Gruß Osorkon

1 „Gefällt mir“

Hi,

der „Standard Weg“ wäre über die configuration.yaml oder unter Helfer einen template Sensor („eigene Entity“) erstellen.

Das könnte dann so aussehen mit einem template Sensor (Jinja2)

  • e ist in HA definiert
  • Sensor-Namen musst du anpassen!
template:
  - sensor:
      - name: "Absolute Feuchte Außen"
        unit_of_measurement: "g/m³"
        state: >
          {% set T = states('sensor.aussentemperatur') | float %}
          {% set rh = states('sensor.aussenfeuchte') | float %}
          {% set es = 6.112 * e ** ((17.67 * T) / (T + 243.5)) %}
          {% set phi = rh / 100 %}
          {{ ((es * phi * 216.7) / (T + 273.15)) | round(2) }}

      - name: "Absolute Feuchte Keller"
        unit_of_measurement: "g/m³"
        state: >
          {% set T = states('sensor.keller_temperatur') | float %}
          {% set rh = states('sensor.keller_feuchte') | float %}
          {% set es = 6.112 * e ** ((17.67 * T) / (T + 243.5)) %}
          {% set phi = rh / 100 %}
          {{ ((es * phi * 216.7) / (T + 273.15)) | round(2) }}

Als Nächstes könntest du mit einem weiteren Template Sensor die beiden Werte vergleichen und unterschiedlich reagieren.

      - name: "Lüften Keller sinnvoll"
        state: >
          {% set aussen = states('sensor.absolute_feuchte_aussen') | float %}
          {% set innen = states('sensor.absolute_feuchte_keller') | float %}
          {{ aussen < innen }}

Ergebnis: true = Lüften empfohlen

Das machen wir zum Schluss im Dashboard → wenn true, dann state „grün“

Frage:

configuration.yaml ist bekannt → FileEditor?

1 „Gefällt mir“

Schimmel-Sensor als Helfer erstellen: +Helfer erstellen - Schimmelindikator … oder

https://github.com/KadenThomp36/air-quality-cardhttps://github.com/KadenThomp36/air-quality-card

1 „Gefällt mir“

Ich meine ich hätte meine Funktion damals im Thread mit der Dashboardvorstellung gepostet. Nun finde ich den Thread aber auf die Schnelle nicht…

1 „Gefällt mir“

Hallo,

configuration.yaml ist mir ein Begriff, der File Editor ist installiert.

Der Code würde dann so mit den angepassten Namen in die configuration.yaml geschrieben?

Frage zum zweiten Teil des Codes:
Wo werden die Namen der Sensoren definiert? z.B. ('sensor.absolute_feuchte_aussen')

in meinem Fall sähe das so aus:

template:
  - sensor:
      - name: "Absolute Feuchte Außen"
        unit_of_measurement: "g/m³"
        state: >
          {% set T = states(sensor.sm3b_aussentemperatur) | float %}
          {% set rh = states(sensor.buchholz_i_d_nordh_relative_humidity) | float %}
          {% set es = 6.112 * e ** ((17.67 * T) / (T + 243.5)) %}
          {% set phi = rh / 100 %}
          {{ ((es * phi * 216.7) / (T + 273.15)) | round(2) }}

      - name: "Absolute Feuchte Keller"
        unit_of_measurement: "g/m³"
        state: >
          {% set T = states(sensor.temphumi_sonoff_01_temperature) | float %}
          {% set rh = states(sensor.temphumi_sonoff_01_humidity) | float %}
          {% set es = 6.112 * e ** ((17.67 * T) / (T + 243.5)) %}
          {% set phi = rh / 100 %}
          {{ ((es * phi * 216.7) / (T + 273.15)) | round(2) }}

      - name: "Lüften Keller sinnvoll"
        state: >
          {% set aussen = states('sensor.absolute_feuchte_aussen') | float %}
          {% set innen = states('sensor.absolute_feuchte_keller') | float %}
          {{ aussen < innen }}

Hier ist er:

Genau so habe ich es mir im Ergebnis auf dem Dashboard vorgestellt.

Alternativ kann man auch die Custom-Integration “Thermal Comfort” benutzen: GitHub - dolezsa/thermal_comfort: Thermal Comfort sensor for HA (absolute humidity, heat index, dew point, thermal perception) · GitHub

Die berechnet einem u.A. auch die absolute Luftfeuchte (und noch viele andere Werte wenn man möchte). Das spart einem die Template-Sensoren und ist wirklich schnell eingerichtet. Die nutze ich schon seit über einem Jahr für “Lüftungsunterstützung”.

5 „Gefällt mir“

Davon würde ich abraten und einen eigenen Sensor empfehlen. Lokal kann es zu erheblichen Abweichungen gegenüber eines errechneten Wert kommen.

2 „Gefällt mir“

Stimme dir zu. Für den Anfang würde ich aber diese Werte nehmen bis dann ein lokaler Outdoor Sensor ins Spiel kommt.

Hat folgendermaßen geklappt:

Über die configurations.yaml habe ich mit ‘include’ eine ventilations.yaml eingebunden. Deren Inhalt sieht folgendermaßen aus:

sensor:
  - unique_id: "absolute_humidity_outside"
    name: "Absolute Feuchte Außen"
    unit_of_measurement: "g/m³"
    state: >
      {% set T = states('sensor.sm3b_aussentemperatur') | float %}
      {% set rh = states('sensor.buchholz_i_d_nordh_relative_humidity') | float %}
      {% set es = 6.112 * e ** ((17.67 * T) / (T + 243.5)) %}
      {% set phi = rh / 100 %}
      {{ ((es * phi * 216.7) / (T + 273.15)) | round(2) }}
  - unique_id: "absolute_humidity_basement"
    name: "Absolute Feuchte Keller"
    unit_of_measurement: "g/m³"
    state: >
      {% set T = states('sensor.temphumi_sonoff_01_temperature') | float %}
      {% set rh = states('sensor.temphumi_sonoff_01_humidity') | float %}
      {% set es = 6.112 * e ** ((17.67 * T) / (T + 243.5)) %}
      {% set phi = rh / 100 %}
      {{ ((es * phi * 216.7) / (T + 273.15)) | round(2) }}
  - unique_id: "ventilate_basement"
    name: "Lüften Keller sinnvoll"
    state: >
      {% set aussen = states('sensor.absolute_feuchte_aussen') | float %}
      {% set innen = states('sensor.absolute_feuchte_keller') | float %}
      {{ aussen < innen }}

(Das mit unique_id hätte ich mir sparen können.)

Mit drei Mushroom Entity Karten sehe ich nun folgendes:

Noch nicht perfekt. Aber der Weg ist mir nun klar. Nächster Schritt wird sein:

  1. Die Gefahr des Tauwasserausfalls auf den Wänden zu ermitteln
  2. Ein besserer Außensensor
  3. Die Karten gefälliger gestalten
  4. Eine automatische Zuluftsteuerung mit Ventilatoren und Lüftungsrohren entwerfen… :smiley:
2 „Gefällt mir“

Vielleicht wäre das interessant für dich.
Du kannst dir für die Übersichtlichkeit zusätzliche Order/file.yaml erstellen. Du musst dann nur in der configuration.yaml darauf verweisen


In dem Beispiel wäre das auf den Ordner „0_UserData“

1 „Gefällt mir“

Moin Osorkon,

kurze Rückfrage:
Du hast in Deinem Makro aus dem verlinkten Beitrag ja bereits die Formel für den Taupunkt in Zeile 25 berücksichtigt mit:

{% set td = ((b*v) / (a-v)) | round(2) %} {## Taupunkttemperatur (°C) ##}

Wie muss ich das Makro bzw. die Datei ‘klima.jinja’ anpassen, um den Taupunkt als Rückgabewert zu erhalten?

VG
Christian

Das template berechnet ja beides.
Taupunkt = td
absolute Feuchte = af

Für Taupunkt, verwendest Du diese Zeile:

{{td}} 

Und für die absolute Feuchte diese:

{{af}}

Gruß Osorkon

1 „Gefällt mir“

Hab es so gelöst:

{% macro klima_entity(temperature, humidity, output='absf') %}
{## alles wie gehabt ##}
{% if output == 'taup' %}
{{ td }}
{% else %}
{{ af }}
{%- endif %}

Die Abfrage dann so:

  {% from 'klima.jinja' import klima_entity %} {{
  klima_entity('sensor.buchholz_i_d_nordh_temperature',
  'sensor.buchholz_i_d_nordh_relative_humidity',output='taup' ) }}

Ich habe das ähnlich gelöst, auch mit abfrage der Sensoren und ob die Luftfeuchtigkeit draußen höher ist als drinnen.

alias: Lüften – intelligente Empfehlung
triggers:

trigger: numeric_state
entity_id:

sensor.bad_display_luftfeuchtigkeit

sensor.temperatur_schlafzimmer_humidity

sensor.temp_kuche_luftfeuchtigkeit

sensor.temp_ankleidezimmer_luftfeuchtigkeit

sensor.wohnzimmer_display_luftfeuchtigkeit
above: 65
for: “00:05:00”

trigger: numeric_state
entity_id: sensor.innenmodul_kohlendioxid
above: 1200
for: “00:05:00”

trigger: numeric_state
entity_id:

sensor.vindstyrka_pm25

sensor.vindstyrka_2_pm25
above: 25
for: “00:05:00”

trigger: numeric_state
entity_id:

sensor.vindstyrka_voc_index

sensor.vindstyrka_2_voc_index
above: 200
for: “00:05:00”
conditions:

condition: time
after: “08:00:00”
before: “23:00:00”

condition: state
entity_id: input_boolean.luften_erinnerung_aktiv
state: “off”

condition: template
value_template: |
{{ states(‘sensor.aussenmodul_luftfeuchtigkeit’) | float(0)
+ 5 <
states(trigger.entity_id) | float(0) }}

condition: template
value_template: >
{{ states(‘sensor.regenmesser_niederschlagsmenge_heute’) | float(0) == 0
}}
actions:

variables:
raum: >
{% if trigger.entity_id == ‘sensor.bad_display_luftfeuchtigkeit’ %}
Badezimmer
{% elif trigger.entity_id == ‘sensor.temperatur_schlafzimmer_humidity’
%}
Schlafzimmer
{% elif trigger.entity_id == ‘sensor.temp_kuche_luftfeuchtigkeit’ %}
Küche
{% elif trigger.entity_id ==
‘sensor.temp_ankleidezimmer_luftfeuchtigkeit’ %}
Ankleidezimmer
{% else %}
Wohnzimmer
{% endif %}

data:
chat_id: 5800968189
message: >
🌬 Lüften empfohlen im {{ raum }}. Innen: {{ states(trigger.entity_id)
}} Außen: {{ states(‘sensor.aussenmodul_luftfeuchtigkeit’) }}
action: telegram_bot.send_message

data:
message: |
Die Luft im {{ raum }} ist schlecht. Lüften ist jetzt sinnvoll.
action: notify.alexa_media_andreas_echo_show

target:
entity_id: input_boolean.luften_erinnerung_aktiv
action: input_boolean.turn_on
mode: single


Ich empfehle auch GitHub - dolezsa/thermal_comfort: Thermal Comfort sensor for HA (absolute humidity, heat index, dew point, thermal perception) · GitHub und sehe keinen Grund das selber fehlerträchtig zu implementieren.

Bei der Entscheidung Lüften ja/nein sollte man auch die Aussentemperatur berücksichtigen; ich schalte meine Taupunkt-Kellerlüftung nur bei zweistelligen Temperaturen ein um nicht alles auszukühlen.

1 „Gefällt mir“