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:

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:

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.

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_lichtDie 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_toggleWir 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_lichtWenn 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_richtungUm 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.deckenventilatorDas 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: 5Das 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.deckenventilatorDas 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: singleUnd… 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!
