Eiko Wagenknecht
Softwareentwickler, Freiberufler & Gründer

Lüftungsanlage anhand des CO2-Wertes mit openHAB steuern

Eiko Wagenknecht

In diesem Artikel zeige ich, wie du mit openHAB eine Lüftungsanlage automatisch basierend auf dem CO2-Wert im Raum steuern kannst. Als Hardware verwende ich die Maico Push/Pull 45 Lüftungsanlage und einen Netatmo CO2-Sensor, aber die Prinzipien lassen sich problemlos auf andere Systeme übertragen.

Inhaltsverzeichnis

Version

Zum Zeitpunkt der Veröffentlichung dieses Artikels war openHAB 3.0.1 aktuell. Bei neueren Versionen könnten sich Details geändert haben. Hinterlasse gerne einen Kommentar, falls du Anpassungen für neuere Versionen kennst - ich aktualisiere dann diesen Artikel.

Verwendetes Material

Das beschriebene Konzept funktioniert auch mit anderen Lüftungsgeräten, die an openHAB angebunden werden können, oder mit anderen CO2-Sensoren.

Vorbedingungen

Voraussetzung ist, dass sowohl die Lüftungsanlage als auch der CO2-Sensor bereits in openHAB eingebunden sind. In meinem Fall habe ich die Lüftungsanlage über die Homematic CCU3 angebunden, da ich Homematic schon länger als openHAB nutze. Die Einrichtung dieser Verbindung ist relativ komplex und in einem separaten Artikel beschrieben. Die Homematic-Zentrale ist über das Homematic Binding mit openHAB verbunden. Die Netatmo-Sensoren sind direkt über das Netatmo Binding in openHAB eingebunden.

Items

Für die Steuerung der Anlage stehen bei mir folgende Items zur Verfügung:

Lüftungsanlage:

Group    e_EG_Buero_Lueftung                     "Lüftungsanlage"                (r_EG_Buero)                ["Fan"]
Number    EG_Buero_Lueftung_Stufe_Ist             "Aktuelle Stufe [%d]"           (e_EG_Buero_Lueftung)       ["Measurement"]     { channel="homematic:GATEWAY-EXTRAS-CCU3:ccu3:GWE00000000:1#Lueftung-BueroSchlafzimmer-Ist" }
Number    EG_Buero_Lueftung_Stufe_Soll            "Eingestellte Stufe [%d]"       (e_EG_Buero_Lueftung)       ["Control"]         { channel="homematic:GATEWAY-EXTRAS-CCU3:ccu3:GWE00000000:1#Lueftung-BueroSchlafzimmer-Soll" }
Dimmer    EG_Buero_Lueftung_Stufe_Soll_Prozent    "Eingestellte Stufe [%d %%]"                                                    { ga="Fan" [ name="Büro Lüfter", speeds="0=aus:null,20=eins,40=default:zwei,60=drei,80=vier,100=maximal:fuenf", lang="de", ordered=true ] }
Switch    EG_Buero_Lueftung_Automatik             "Automatikmodus (CO2)"          (e_EG_Buero_Lueftung)       ["Switch"]

Netatmo:

Group                    e_EG_Buero_Netatmo                                  "Netatmo"                                  (r_EG_Buero)                                                    ["Sensor"]
Number:Dimensionless    EG_Buero_Netatmo_CO2                                "CO2 Gehalt [%.0f ppm]"                        (e_EG_Buero_Netatmo, u_Persist_Change)                          ["Measurement", "CO2"]          { channel="netatmo:NAModule4:api:*****:Co2" }
Number:Temperature      EG_Buero_Netatmo_Temperatur                         "Temperatur [%.1f °C]"                     (e_EG_Buero_Netatmo, u_Persist_Change)                          ["Measurement", "Temperature"]  { channel="netatmo:NAModule4:api:*****:Temperature" }
Number:Dimensionless    EG_Buero_Netatmo_Luftfeuchtigkeit                   "Luftfeuchtigkeit [%.0f rF]"                  (e_EG_Buero_Netatmo, u_Persist_Change)                          ["Measurement", "Humidity"]     { channel="netatmo:NAModule4:api:*****:Humidity" }

Für die eigentliche Steuerung werden nur EG_Buero_Lueftung_Stufe_Soll, EG_Buero_Lueftung_Automatik und EG_Buero_Netatmo_CO2 benötigt. Die anderen Items sind nur der Vollständigkeit halber aufgeführt.

Regeln

Nach einigem Nachdenken habe ich folgende Steuerungslogik entwickelt:

In openHAB habe ich dies mit folgenden Regeln umgesetzt:

Aktivieren/Deaktivieren des Automatikmodus

rule "Lüftung - deaktivieren - Büro/Schlafzimmer"

when
  Item EG_Buero_Fenster_Offen changed or
  Item System_Variable_Schlafmodus changed

then
  logDebug("co2", "Führe Regel 'Lüftung (de)aktivieren Büro/Schlafzimmer' aus.")
  if (EG_Buero_Fenster_Offen.state == CLOSED && System_Variable_Schlafmodus.state == OFF) {
    logInfo("co2", "Lüftungsanlage Büro/Schlafzimmer wird in den Automatikmodus geschaltet.")
    EG_Buero_Lueftung_Automatik.sendCommand(ON)
  } else {
    logInfo("co2", "Lüftungsanlage Büro/Schlafzimmer wird ausgeschaltet.")
    EG_Buero_Lueftung_Automatik.sendCommand(OFF)
    EG_Buero_Lueftung_Stufe_Soll.sendCommand(0)
  }
end

Steuerung anhand des aktuellen CO2-Wertes

rule "Lüftung - An CO2 Wert anpassen - Büro/Schlafzimmer"

when
  Time cron "0 0/5 * * * ?"  // every 5 minutes

then
  logDebug("co2", "Führe Regel 'CO2 Büro/Schlafzimmer' aus.")
  if (EG_Kueche_Lueftung_Automatik.state != ON || EG_Wohnen_Lueftung_Automatik.state != ON) {
    logDebug("co2", "Automatik Modus für Küche/Wohnzimmer deaktiviert. Keine Aktion.")
    return
  }

  val minLevel = 1
  val maxLevel = 4
  val setPointLow = 700
  val setPointHigh = 900
  val currentValue = (EG_Buero_Netatmo_CO2.state as Number).intValue
  val currentLevel = (EG_Buero_Lueftung_Stufe_Soll.state as Number).intValue

  logDebug("co2", "CO2 gehalt aktuell:" + currentValue)
  logDebug("co2", "Zielwert (low):" + setPointLow)
  logDebug("co2", "Zielwert (high):" + setPointHigh)
  if (currentValue < setPointLow) {
    if (currentLevel > minLevel) {
      logDebug("co2", "CO2 Wert unter Zielwert, reduziere Lüftungsstufe.")
      EG_Buero_Lueftung_Stufe_Soll.sendCommand(currentLevel - 1)
    } else {
      logDebug("co2", "CO2 Wert unter Zielwert, Level aber bereits auf Minimum. Keine Aktion.")
    }
  } else if (currentValue > setPointHigh) {
    if (currentLevel < maxLevel) {
      logDebug("co2", "CO2 Wert über Zielwert, erhöhe Lüftungsstufe.")
      EG_Buero_Lueftung_Stufe_Soll.sendCommand(currentLevel + 1)
    } else {
      logDebug("co2", "CO2 Wert über Zielwert, Level aber bereits auf Maximum. Keine Aktion.")
    }
  }
end

Schlusswort

Ich freue mich über deine Kommentare, ob dir dieser Beitrag weitergeholfen hat. Schreib gerne, wenn du Fragen hast oder etwas unklar geblieben ist. Ich bin auch gespannt, welche weiteren Automatisierungs-Projekte du damit umsetzen konntest!

Keine Kommentare? Kein Problem.

Dieser Blog unterstützt keine Kommentare, aber deine Gedanken und Fragen sind immer willkommen. Du erreichst mich mich über die Kontaktdaten im Footer unten.

Unterstützung

Wenn diese Seite für dich hilfreich war und du dich bei mir bedanken möchtest, dann freue ich mich ganz außerordentlich darüber, wenn du für deinen nächsten Einkauf bei amazon.de über diesen Link gehst. Ich bekomme dann eine kleine Provision, für dich kostet es keinen Cent extra. Wenn du mich lieber anders unterstützen möchtest, findest du hier weitere Möglichkeiten.