Willkommen zum zweiten Teil der Erweiterung unseres Smart Homes mit 433MHz-Geräten. Wir werden uns mit dem Hinzufügen und Überwachen dieser Geräte über deine Sonoff RF BridgeR2 beschäftigen, die du bereits erfolgreich in den Home Assistant integriert hast, wie in meinem vorherigen Artikel beschrieben. Mit der Bridge sind wir bereit, die nächste Stufe der Steuerung und Überwachung deiner Hausautomatisierung zu erkunden.

Einbindung des RF-Geräts in den Home Assistant.

Erfassen der RF-Befehle

Wir brauchen das Gerät, das wir dem Home Assistant hinzufügen wollen. Der Hauptzweck, warum ich dieses Projekt begonnen habe, war, meinen Deckenventilator hinzuzufügen, der zu den komplexeren Dingen gehört, die man über eine RF-Bridge hinzufügen kann, da viele Zustände voneinander abhängen können. Zuerst brauchst du die RF-Quelle, in diesem Fall die Fernbedienung:

PXL 20231026 164718158 - Hinzufügen und Verfolgen des Status von 433MHz-Geräten über Sonoff RF BridgeR2 und ESPHome im Home Assistant

Du kannst die Frequenz (433,9 MHz) sehen, das ist der wichtige Teil. Als Nächstes musst du die Registerkarte Ereignisse des Home Assistant im Bereich Entwicklertools aufrufen. Hier kannst du anfangen, auf esphome.rf_code_received-Ereignisse zu hören.

Wenn du jetzt eine Taste auf der Fernbedienung drückst, solltest du etwas wie das hier sehen:

image 17 - Hinzufügen und Verfolgen des Status von 433MHz-Geräten über Sonoff RF BridgeR2 und ESPHome im Home Assistant

Hier siehst du, was die Datenoptionen bedeuten:

  • sync (int): RF Sync timing
  • low (int): RF Low timing
  • high (int): RF high timing
  • code (int): RF code
  • id (ID): Die ID der RF Bridge, wenn du mehrere Komponenten hast.

Das Wichtigste ist hier der Code. Das ist die Nutzlast, die du wiederverwenden willst, um das Gerät deiner Wahl über den Home Assistant zu steuern. Gehe alle Optionen der Fernbedienung durch und kopiere die Codes und die entsprechenden Aktionen.

Helfer Entitäten hinzufügen

Der nächste Schritt ist in deinem Fall vielleicht nicht notwendig. Home Assistant soll den Zustand des Deckenventilators verfolgen, deshalb müssen wir einige Hilfsentitäten verwenden. So können wir die von der RF-Bridge erfassten Zustandsänderungen verfolgen und den Zustand der Entitäten ändern, ohne automatisch die entsprechenden turn_on/turn_off-Dienste aufzurufen. Das ist wichtig, weil die meisten Fernbedienungen denselben RF-Code verwenden, um ein Gerät ein- und auszuschalten.

image 18 - Hinzufügen und Verfolgen des Status von 433MHz-Geräten über Sonoff RF BridgeR2 und ESPHome im Home Assistant

Hinzufügen von Schaltern

Um ein einfaches binäres Gerät wie eine Lampe zu steuern, ist es am einfachsten, eine eigene Schaltervorlage zu verwenden. Bei mir sieht sie etwa so aus:

- platform: template
  switches:
    deckenventilator_licht:
      friendly_name: "Deckenventilator Licht"
      value_template: "{{ is_state('input_boolean.deckenventilator_licht', 'on') }}"
      turn_on:
        - service: esphome.rf_bridge_send_rf_code
          data:
            sync: 11514
            low: 590
            high: 1772
            code: 11261709
        - service: input_boolean.turn_on
          target:
            entity_id: input_boolean.deckenventilator_licht
      turn_off:
        - service: esphome.rf_bridge_send_rf_code
          data:
            sync: 11514
            low: 590
            high: 1772
            code: 11261709
        - service: input_boolean.turn_off
          target:
            entity_id: input_boolean.deckenventilator_licht

Die Wertvorlage verfolgt den Zustand der Entität input_boolean. So können wir den Zustand der Entität ändern, ohne die Funktionen turn_on/turn_off aufrufen zu müssen. Dann fügen wir einfach einen Dienstaufruf zu den turn_on/turn_off-Funktionen hinzu, der den Code sendet, den wir zuvor erfasst haben. Im Fall der Deckenventilatorlampe handelt es sich um einen binären Schalter, der jedes Mal denselben Befehl sendet.

Nachdem die Schalter-Entität erstellt wurde, existiert sie nun im Home Assistant und kann bereits unser Licht steuern. Prima! Jetzt kannst du einen Helfer hinzufügen, der den Gerätetyp des Schalters von Schalter auf Licht ändert, um die Integration abzuschließen.

Jetzt gibt es allerdings ein kleines Problem: Wenn wir die Fernbedienung außerhalb von Home Assistant verwenden, weiß sie nichts von dieser Änderung und ändert den Status des Geräts nicht. Dies kann durch eine Automatisierung gelöst werden:

alias: Deckenventilator RF Bridge
description: ""
trigger:
  - platform: event
    event_type: esphome.rf_code_received
    event_data:
      code: 00abd70d
    id: licht_toggle

Wir können das Ereignis rf_code_received wieder verwenden, um auf RF-Befehle zu hören, die von unserer Fernbedienung gesendet werden! Auf diese Weise können wir den Zustand unserer Entität entsprechend ändern:

action:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - licht_toggle
        sequence:
          - service: light.toggle
            data: {}
            target:
              entity_id: light.deckenventilator_licht

Wenn du also den Zustand einer Entität verfolgen willst, die außerhalb von Home Assistant geändert wird, empfehle ich dir, Helfer-Entitäten zu verwenden und den Zustand mit einer Automatisierung entsprechend zu ändern.

Damit ist die Integration einer 433MHz-Licht-Entität abgeschlossen. Der Prozess ist derselbe für jede andere binäre Einheit, die du hinzufügen möchtest.

Einbindung komplexerer Geräte

Ich wollte jedoch meinen Deckenventilator integrieren, der etwas komplizierter ist. Er hat 5 verschiedene Geschwindigkeiten, kann die Richtung umkehren, das Licht ein- und ausschalten und den Ventilator ein- und ausschalten. Zum Glück hat Home Assistant eine Ventilatorvorlage integriert. Damit können wir eine benutzerdefinierte Einheit erstellen, die mehr Funktionen bietet als nur das binäre Ein- und Ausschalten, wenn wir den Ventilator als einfachen Schalter hinzufügen.

Auch hier verwenden wir eine input_boolean-Helper-Entity, damit wir den Zustand der Entität ändern können, ohne den send_rf_code-Dienst aufzurufen:

- platform: template
  fans:
    deckenventilator:
      friendly_name: "Deckenventilator"
      unique_id: deckenventilator_schlafzimmer
      value_template: "{{ is_state('input_boolean.deckenventilator', 'on') }}"

Das sollte dir weitgehend bekannt vorkommen. Hier wird einfach ein Ventilator hinzugefügt, den du ein- und ausschalten kannst, was die Art und Weise nachahmt, wie wir zuvor das Licht integriert haben. Das value_template wird auch hier verwendet, um den Zustand der Entitäten auf den der Hilfsfunktion zu setzen.

      direction_template: >
        {% if is_state('input_select.deckenventilator_richtung', 'Vorwärts') %}
          forward
        {% else %}
          reverse
        {% endif %}

Die Richtungsvorlage legt die Richtung des Ventilators fest, die auf der Benutzeroberfläche angezeigt wird. Dafür verwenden wir eine andere Hilfsentität.

      set_direction:
        - service: esphome.rf_bridge_send_rf_code
          data:
            sync: 0x2c90
            low: 0x024a
            high: 0x06ee
            code: 0x00abd70c
        - service: input_select.select_next
          data:
            cycle: true
          target:
            entity_id: input_select.deckenventilator_richtung

Um die Richtung des Ventilators ändern zu können, senden wir einfach den entsprechenden RF-Befehl und ändern den Zustand unserer Helfer-Entität.

      turn_on:
        - service: esphome.rf_bridge_send_rf_code
          data:
            sync: 0x2c8e
            low: 0x024e
            high: 0x06ea
            code: 0x00abd703
        - service: input_boolean.turn_on
          target:
            entity_id: input_boolean.deckenventilator
      turn_off:
        - service: esphome.rf_bridge_send_rf_code
          data:
            sync: 0x2c8e
            low: 0x024e
            high: 0x06ea
            code: 0x00abd703
        - service: input_boolean.turn_off
          target:
            entity_id: input_boolean.deckenventilator

Das Aus- und Einschalten des Ventilators ist identisch mit dem anderer boolescher Entitäten.

      percentage_template: >
        {{ states('input_number.deckenventilator_geschwindigkeit') if is_state('input_boolean.deckenventilator', 'on') else 0 }}
      speed_count: 5

Das percentage_template steuert lediglich, wie die Geschwindigkeit in Prozent in der Benutzeroberfläche angezeigt wird. Wenn die Geschwindigkeit 0 ist, ist der Ventilator ausgeschaltet, ansonsten eingeschaltet.

      set_percentage:
        - if:
            - condition: template
              value_template: "{{ percentage > 0}}"
          then:
            - service: input_number.set_value
              target:
                entity_id: input_number.deckenventilator_geschwindigkeit
              data:
                value: "{{ percentage }}"
            - choose:
                - conditions:
                    - condition: state
                      entity_id: input_number.deckenventilator_geschwindigkeit
                      state: "20.0"
                  sequence:
                    - service: esphome.rf_bridge_send_rf_code
                      data:
                        sync: 11514
                        low: 590
                        high: 1772
                        code: 11261701
                - conditions:
                    - condition: state
                      entity_id: input_number.deckenventilator_geschwindigkeit
                      state: "40.0"
                  sequence:
                    - service: esphome.rf_bridge_send_rf_code
                      data:
                        sync: 11514
                        low: 590
                        high: 1772
                        code: 11261706
                - conditions:
                    - condition: state
                      entity_id: input_number.deckenventilator_geschwindigkeit
                      state: "60.0"
                  sequence:
                    - service: esphome.rf_bridge_send_rf_code
                      data:
                        sync: 11514
                        low: 590
                        high: 1772
                        code: 11261702
                - conditions:
                    - condition: state
                      entity_id: input_number.deckenventilator_geschwindigkeit
                      state: "80.0"
                  sequence:
                    - service: esphome.rf_bridge_send_rf_code
                      data:
                        sync: 11514
                        low: 590
                        high: 1772
                        code: 11261705
                - conditions:
                    - condition: state
                      entity_id: input_number.deckenventilator_geschwindigkeit
                      state: "100.0"
                  sequence:
                    - service: esphome.rf_bridge_send_rf_code
                      data:
                        sync: 11514
                        low: 590
                        high: 1772
                        code: 11261698
            - service: input_boolean.turn_on
              data: {}
              target:
                entity_id: input_boolean.deckenventilator
          else:
            - service: fan.turn_off
              data: {}
              target:
                entity_id: fan.deckenventilator

Das Einstellen der tatsächlichen Geschwindigkeit ist etwas mühsamer. Wenn der angegebene Prozentsatz 0 ist, rufen wir die Funktion turn_off des Ventilators auf, die auch die entsprechende Helper-Entität ändert. Wenn der Wert nicht 0 ist, wird der entsprechende Befehl gesendet und sichergestellt, dass der Ventilator eingeschaltet ist.

In einer separaten Automatisierung sorgen wir dafür, dass wir auch die Befehle der RF-Fernbedienung verfolgen:

alias: Deckenventilator RF Bridge
description: ""
trigger:
  - platform: event
    event_type: esphome.rf_code_received
    event_data:
      code: 00abd70d
    id: licht_toggle
    alias: Licht an/aus
  - platform: event
    event_type: esphome.rf_code_received
    event_data:
      code: 00abd703
    id: fan_toggle
    alias: Ventilator an/aus
  - alias: Wintermodus
    platform: event
    event_type: esphome.rf_code_received
    event_data:
      code: 00abd70c
    id: modus_remote
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - licht_toggle
        sequence:
          - service: homeassistant.toggle
            data: {}
            target:
              entity_id: input_boolean.deckenventilator_licht
      - conditions:
          - condition: trigger
            id:
              - fan_toggle
        sequence:
          - service: homeassistant.toggle
            data: {}
            target:
              entity_id: input_boolean.deckenventilator
      - conditions:
          - condition: trigger
            id:
              - modus_remote
        sequence:
          - service: homeassistant.toggle
            data: {}
            target:
              entity_id: input_boolean.deckenventilator_wintermodus
          - service: input_boolean.turn_on
            data: {}
            target:
              entity_id: input_boolean.deckenventilator
mode: single

Und… Das war’s! Du solltest jetzt einen vollständig integrierten Ventilator haben.

Fehlersuche und Tipps

Es ist möglich und sogar sehr wahrscheinlich, dass der Zustand der Entitäten im Home Assistant und der über RF-Befehle gesteuerten Geräte gelegentlich voneinander abweichen. Das kann zum Beispiel passieren, wenn Befehle zu schnell hintereinander aufgerufen werden: Nur einer der Befehle kommt tatsächlich beim Gerät an, aber beide Befehle ändern die Entität im Home Assistant. Wenn du also den Ventilator schnell ein- und ausschaltest, kann er eingeschaltet werden, während der Zustand der Entität ausgeschaltet ist.

Ich habe im Moment keine Lösung dafür, da wir keine Möglichkeit haben, den tatsächlichen Zustand der Geräte zu verfolgen, aber das solltest du im Hinterkopf behalten.

Fazit

Es ist eigentlich ziemlich billig und einfach, 433MHz-gesteuerte Geräte zum Home Assistant hinzuzufügen. Der größte Zeitaufwand bestand darin, herauszufinden, wie man die benutzerdefinierte Ventilatorvorlage erstellt und sicherstellt, dass die Zustände so funktionieren, wie sie sollen. Deshalb habe ich diesen Artikel verfasst – ich hoffe, er spart dir etwas Zeit! Wenn er dir geholfen hat und du eine der oben genannten Komponenten brauchst, würde ich mich über einen Kauf über einen der Affiliate-Links freuen – oder lade mich auf einen Kaffee ein, wenn wir uns mal treffen!

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert