Ikea Smart Blinds mit dem Conbee 2 in Homeassistant nutzen

Ikea Smart Blinds mit dem Conbee 2 in Homeassistant nutzen

UPDATE:
Mittlerweile gibt es in HACS zwei nützliche Custom-Cards für Lovelace, die speziell für den Einsatz mit einem Rollo entwickelt wurden:

1. hass-shutter-card
2. cover-control-button-row

Seit einigen Monaten bietet Ikea zwei Modelle für Smarte Rollos an, die über ZigBee kommunizieren. Zur Auswahl stehen das lichtundurchlässige Modell Fyrtur und das lediglich abdunkelnde Kadrilj.
Im Lieferumfang der beiden Modelles sind ein Zigbee Repeater und eine Fernbedienung enthalten. Diese können mittels Conbee 2 in Homeassistant eingebunden werden.

Tipp: Wer bei der Rollomonatge keine Lust auf das Setzen von Bohrungen hat, kann die smarten Rollos mittels dem Montageset Klamby direkt am Fenster anbringen. Hierfür wird lediglich ein Kreuzschlitz-Schraubendreher benötigt.

Pairing des Rollos mit Deconz

Das Rollo kann in der Deconz UI als Licht eingebunden werden und erscheint danach in Homeassistant als Cover mit den entsprechenden Services.
Zum Pairen müssen beide Buttons auf dem Rollo gedrückt gehalten werden. Anschließend wird das Rollo in die Nähe des Conbee 2 geführt und und der Pairingprozess in der Deconz UI gestartet.

Ausfahrlänge des Rollos einstellen

Das Rollo kann mittels der zwei darauf befindlichen Buttons auf die gewünscht Ausfahrlänge eingestellt werden. Ist die gewünschte Länge erreicht, muss zweimal der untere Button gedrückt werden. Das Rollo merkt sich fortan die maximale Ausfahrlänge.

Pairen der Fernbedienung

Dieser Vorgang erschloss sich mir nicht gänzlich, wurde aber gemeistert. Die Fernbedienung muss dazu aufgeschraubt und die Batterie eingesetzt werden. Im Aufgeschraubten Zustand ist der Pairing Button erreichbar. Da alle Fernbedienung von Ikea im Lieferzustand bereits mit dem Rollo gepaired sind, muss die Fernbedienung zunächst auf Werkszustand gesetzt werden, damit sie in Deconz nutzbar ist. Dazu muss in der Deconz UI das Pairing für einen Sensor aktiviert werden. Anschließend muss der Button der Fernbedienung 4 mal innerhalb von 5 Sekunden gedrückt werden. Die eingebaute LED leuchtet dann pulsierend rot.

Aufgemerkt: Die Fernbedienung erscheint nach dem erfolgreichen Pairing aus unerfindlichen Gründen nicht in der Deconz UI. Sie sendet jedoch ihre Event Codes auf dem Event Bus von Homeassistant. Diese sind einsehbar, wenn man unter Developer Tools > Events das Thema deconz_event abonniert.Die Event Codes lauten wie folgt:

Die Eventcodes lauten wie folgend:

  • 1002/2002 für einen einfachen Klick
  • 1003/2003 für einen gedrückt gehaltenen Klick

Ein Beispiel hierzu:

{
    "event_type": "deconz_event",
    "data": {
        "id": "tradfri_open_close_remote",
        "unique_id": "00:0d:6f:ff:fe:9c:10:dc",
        "event": 1003
    },
    "origin": "LOCAL",
    "time_fired": "2019-12-28T16:08:17.654900+00:00",
    "context": {
        "id": "13538a1b39b048d989f7d5cc0fc588e2",
        "parent_id": null,
        "user_id": null
    }
}

Automationen für das Rollo mittels Slider in Homeassistant

Im folgenden Beispiel kann das Rollo mittels eines Sliders in der UI von Homeassistant gesteuert werden:

Input_Number Slider anlegen:

rollo_schlafzimmer:
  name: Rollo Schlafzimmer
  unit_of_measurement: "%"
  icon: mdi:blinds
  min: 0
  max: 100
  step: 10

Der Slider hat einen Bereich von 0 bis 100 und iteriert diesen in 10er-Schritten. 100 bedeutet, dass das Rollo komplett eingefahren ist. Der Wert 0 bedeutet analog einen voll ausgefahrenen Zustand.

Automation anlegen:

- alias: Rollo Schlafzimmer
  initial_state: True
  trigger:
    - platform: state
      entity_id: input_number.rollo_schlafzimmer
  action:
    - service: cover.set_cover_position
      data_template:
        entity_id: cover.rollo_schlafzimmer
        position: "{{ trigger.to_state.state | int }}"

Template Sensor für aktuelle Position

Die aktuelle Position des Rollos kann mit einem Template Sensor ausgelesen werden:

- platform: template
  sensors:
    rollo_schlafzimmer_open_percent:
      value_template: '{{ states.cover.rollo_schlafzimmer.attributes.current_position }}'
      friendly_name: 'Geöffnet'
      unit_of_measurement: "%"
      icon_template: >-
        {% if states('sensor.rollo_schlafzimmer_open_percent') | int < 50 %}
          mdi:blinds
        {% else %}
          mdi:blinds-open
        {% endif %}

Appdaemon App für Fernbedienung

Um die Fernbedienung mit dem Rollo nutzen zu können, kann auf AppDaemon zurückgegriffen werden.
Als erstes wird in der Datei config/appdaemon/apps/apps.yaml folgender Eintrag hinzugefügt:

rollo_schlafzimmer:
  module: rollo_schlafzimmer
  class: RolloRemote
  event: deconz_event
  id: tradfri_open_close_remote
  rollo: cover.rollo_schlafzimmer

In dieser Datei muss entsprechend die id und der name des Rollos in Deconz angepasst werden. Anschließend muss eine neue Datei im Verzeichnis config/appdaemon/apps/ angelegt werden. In diesem Beispiel lautet der Dateiname rollo_schlafzimmer.py und der volle Pfad config/appdaemon/apps/rollo_schlafzimmer.py. In diese Datei kommt folgender Inhalt:

import appdaemon.plugins.hass.hassapi as hass

class RolloRemote(hass.Hass):

    def initialize(self):
        if 'event' in self.args:
            self.listen_event(self.handle_event, self.args['event'])

    def handle_event(self, event_name, data, kwargs):
        CurrentCoverPosition = self.get_state(self.args['cover'], attribute="current_position")

        if data['id'] == self.args['remote_id']:
            self.log(data['event'])
            if data['event'] == 1002:
                self.log('Single Press Up')
                self.call_service("cover/set_cover_position", entity_id = self.args['cover'], position = CurrentCoverPosition + 10)
            elif data['event'] == 2002:
                self.log('Single Press Down')
                self.call_service("cover/set_cover_position", entity_id = self.args['cover'], position = CurrentCoverPosition - 10)
            elif data['event'] == 1003:
                self.log('Long Press Up')
                self.call_service("cover/open_cover", entity_id = self.args['cover'])
            elif data['event'] == 2003:
                self.log('Long Press Down')
                self.call_service("cover/close_cover", entity_id = self.args['cover'])

Anschließend muss Appdaemon neugestartet werden. Wenn nun ein einfacher Tastendruck erfolgt, öffnet/schließt sich das Rollo in 10%-Schritten. Erfolgt ein langer Tastendruck auf der Fernbedienung, wird das Rollo komplett hoch- oder runtergefahren.