HomeAssistant sieht (Infra )Rot – Steuere deine IR-Geräte mit einem IR-Blaster und HomeAssistant
Ich habe mir bei E-bay einen <$>Broadlink RM4 Pro</$> für Infrarot (IR) und Richtfunkt (RF) geholt. Das Teil könnt ihr mit einer App auf dem Smartphone betreiben, es gibt aber auch eine coole HomeAssistant integration. Ich will nämlich meinen Beamer und die Stereoanlage ins SmartHome System integrieren und so Szenen wie „Filmabend“ umsetzen.
Setup
Der Broadlink RM4 Pro wird einfach mit dem MicroUSB Kabel an einen Smartphone-Charger gehängt. Ich hab meinen gebraucht gekauft, daher kann ich nicht sagen, ob da nicht einer im original Lieferumfang dabei ist. Wenn die LED Blau Blinkt, seid ihr Ready to go.
Broadlink App installieren
Als nächstes brauchen wir die Broadlink App. Die gibts bei Google Play für Lau. In der App müssen wir uns einen Account erstellen und die nötigen Rechte bereitstellen. Wenn die App irgendwann durch ist, müsst ihr oben Rechts auf Gerät Hinzufügen gehen und euch durch den Einrichtungsdialog klicken. Das habe ich jetzt nicht besonders Dokumentiert, da das recht self explanatory ist.
Wenn das soweit geklappt hat, und der IR-Blaster in eurem Netzwerk ist, erkennt HomeAssistant den eigentlich schon automatisch.

Ansonsten kann man den auch händisch Hinzufügen – in dem man auf den Button unten rechts klickt und nach Broadlink sucht.


Bei mir ist dann die Meldung gekommen, dass mein Gerät noch blockiert ist.

Gerät entsperren
In der App unter property – Sperrvorrichtung (die Übersetzungen sind nicht ganz sauber) könnt ihr den Toggle Button deaktivieren und bestätigen, dass ihr das wirklich tun wolt. Danach müssen wir die Integration einmal neu laden.

Befehle Anlernen
Um nun die Befehler der Fernbedienungen auszulesen, müssen wir unter Entwicklerwerkzeuge – Dienste den Service „remote.lern_command“ auswählen.

Hier können wir als Ziel den Button ganz rechts bemühen und den Broadlink RM4 Pro hinzufügen.

Ich starte mit der Fernbedienung für den Beamer und vergebe daher bei
Device den Namen Beamer. Bei
Command setze ich einen Namen, der dem Befehl entspricht, so dass ich es später wieder zuordnen kann.
Command Type gibt euch die Option zwischen IR und RF zu wählen. Mit RF kann man zum Beispiel Funktsteckdosen steuern. Da hab ich auch noch jede Menge rumfliegen.
Timeout erlaubt es, falls ihr hin und her laufen müsst, die Zeit bis zum Abbruch des Services festzulegen. Wenn der Befehl aber erfolgreich erlernt wurde, stoppt es eh automatisch.

Wir drücken dann den kleinen Button unten rechts um das Lernen zu starten. Die LED auf dem Broadlink IR-Blaster leuchtet nun Pink / Orange. Wir drücken auf den Knopf auf der Fernbedienung und wenn das Lesen erfolgreich war, wird der Button grün und zeigt einen kleinen Haken an.

Das gute ist, wir müssen nur das Feld mit Command für jeden Befehl neu benennen, der Rest bleibt gleich. So klicken wir uns fleißig für alle Knöpfe durch.

Testing
Die ganzen Befehle können wir nun auch ausprobieren, in dem wir auf den Service „remote.send_command“ wechseln und die Felder analog zu den zuvor angelernten Befehlen befüllen.

Komandos nachschlagen
Wer eine komplizierte Fernbedienung hat, kann sich evtl. nicht alle Kommandos merken. Kein Problem, mit einem kleinen Kniff kann man diese Kommandos nachschlagen. Unter Einstellungen – Add Ons gehen wir in den File-Editor.

Beim Reiter Konfiguration können wir den Unterordner .storage aus der Exclude Liste löschen. Dann speichern wir und das Add-On wird neu gestartet.


Im File-Editor können wir jetzt in den sonst versteckten Unterordner .storage gehen und die Datei mit den Codes raussuchen.


Scripte
Damit das ganze Benutzbar wird, können wir uns Scripte einrichten, die den Dienst mit dem Befehl ausführen. Als Script lassen sich die Funktionen sogar schon ins Dashboard einbinden, da gibt es aber später noch einen schöneren Weg.

Im Kopf des Scriptes vergeben wir Namen, icon und ID. Bei der Sequenz müssen wir nun einfach, wie vorhin beim Testen, den Dienst konfigurieren.


Wer will, kann sich die Services schon als Karte oder als Button aufs Dashboard packen. Ich persönlich finde diese Variante aber nicht so sexy.



Button to butt on
WIr können nun mit hilfe eines input_boolean und eines Template Switches einen Toggle-Button erstellen, der den aktuellen Zustand des Gerätes wiederspiegelt und bei Betätigung, des jeweilige Script feuert. Ein netter Nebeneffekt: Diesen Button kann man auch mit Alexas Sprachsteuerung bedienen.
input boolean
Der input boolean wird gebraucht, um den Status des Template Switches zu speichern. Wenn wir ohne diesen Arbeiten, gibt es zwar den Toggle Button, aber der springt dann wieder in den Initialzustand zurück, nach dem er Betätigt wurde.
input_boolean:
beamer_power:
name: Beamer ist an
anlage_power:
name: Anlage ist an
template switch
Ein template switch kann den Zustand aus Entitäten lesen und entsprechend bei der Bedienung Dinge auslösen. Z.B. das etwas an- oder ausgeschalten wird. Bei uns wird der wie folgt definiert:
input_boolean:
beamer_power:
name: Beamer ist an
anlage_power:
name: Anlage ist an
switch:
- platform: template
switches:
beamerpower:
unique_id: beamerPowerStatus
#device_class: "power"
value_template: "{{ states('input_boolean.beamer_power') }}"
turn_on:
- service: script.turn_on
entity_id: script.beamer_on
- service: input_boolean.toggle
entity_id: input_boolean.beamer_power
turn_off:
- service: script.turn_on
entity_id: script.beamer_off
- service: input_boolean.toggle
entity_id: input_boolean.beamer_power
anlagepower:
unique_id: anlagePowerStatus
#device_class: "power"
value_template: "{{ states('input_boolean.anlage_power') }}"
turn_on:
- service: script.turn_on
entity_id: script.anlage_power
- service: input_boolean.toggle
entity_id: input_boolean.anlage_power
turn_off:
- service: script.turn_on
entity_id: script.anlage_power
- service: input_boolean.toggle
entity_id: input_boolean.anlage_power
Mit dem
value_template lesen wir aus dem input_boolean den Status. Damit können wir unterscheiden, ob die turn_on oder turn_off funktion bei betätigung ausgelöst werden soll.
turn_on: Hier legen wir die services fest, die beim Anschalten ausgelöst werden sollen.
service: Es gibt verschiedene services, die ihr im home assitant auslösen könnt, um Entitäten zu manipulieren. hier nutzen wir den .turn_on service zum starten des scriptes bzw. zum wechseln des Zustands des input_boolean.
entity_id: Die genaue ID des zu manipulierenden Zielobjekts.
Und so weiter und sofort. Man kann den target: auch in der Syntax weglassen. wenn man den gleichen Service auf verschiedene Objekte packen will, kann man die hier ggf. gruppieren.
Hier wird also beim Betätigen nicht nur der Service für die Broadlink verbindung ausgeführt, sondern auch der Status in der bool aktualisiert, da sonst switch und echter status nicht miteinander verknüpft sind. Ist ein bischen weird, dass der Button seinen eigenen zustand nicht weiß, aber so ist es hier eben.
Alexa
Ich hab den NabuCasa dienst aktiviert, daher wurden die beiden template-switches für Beamer und Anlage automatisch erkannt. Es gibt aber auch Wege, das ohne Nabu Casa zu erledigen.
Dashboard
Wir können den Button nun auch aufs Dashboard legen. Sieht doch cooler aus so:

Fimabend Szene
Man kann nun einfach eine Alexa Routine erstellen, in der man die Schalter und Befehle zusammen konfiguriert, oder man macht eine Szene in HomeAssistant, dann kann man diese nämlich auch mit einem ZigBee Button auslösen.
Dazu gehen wir auf Einstellungen – Szenen und erstellen mit dem Button unten rechts eine neue Szene:

Wir fügen dann einfach die Entitäten in dem aktuellen Status, wie es sein soll hinzu. Das ist ein bisschen eigenartig bei Home Assistant, dass man keinen Wunschstatus konfigurieren kann.
Ich hoffe ich konnte hier das ein oder andere Konzept verständlich machen. Viel spaß beim Basteln!
$ Die mit einem $ gekennzeichneten Links, sind Affiliate Links. Wenn du über diese in den Shop gelangst und etwas kaufst, bekomme ich eine kleine Provision