Featured image of post Rollladensteuerung mit AppDaemon: Automatisierung basierend auf Zeit und Anwesenheit

Rollladensteuerung mit AppDaemon: Automatisierung basierend auf Zeit und Anwesenheit

Ein wirklich smartes Zuhause hört nicht bei der Steuerung einzelner Geräte auf – es denkt mit. Eine durchdachte Rollladensteuerung ist ein entscheidender Baustein für mehr Komfort, Energieeffizienz und Sicherheit. Mit AppDaemon und Home Assistant wird diese Vision Realität: Die hier vorgestellte Lösung verbindet verschiedene Sensoren, um dynamisch auf Umweltbedingungen und persönliche Vorlieben zu reagieren.

Dieser Beitrag ist Teil einer Serie über Home Assistant Automatisierungen mit AppDaemon. In dieser Serie zeige ich, wie verschiedene Automatisierungsansätze implementiert werden können, von der Rollladensteuerung bis hin zur Effizienzüberwachung von Heizsystemen.

Ein wirklich smartes Zuhause hört nicht bei der Steuerung einzelner Geräte auf – es denkt mit. Eine durchdachte Rollladensteuerung ist ein entscheidender Baustein für mehr Komfort, Energieeffizienz und Sicherheit. Mit AppDaemon und Home Assistant wird diese Vision Realität: Die hier vorgestellte Lösung verbindet verschiedene Sensoren, um dynamisch auf Umweltbedingungen und persönliche Vorlieben zu reagieren.

Das System nutzt Echtzeitdaten wie Anwesenheit, Lichtverhältnisse oder den Status von Fenstern und Türen, um die Rollläden automatisch an die jeweilige Situation anzupassen. Dabei geht es weit über simple Zeitpläne hinaus und sorgt mit einer ereignisgesteuerten Logik für optimale Einstellungen – sei es zum Schutz vor direkter Sonneneinstrahlung, zur Temperaturregulierung oder für mehr Privatsphäre.

Dank flexibler Konfigurationsmöglichkeiten lässt sich die Steuerung individuell anpassen und nahtlos in jedes Smart Home integrieren. In den folgenden Abschnitten erfahren Sie, welche Sensoren benötigt werden, wie die Konfiguration abläuft und wie Sie die Steuerung Schritt für Schritt umsetzen können. Der vollständige Code steht auf GitHub Gist zur Verfügung und bietet eine solide Grundlage für eigene Anpassungen und Erweiterungen.

Benötigte Sensoren und Aktoren

Die physischen Sensoren und Aktoren bilden die Grundlage für die Automatisierung der Rollläden. Sie erfassen die Umgebungsbedingungen und setzen die Steuerungsbefehle der AppDaemon-App um. Im Folgenden werden die wichtigsten Komponenten vorgestellt.

Hinweis: Die unten aufgeführten Links sind Affiliate-Links. Beim Kauf über diese Links unterstützt du diesen Blog, ohne dass dir zusätzliche Kosten entstehen.

Fensterkontaktsensor

Fensterkontaktsensoren erfassen, ob ein Fenster oder eine Tür geöffnet ist. Diese Information wird genutzt, um das Schließen der Rollläden zu verhindern, wenn beispielsweise eine Terrassentür offen steht.

Helligkeitssensor

Helligkeitssensoren messen die Umgebungshelligkeit. Für diese Steuerung verwenden wir den Helligkeitssensor, der in Bewegungsmeldern integriert ist. Diese Daten helfen dabei, die Rollläden bei Tageslicht zu steuern.

Rollladenschalter

Rollladenschalter sind die Aktoren, die die physische Bewegung der Rollläden steuern. Diese werden von der AppDaemon-App angesteuert, um die gewünschten Aktionen (öffnen, schließen) auszuführen.

Konfiguration der App

Das folgende YAML-Beispiel zeigt die Konfiguration der AppDaemon-App. Diese definiert die relevanten Sensoren und Parameter für die Rollladensteuerung:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
cover_controller_living:
  module: cover_controller
  class: CoverController
  cover_entities:
    - cover.living  # Die zu steuernden Rollläden
  open_criteria:
    - binary_sensor.home  # Anwesenheitssensor
    - binary_sensor.daylight  # Tageslichtsensor
    - schedule.awake  # Zeitplan, der angibt, ob Bewohner wach sind
  override_position:
    - binary_sensor.not_home  # Priorisierte Überschreibung bei Abwesenheit
    - binary_sensor.daylight  # Priorisierte Überschreibung bei Tageslicht
  close_position: 40  # Prozentuale Position für das Schließen der Rollläden
  close_prevention:
    - binary_sensor.living_patiodoor  # Schließhindernis, z. B. offene Tür

Erklärung der Parameter

  • module und class: Diese geben an, welche Python-Klasse in AppDaemon verwendet wird.
  • cover_entities: Die Entitäten der Rollläden, die gesteuert werden sollen.
  • open_criteria: Kriterien, die erfüllt sein müssen, damit die Rollläden geöffnet werden. Dies können Anwesenheitssensoren, Tageslichtindikatoren oder Zeitpläne sein.
  • override_position: Sensoren, die die Logik priorisiert überschreiben können, etwa bei Abwesenheit oder besonderen Bedingungen. Im Beispiel sorgt der Sensor binary_sensor.daylight dafür, dass die Rollläden bei Tageslicht vollständig geschlossen werden. Dies ist besonders nützlich in den Sommermonaten, da die Tage länger hell sind und so eine angenehm dunkle Umgebung zum Schlafen geschaffen wird.
  • close_position: Gibt die gewünschte Position der Rollläden im geschlossenen Zustand an (z. B. 40 %). Diese Einstellung wird nur verwendet, wenn keine Überschreibung durch override_position greift.
  • close_prevention: Bedingungen, die verhindern, dass die Rollläden geschlossen werden, z. B. eine geöffnete Terrassentür.

Code-Ausschnitte Rolladensteuerung

Hier sind einige wichtige Ausschnitte aus dem Code der Rollladensteuerung, um die Funktionsweise zu verdeutlichen. Der vollständige Code ist hier verfügbar: CoverController auf GitHub Gist.

Initialisierung

In diesem Abschnitt wird die Konfiguration geladen und Event-Listener werden eingerichtet, um auf Zustandsänderungen der relevanten Sensoren zu reagieren:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
class CoverController(hass.Hass):
    def initialize(self):
        # ... more ...
      
        for entity in self.open_criteria + self.close_prevention:
            self.listen_state(self.update, entity)

        for entity in self.cover_entities:
            self.listen_state(self.cover_changed, entity)

        self.output_state = "open" if self.is_open() else "close"
        self.update()

Zustandsänderungen

Die Methode update ist das Herzstück der App. Sie prüft die aktuellen Bedingungen und entscheidet, ob die Rollläden geöffnet oder geschlossen werden sollen. Zunächst wird mithilfe der Methode is_open der gewünschte Zustand der Rollläden ermittelt. Anschließend wird dieser Zustand mit dem aktuellen Zustand verglichen. Falls der gewünschte Zustand vom aktuellen abweicht, wird die entsprechende Aktion ausgelöst (z. B. open_cover oder close_cover).

Darüber hinaus wird der Zielzustand in der Eigenschaft requested_state gespeichert, um sicherzustellen, dass die gewünschte Aktion abgeschlossen wird, bevor andere Änderungen vorgenommen werden.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
    def update(self, entity=None, attribute=None, old=None, new=None, kwargs=None):
        cover_state = "open" if self.is_open() else "close"

        if cover_state != self.output_state:
            self.output_state = cover_state
            action = "open_cover" if cover_state == "open" else "close_cover"
            self.call_service(f"cover/{action}", entity_id=self.cover_entities)
            self.requested_state = "opened" if cover_state == "open" else "closed"
        else:
            self.requested_state = None

Überprüfung der Bedingungen

Die Öffnungskriterien (open_criteria) definieren, unter welchen Bedingungen die Rollläden geöffnet werden. Dazu gehören beispielsweise Sensoren für Anwesenheit, Tageslicht oder Zeitpläne. Im Code wird mithilfe der Methode is_open geprüft, ob alle definierten Kriterien erfüllt sind.

Im obigen Beispiel (siehe Konfiguration):

  • binary_sensor.home signalisiert Anwesenheit.
  • binary_sensor.daylight prüft, ob Tageslicht verfügbar ist.
  • schedule.awake ist ein Zeitplan, der in Home Assistant definiert wurde. Dieser Zeitplan legt für jeden Wochentag Zeitspannen fest, in denen die Rollläden geöffnet sein sollen.

Die is_open-Methode kombiniert diese Kriterien mit einer Logik, um sicherzustellen, dass auch Schließhindernisse (close_prevention) berücksichtigt werden. Nur wenn alle Öffnungskriterien erfüllt sind und keine Schließhindernisse vorliegen, wird is_open True zurückgeben.

1
2
3
4
    def is_open(self):
        if all(self.get_state(entity) == "on" for entity in self.open_criteria):
            return not any(self.get_state(entity) == "on" for entity in self.close_prevention)
        return False

Fazit

Mit dieser AppDaemon-basierten Rollladensteuerung kannst du dein Smart Home noch smarter gestalten. Durch die Kombination von Sensoren und Aktoren sowie die flexible Konfiguration der Automatisierungslogik bietet diese Lösung zahlreiche Anpassungsmöglichkeiten. Egal, ob du Wert auf Komfort, Energieeffizienz oder Sicherheit legst – diese Automatisierung lässt sich individuell an deine Bedürfnisse anpassen.

Der vollständige Code steht dir zur Verfügung, sodass du die Funktionalität nach Belieben erweitern oder modifizieren kannst. Wenn du weitere Ideen oder Anpassungen umsetzen möchtest, lohnt sich ein Blick in die anderen Beiträge der Serie über Home Assistant Automatisierungen.

Erstellt mit Hugo
Theme Stack gestaltet von Jimmy