OpenHAB automatische Regeln einrichten

Aus Laub-Home Wiki

Hier eine Sammlung diverser openHAB Regeln die ich für das Einrichten von Szenen, das automatische Ausführen von Szenen, und Alarmierungen eingerichtet habe. Die hier stehenden Regeln basieren auf diesem Setup:

Sonnenschutz Szene

Die folgende Regel baut einen Szene für den Sonnenschutz im Haus. Aktiviert wird die Szene über das vorher angelegte Switch Item (hier Scene_Sonnenschutz), welches das Kommando ON (z.B. via HABPanel) bekommt. Die Aktivierung lässt dann alle Rollläden der Gruppe Rollladen_Sonnenschutz auf 25% fahren. Dann erfolgt eine Prüfung ob es zu windig für die Markise ist (kleiner 15 km/h) und ob wir überhaupt zu Hause sind (Anwesenheit Item auf ON), wenn beides zutrifft, fährt die Markise auf 100%. Sollte der Anwesenheits Switch auf OFF stehen, beschattet auch der Wohnzimmer Rolladen komplett. Sollte nichts davon zu treffen, wird der Wohnzimmer Rolladen nur ein Stück weit (85%) heruntergefahren, damit man auch noch durch die Terrassentür rein und raus laufen kann. Zu guter Letzt sagt uns Alexa noch das wir den Sonnenschutz aktiviert haben und eine Pushnachricht auf dem Handy benachrichtigt uns ebenfalls über den neuen Zustand zu Hause. Ganz am Ende stelle ich den Switch Status wieder auf OFF zurück.

Vorraussetzungen:

  1. diverse Rolladen Items (digitalSTROM, hier unter anderem RolladenWohnzimmer_PositionControl)
  2. Item Switch für Sonnenschutz (hier Scene_Sonnenschutz)
  3. Gruppe für alle Rollläden, die sofort in den Sonnenschutz Modus gehen sollen (bei mir alle außer Wohnzimmer, hier Item Rolladen_Sonnenschutz)
  4. Markisen Item (hier Item Markise_Control)
  5. Windgeschwindigkeit (entweder openweathermap oder zum Beispiel Netatmo Windmesser, hier Item openweathermap_weather_and_forecast_15ac3eed_local_current_wind_speed.state)
  6. eingerichtete openHAB Mobile App (Push Benachrichtigung)
  7. Alexa Ankündigungs Item (hier WohnzimmerEcho_Ankuendigung)

/opt/openHAB/data/openhab/conf/rules/sonnenschutz.rules

// Sonnenschutz Szene
rule "Sonnenschutz Scene"
when
  Item Scene_Sonnenschutz changed to ON
then
  Rolladen_Sonnenschutz.sendCommand(25)
  if ((openweathermap_weather_and_forecast_15ac3eed_local_current_wind_speed.state <= 15|"km/h") && (Anwesenheit.state == ON))
  {
     Markise_Control.sendCommand(100)
  }
  if (Anwesenheit.state == OFF)
  {
     RolladenWohnzimmer_PositionControl.sendCommand(18)
  }
  else
  {
     RolladenWohnzimmer_PositionControl.sendCommand(85)
  }
  WohnzimmerEcho_Ankuendigung.sendCommand("Sonnenschutz wurde aktiviert")
  sendNotification("your@myopenhabMailaddress", "Sonnenschutz wurde aktiviert")
  Scene_Sonnenschutz.postUpdate(OFF)
end

Automatischer Rollladen Sonnenschutz

Im Sommer ist es hilfreich wenn die Rollläden rechtzeitig runterfahren und so einen Sonnenschutz bilden. Ich lasse sie dazu auf 20% fahren. Eine Sonnenschutz Szene habe ich bereits eingerichtet, jetzt geht es darum diese automatisch bei Bedarf zu aktivieren:

  1. Wenn die Sonne scheint, bzw. ein Sonnensensor Wert erreicht wurde
  2. Die Temperatur schon über 18 °C ist,
  3. Der Wetter Bericht mehr als 24 °C ankündigt

Sollen die jeweiligen Rollläden in eine individuelle Position gehen. Bei Abwesenheit wird die Sonnenschutz Szene ausgeführt.

Dafür nutze ich:

/opt/openHAB/data/openhab/conf/rules/sonnenschutz.rules

var boolean ReachedOst = false
var boolean ReachedSued = false
var boolean ReachedAbwesend = false
var Timer SunOst_Timer = null
var Timer SunSued_Timer = null
var Timer SunAbwesend_Timer = null

// Automatischer Sonnenschutz
rule "Automatischer Sonnenschutz"
when
  Item Anwesenheit changed or
  Item SonnensensorOst_Luminance changed or
  Item SonnensensorSued_Luminance changed or
  Item NetatmoHomeOutdoor_Temperature changed or
  Item openweathermap_weather_and_forecast_15ac3eed_local_forecastHours06_temperature changed
then
  if ((NetatmoHomeOutdoor_Temperature.state >= 18|"°C") &&
      (openweathermap_weather_and_forecast_15ac3eed_local_forecastHours06_temperature.state >= 24|"°C"))
  {
    if ((SonnensensorOst_Luminance.state >= 55000) && 
        (SunOst_Timer == null) &&
        (Anwesenheit.state == ON))
    {
      sendNotification("andreas@laub-home.de","Auto Osten aktiviert")
      RolladenKueche_PositionControl.sendCommand(30)
      Rollladen_Kinderzimmer.sendCommand(25)
      RolladenBadDG_PositionControl.sendCommand(40)
      RolladenBadOG_PositionControl.sendCommand(40)
      RolladenEsszimmer_PositionControl.sendCommand(60)
      SunAbwesend_Timer?.cancel
      SunAbwesend_Timer = null
      SunOst_Timer = createTimer(now.plusMinutes(780), [|
        SunOst_Timer?.cancel
        SunOst_Timer = null
      ])
    }
    if ((SonnensensorSued_Luminance.state >= 45000) && 
        (SunSued_Timer == null) &&
        (Anwesenheit.state == ON))
    {
      sendNotification("andreas@laub-home.de","Auto Süden aktiviert")
      RolladenKueche_PositionControl.sendCommand(40)
      Rollladen_Kinderzimmer.sendCommand(40)
      RolladenBadDG_PositionControl.sendCommand(25)
      RolladenBadOG_PositionControl.sendCommand(25)
      RolladenEsszimmer_PositionControl.sendCommand(25)
      RolladenSchlafzimmer_PositionControl.sendCommand(30)
      SunAbwesend_Timer?.cancel
      SunAbwesend_Timer = null
      SunSued_Timer = createTimer(now.plusMinutes(780), [|
        SunSued_Timer?.cancel
        SunSued_Timer = null
      ])
    }
    if (((SonnensensorOst_Luminance.state >= 50000) || (SonnensensorSued_Luminance.state >= 50000)) && 
         (SunAbwesend_Timer == null) &&
         (Anwesenheit.state == OFF))
    {
      Scene_Sonnenschutz.sendCommand(ON)
      sendNotification("andreas@laub-home.de","Auto SonnenschutzSzene aktiviert!")
      SunOst_Timer?.cancel
      SunOst_Timer = null
      SunSued_Timer?.cancel
      SunSued_Timer = null
      SunAbwesend_Timer = createTimer(now.plusMinutes(780), [|
        SunAbwesend_Timer?.cancel
        SunAbwesend_Timer = null
      ])
    }
  }
end

Markise automatisch ausfahren

Wenn es warm draußen ist und die Sonne auf die Terrasse knallt, soll natürlich die Markise automatisch herausfahren. Die Regel sollte so aussehen:

  1. Wenn es wärmer als 22 °C ist,
  2. der Sonnensensor 55.000 LUX erreicht hat,
  3. kein Wind Stärker 15 km/h ist,
  4. Anwesenheit eingeschaltet ist

Soll die Markise ausgefahren werden.

Dafür nutze ich (ItemName):

Die Regel Markise legen wir in openHAB als Datei in openhab/conf/rules/ ab. Bei meiner Docker Installation ist die Datei hier:

/opt/openHAB/data/openhab/conf/rules/markise.rules

// Markise automatisch ausfahren
var Timer Markise_Timer = null

rule "Markise automatisch Ausfahren"
when
  Item NetatmoHomeOutdoor_Temperature changed or
  Item SonnensensorSued_Luminance changed or
  Item NetatmoWindmesser_BoenGeschwindigkeit changed or
  Item NetatmoWindmesser_Windgeschwindigkeit changed or
  Item Anwesenheit changed or
  Item openweathermap_weather_and_forecast_15ac3eed_local_current_wind_speed changed
then
  var Temp = NetatmoHomeOutdoor_Temperature.state as QuantityType<Number>
  var LuminanceSued = SonnensensorSued_Luminance.state as DecimalType
  var Wind = NetatmoWindmesser_Windgeschwindigkeit.state as QuantityType<Number>
  var Windboen = NetatmoWindmesser_BoenGeschwindigkeit.state as QuantityType<Number>
  var Windforecast = openweathermap_weather_and_forecast_15ac3eed_local_forecastHours03_wind_speed.state as QuantityType<Number>
  if ((Temp >= 22.0|"°C") && (LuminanceSued >= 55000) &&
      (Wind <= 15|"km/h") && (Windforecast <= 15|"km/h") && (Windboen <= 15|"km/h") &&
      (Markise_Timer == null) && (Anwesenheit.state == ON)) {
    Markise_Control.sendCommand(100)
    sendNotification("your@myopenhabMailAddress","Markise automatisch ausgefahren!")
    Markise_Timer = createTimer(now.plusMinutes(600), [|
      Markise_Timer?.cancel
      Markise_Timer = null
    ])
  }
end

Co2 Warnung Regel

Möchte man sich warnen lassen, das der gemessene Co2 Gehalt (Netatmo Wetterstation) zu hoch ist, kann man dies mit der folgenden Regel machen. Diese Schaltet ein Switch Item von OFF nach ON. Dieses Switch Item habe ich vorab angelegt und benutze es in HABPanel und meiner Sitemap als Alarmanzeige. Man kann Ebenfalls eine Alexa Sprachauausgabe machen und sich eine Pushnachricht aufs Handy schicken lassen.

Voraussetzungen:

  1. Eingerichtete openHAB Mobile App (für Push Benachrichtigung)
  2. Netatmo Wetterstation
  3. Alexa Ankündigungs Item (hier WohnzimmerEcho_Ankuendigung)
  4. Dummy Switch Item (hier Buero_CO2_Alarm)


/opt/openHAB/data/openhab/conf/rules/co2.rules

// Co2 Büro
rule "Büro Co2 Alarm Switch"
when
  Item NetatmoHomeBuero_CO2Gehalt changed or
  System started
then
  if (NetatmoHomeBuero_CO2Gehalt.state >= 800|ppm){
    Buero_CO2_Alarm.sendCommand(ON)
  }
  else {
    Buero_CO2_Alarm.sendCommand(OFF)
  }
end

rule "Büro Co2 Alarmierung"
when
  Item Buero_CO2_Alarm changed from OFF to ON
then
  sendNotification("your@myopenhabMailaddress", "Achtung! CO2 Gehalt im Büro zu hoch: " +NetatmoHomeBuero_CO2Gehalt.state+ "")
  if (now.getHourOfDay > 8 && now.getHourOfDay < 21) {
    WohnzimmerEcho_Ankuendigung.sendCommand("Zu hoher CO2 Gehalt im Büro. Bitte Lüften.")
  }
end

rule "Büro Co2 Entwarnung"
when
  Item Buero_CO2_Alarm changed from ON to OFF
then
  sendNotification("your@myopenhabMailaddress", "CO2 Gehalt im Büro wieder OK: " +NetatmoHomeBuero_CO2Gehalt.state+ "")
end

Luftfeuchtigkeits Warnung Regel

Möchte man sich warnen lassen, das die gemessene Luftfeuchtigkeit (Netatmo Wetterstation / Raspberry Pi Sensor) zu hoch ist, kann man dies mit der folgenden Regel machen. Diese Schaltet ein Switch Item von OFF nach ON. Dieses Switch Item habe ich vorab angelegt und benutze es in HABPanel und meiner Sitemap als Alarmanzeige. Man kann Ebenfalls eine Alexa Sprachauausgabe machen und sich eine Pushnachricht aufs Handy schicken lassen.

Voraussetzungen:

  1. Eingerichtete openHAB Mobile App (für Push Benachrichtigung)
  2. Netatmo Wetterstation
  3. Alexa Ankündigungs Item (hier WohnzimmerEcho_Ankuendigung)
  4. Dummy Switch Item (hier Buero_Humidity_Alarm)


/opt/openHAB/data/openhab/conf/rules/humidity.rules

// Humidity Büro
rule "Büro Humidity Alarm Switch"
when
  Item NetatmoHomeBuero_Luftfeuchtigkeit changed or
  System started
then
  if (NetatmoHomeBuero_Luftfeuchtigkeit.state >= 60|%){
    Buero_Humidity_Alarm.sendCommand(ON)
  }
  else {
    Buero_Humidity_Alarm.sendCommand(OFF)
  }
end

rule "Büro Humidity Alarmierung"
when
  Item Buero_Humidity_Alarm changed from OFF to ON
then
  sendNotification("your@myopenhabMailaddress", "Achtung! Luftfeuchtigkeit im Büro zu hoch: " +NetatmoHomeBuero_Luftfeuchtigkeit.state+ "")
  if (now.getHourOfDay > 8 && now.getHourOfDay < 21) {
    WohnzimmerEcho_Ankuendigung.sendCommand("Zu hohe Luftfeuchtigkeit im Büro. Bitte Lüften.")
  }
end

rule "Büro Humidity Entwarnung"
when
  Item Buero_Humidity_Alarm changed from ON to OFF
then
  sendNotification("your@myopenhabMailaddress", "Luftfeuchtigkeit im Büro wieder OK: " +NetatmoHomeBuero_Luftfeuchtigkeit.state+ "")
end

Netatmo Batterie Warnung Regel

Möchte man sich eine Warnung schicken lassen, wenn die Batterien der Netatmo Wetterstation Module sich dem Ende zu neigen, dann erstellt man eine einfache Regel, die die Netatmo Low Battery Warning Switch Items überwachen. Die untenstehende Regel prüft ob sich das Battery Warning Switch Item auf ON stellt und schickt dann eine Pushnachricht ans Handy und lässt Alexa eine Ankündigung aussprechen.

Vorraussetzungen

  1. Netatmo Wetter Station mit Modulen
  2. Battery Warning Switch Item (hier netatmo_NAModule4_e1499a1f_03000059db36_LowBattery)
  3. eingerichtete openHAB Mobile App (Push Benachrichtigung)
  4. Alexa Ankündigungs Item (hier WohnzimmerEcho_Ankuendigung)

/opt/openHAB/data/openhab/conf/rules/battery.rules

// Netatmo Batterien Büro
rule "Battery Warning Netatmo Büro"
when
  Item netatmo_NAModule4_e1499a1f_03000059db36_LowBattery changed from OFF to ON
then
  sendNotification("your@myopenhabMailaddress", "Achtung! Batterien in Netatmo Station Büro leer.")
  if (now.getHourOfDay > 8 && now.getHourOfDay < 21) {
    WohnzimmerEcho_Ankuendigung.sendCommand("Batterien in Netatmo Station Büro leer.")
  }
end

Stromverbrauch Alarm

Hat man mal wieder vergessen das Licht im Bad auszuschalten, wird man durch die folgende openHAB Regel daran erinnert. Diese Regel kontrolliert den Stromverbrauch vom Bad und Alarmiert einen, wenn der 60 Minuten lang mehr als 10 Watt verbraucht werden. Es wird eine Pushnachricht verschickt und Alexa gibt einen Hinweis aus.

Voraussetzungen:

  • Stromverbrauchsmessungs Item (hier digitalSTROM Binding, WattBadDG_Consumption_wh_label)
  • Amazon Echo als Ausgabe (hier WohnzimmerEcho_Ankuendigung)
  • OpenHab Mobile App für Push-Benachrichtigung

/opt/openHAB/data/openhab/conf/rules/power.rules

// Bad OG
rule "Stromverbrauch Alarm Bad OG"
when
  Item WattBadOG_Consumption_wh_label changed
then
  if ((WattBadOG_Consumption_wh_label.state <= 10|W) && (BadOGStrom_timer!=null)) {
    BadOGStrom_timer?.cancel
    BadOGStrom_timer = null
    BadOG_Strom_Alarm.sendCommand(OFF)
  }
  else if ((WattBadOG_Consumption_wh_label.state >= 10|W) && (BadOGStrom_timer==null)) {
    BadOGStrom_timer = createTimer(now.plusMinutes(60), [|
      sendNotification("andreas@laub-home.de", "Achtung! Stromverbrauch Bad OG. Licht prüfen!")
      WohnzimmerEcho_Ankuendigung.sendCommand("Achtung! Stromverbrauch im Bad Obergeschoss ist seit einer Stunde höher als 10 Watt. Ist das Licht vielleicht noch an?")
      BadOG_Strom_Alarm.sendCommand(ON)
    ])
  }
end

Fenster Offen Alarm

Wer kennt das nicht, gerade in den Bädern wird nach dem Duschen oder Baden gelüftet und man vergisst das Fenster wieder zuzumachen. Vor allem in der kalten Jahreszeit, wo man auch noch heizt ist dies sicherlich ärgerlich. Die folgende Regel nutzt das Item des Fenster Sensors (FensterBadDG_Contact) und prüft ob es bei unter 22°C länger als 30 Minuten offen steht. Ich nutze bei mir die Somfy slim io Sensoren welche über Somfy TaHoma Binding an openHab angebunden sind.

Vorraussetzungen:

  • Somfy TaHoma Box
  • Somfy Slim IO Sensoren
  • Somfy TaHoma Binding
  • konfiguriertes Sensor Item (hier FensterBadDG_Contact)
  • Amazon Echo als Ausgabe (hier WohnzimmerEcho_Ankuendigung)
  • OpenHab Mobile App für Push-Benachrichtigung

/opt/openHAB/data/openhab/conf/rules/window.rules

// Fenster Alarmierung
var Timer BadDGFenster_timer = null

// Bad DG
rule "Fenster Alarm Bad DG"
when
  Item FensterBadDG_Contact changed or
  Item NetatmoHomeOutdoor_Temperature changed
then
  if ((FensterBadDG_Contact.state==CLOSED) && (BadDGFenster_timer!=null)) {
    BadDGFenster_timer?.cancel
    BadDGFenster_timer = null
    BadDG_Fenster_Alarm.sendCommand(OFF)
  }
  else if ((FensterBadDG_Contact.state==OPEN) && (BadDGFenster_timer==null) && (NetatmoHomeOutdoor_Temperature.state <= 22.0|"°C")) {
    BadDGFenster_timer = createTimer(now.plusMinutes(30), [|
      sendBroadcastNotification("Achtung! Fenster Bad DG ist offen!")
      if (now.getHourOfDay > 8 && now.getHourOfDay < 21) {
        WohnzimmerEcho_Ankuendigung.sendCommand("Achtung! Dachgeschoss Badezimmerfentser ist offen!" )
      }
      BadDG_Fenster_Alarm.sendCommand(ON)
    ])
  }
end

Quellen