Funksteckdosen, -sensoren und Fernbedienungen in Homeassistant integrieren

Mithilfe des RaspyRFM Funkmoduls können mittels einem Raspberry PI, Funkkomponenten wie Steckdosen, Bewegungsmelder, Türkontakte usw. in Home Assistant einfach eingebunden werden, sodass diese darin als Entitäten wie lights, switches oder sensors zur Verfügung stehen und so z.B. in Automationen oder der komfortablen Weboberfläche konfiguriert werden können.
Alternativ zum RaspyRFM Funkmodul steht mittlerweile auch das RFM-Gateway zur Verfügung, welches standalone ohne einen Raspberry PI im WLAN betrieben werden kann.

Schaltaktoren in der Weboberfläche von Home Assistant

Voraussetzungen

  • RaspyRFM 433 MHz Funkmodul oder RFM-Gateway mit 433 MHz Funkchip
  • Raspberry PI OS Installation mit laufendem Home Assistant Docker-Container mit MQTT Integration. Das RaspyRFM kann NICHT direkt unter Home Assistant OS installiert werden!
  • MQTT Broker (z. B. Mosquitto), kann ebenfalls auf dem gleichen Raspberry PI laufen
  • Installiertes Pythonmodul für das RaspyRFM Funkmodul, Installation siehe hier
  • Laufendes rcpulsegw Skript, im Softwarepaket des RaspyRFM enthalten. Starten mit apps/rcpulsegw.py

Unterstützt wird eine große Auswahl an fernsteuerbaren Steckdosen, Unterputzmodulen, Fernbedienungen, Bewegungsmeldern und Fensterkontakten. Unter anderen werden die Geräte der Marken

  • Intertechno
  • Hama
  • Brennenstuhl
  • Pilota Casa
  • Emylo
  • ELV FS20
  • Nexa
  • Telldus
  • Voltcraft
  • Logilight
  • REV
  • Elro
  • uvw.

unterstützt. Eine (unvollständige) Liste aller unterstützten Geräte findet sich hier.

Konfiguration in Homeassistant (configuration.yaml)

Nachdem in Homeassistant die MQTT Integration eingerichtet und betriebsbereit ist, müssen die Funkkomponenten nur noch in dessen Konfiguration eingesetzt werden. Dazu werden in die Datei configuration.yaml von Homeassistant einfach lights, switches oder sensors hinzugefügt und mit den passenden MQTT Topics und States versehen. Hier ist ein Beispielauszug aus der Datei configuration.yaml:

mqtt:
  light:
    - name: "Licht 1"
      command_topic: home/rcpulse/intertechno/23087301/1/set
      state_topic: home/rcpulse/intertechno/23087301/1

    - name: "Licht 2"
      command_topic: home/rcpulse/intertechno/23087301/2/set
      state_topic: home/rcpulse/intertechno/23087301/2

    - name: "Theke"
      command_topic: home/rcpulse/intertechno/23087301/3/set
      state_topic: home/rcpulse/intertechno/23087301/3

  switch:
    - name: "Steckdose 1"
      command_topic: home/rcpulse/hama/97301/3/set
      state_topic: home/rcpulse/hama/97301/3

MQTT Nachrichten zum Steuern der Funksteckdosen

Das rcpulsegw Skript hört auf das MQTT Topic „home/rcpulse/#“. Im Topicpfad werden das zu verwendende Funkprotokoll (z. B. „intertechno“, „pilota“, „emylo“ etc.) sowie die Parameter wie Unit, Group, und/oder Channel angegeben. Zum Testen können mit einem MQTT Client Nachrichten an das rcpulse Skript gesendet werden, um die Funksteckdosen zu schalten:

mosquitto_pub -h localhost -t home/fs20/1722/2/set -m "ON"
mosquitto_pub -h localhost -t home/emylo/1722/2/set -m "OFF"

Hier sind die passenden Topics einiger der möglichen Protokolle und deren Parameter aufgelistet, um Schaltbefehle mit dem rcpulsegw Skript auszusenden.

Intertechno (Tristate)

Mit diesem Protokoll können die älteren, nicht selbstlernenden Funksteckdosen und die zugehörigen Fernbedienungen von Intertechno angesprochen werden.

Aufbau:
home/rcpulse/ittristate/<house>/<group>/<unit>/set <ON|OFF>

Beispiele:
home/rcpulse/ittristate/B/3/2/set ON
home/rcpulse/ittristate/B/3/2/set OFF

Brennenstuhl RCS 1000

Aufbau:
home/rcpulse/brennenstuhl/<dips>/<unit>/set  <ON|OFF>

Beispiele:
home/brennenstuhl/110100/2/set ON
home/brennenstuhl/110100/2/set OFF

Intertechno (selbstlernend)

Aufbau:
home/rcpulse/intertechno/<id>/<unit>/set  <ON|OFF|0-100>

Beispiele:
home/intertechno/47145/2/set ON 
home/intertechno/47145/2/set OFF
home/intertechno/47145/2/set 60 # auf 60 % dimmen

Hama

Aufbau:
home/rcpulse/hama/<id>/<unit>/set  <ON|OFF>

Beispiele:
home/hama/1394/3/set ON 
home/hama/1394/3/set OFF

Logilight

Aufbau:
home/rcpulse/logilight/<id>/<unit>/set  <ON|OFF>

Beispiele:
home/logilight/91823/1/set ON
home/logilight/91823/1/set OFF

Emylo

Die Emylo Fernbedienungen haben keine expliziten Ein-/Austasten, sondern je nach Typ Tasten von A-B oder A-D. Daher müssen in Homeassistant zusätzlich die Payloads angegeben werden:

mqtt:
  light:
    - name: "Weihnachtsbaum"
      command_topic: home/rcpulse/emylo/9172/set
      state_topic: home/rcpulse/emylo/9172
      payload_on: A
      payload_off: B
Aufbau:
home/rcpulse/emylo/<id>/<unit>/set  <A-D>

Beispiele:
home/emylo/9172/set A
home/emylo/9172/set B

ELV FS20

Das Funkschaltsystem von ELV läuft im Gegensatz zu den meisten anderen Systemen auf 868 MHz, dazu wird das RaspyRFM in der 868 MHz Ausführung benötigt.

Aufbau:
home/rcpulse/fs20/<id>/<unit>/set  <ON|OFF>

Beispiele:
home/fs20/9172/set A
home/fs20/9172/set B

Pilota Casa

Vom Hersteller Pilota Casa gibt es neben Handfernbedienungen auch praktische Wandtaster, Bewegungsmelder, Fensterkontakte usw.

Aufbau:
home/rcpulse/pilota/<id>/<group>/<unit>/set  <ON|OFF|LEARN>

Beispiele:
home/pilota/9831/2/2/set ON
home/pilota/9831/2/2/set OFF

Sonstige

Funksteckdosen und Sender werden von zahlreichen Firmen vermarktet und verwenden oft gleiche oder ähnliche Protokolle. So lassen sich etwa auch Komponenten der Marken Telldus, Nexa, Voltcraft usw. integrieren. Eine (unvollständige) Liste mit den zugehörigen Protokollen findet sich hier.

MQTT-Nachrichten zum Empfang von Sensoren

Wird eine Funksteckdose mit der zugehörigen Fernbedienung angesteuert wird der Schaltbefehl vom RaspyRFM empfangen und über eine MQTT Statusmeldung an Homeassistant weitergereicht. So kann man in Homeassistant den geänderten Schaltzustand sehen, auch wenn der Befehl nicht von Homeassistant selbst kam. Das rcpulsegw Skript gibt alle empfangenen und dekodierten Telegramme, etwa von Funkfernbedienungen, Bewegungssensoren oder Fensterkontakten an den MQTT Broker weiter. Weil sich viele Protokolle sehr ähnlich sind, können für dasselbe empfangene Telegram unter Umständen mehrere MQTT-Nachrichten erzeugt werden. Wird an das jeweils empfangene Topic noch /set gehängt ergibt sich das passende Topic zum Senden. Mit einem MQTT Client lassen sich alle empfangenen Telegramme mitlesen:

mosquitto_sub -h localhost -t home/rcpulse/# -v
home/pilota/9831/2/2 ON

Handfernbedienungen, Fensterkontakte, Bewegungsmelder, etc.

Ein Fensterkontakt von Pilota Casa kann beispielsweise folgendermaßen in Homeassistant eingebunden werden:

mqtt:
  binary_sensor:
    - name: "win-musik"
      unique_id: rcpulse-51221-1-2
      state_topic: home/rcpulse/pilota/512271/1/2

Funktemperatursensoren

Im 434 MHz Band senden ebenfalls einige Temperatur- und Feuchtigkeitssensoren, z. B. von Telldus, welche mit dem RaspyRFM 434 MHz zusätzlich eingebunden werden können:

mqtt:
  sensor:
    - name: "Test"
      state_topic: "home/rcpulse/wh2/88"
      unit_of_measurement: "°C"
      value_template: "{{ value_json.T }}"
      device_class: "temperature"
Funksensor in Homeassistant

Temperatur-/Feuchtigkeitssensoren LaCrosse 868 MHz

Diese Sensoren, z. B. Technoline TX29, TX35, u.a., senden mit einer anderen Modulation und einer anderen Frequenz als alle anderen o. g. Geräte. Dafür wird das RaspyRFM in der 868 MHz Ausführung benötigt, und anstelle des rcpulsegw Skript muss das lacrossegw Skript laufen. Ein gemeinsamer Betrieb von Sensoren/Aktoren im 434 MHz Band und LaCrosse-Sensoren ist mit dem RaspyRFM Doppelmodul möglich, mit dem beide Skripte gleichzeitig ausgeführt werden können. Weitere Informationen zu den LaCrosse Funksensoren finden sich hier. Einbindung in Homeassistant:

mqtt:
  sensor:
    - name: "T Küche"
      unique_id: T-lacrosse-4c
      state_topic: "home/lacrosse/4c"
      value_template: "{{ value_json.T }}"
      unit_of_measurement: "°C"
      device_class: "temperature"
    - name: "T Wohnzimmer"
      unique_id: T-lacrosse-70
      state_topic: "home/lacrosse/70"
      value_template: "{{ value_json.T }}"
      unit_of_measurement: "°C"
      device_class: "temperature"