Broadlink: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
K (syntaxhighlight korrigiert) |
||
(42 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
== Beschreibung == | == Beschreibung == | ||
Die chinesische Firma BroadLink stellt ( | Die chinesische Firma BroadLink stellt unter Anderem auch Gateways her, die sich per Wifi ansprechen lassen und Infrator (38KHz-IR) bzw. RF (433/315 MHz-RF) Komponenten fernsteuern können (https://www.ibroadlink.com/productinfo/762672.html). | ||
Die Gateways werden mit Hilfe einer Android- oder iOS-App | Die Gateways werden mit Hilfe einer Android- oder iOS-App ("Intelligent Home Center for EU (IHC) oder "BroadLink - Universal TV Remote") angelernt. | ||
Danach stellen sie die Möglichkeit bereit, | Danach stellen sie die Möglichkeit bereit, | ||
Zeile 11: | Zeile 11: | ||
Zur praktischen Verwendung gibt es mehrere Schnittstellen: | Zur praktischen Verwendung gibt es mehrere Schnittstellen: | ||
# die offizielle App | # die offizielle App (https://www.ibroadlink.com/bleapp), mit der Codes angelernt, in der App gespeichert und im lokalen WLAN über die RM versendet werden können, | ||
# die ''[http://rm-bridge.fun2code.de/ RM Bridge]'' für Android-Geräte, die eine HTTP REST web API auf dem Androidgerät als Webservice bereitstellt, | # die ''[http://rm-bridge.fun2code.de/ RM Bridge]'' für Android-Geräte, die eine HTTP REST web API auf dem Androidgerät als Webservice bereitstellt, | ||
# die ''Python-Bibliothek [https://github.com/mjg59/python-broadlink python-broadlink]'' von Matthew Garrett (mjg59) für Server, auf denen Python lauffähig ist. Diese kann dann direkt per (Shell-)Skript [https://forum.fhem.de/index.php/topic,54334.15.html aufgerufen werden] aber auch noch schön gekapselt werden: | # die ''Python-Bibliothek [https://github.com/mjg59/python-broadlink python-broadlink]'' von Matthew Garrett (mjg59) für Server, auf denen Python lauffähig ist. Diese kann dann direkt per (Shell-)Skript [https://forum.fhem.de/index.php/topic,54334.15.html aufgerufen werden] aber auch noch schön gekapselt werden: | ||
# '' | # ''{{Link2Forum|Topic=38231|Message=581909|LinkText=Webservice für Python fähige Server}}''. In dieser Form sind dann gelernte Sendebefehle elegant als [[HTTPMOD]] Objekte in FHEM integrierbar. | ||
=== BroadLink RM mini === | === BroadLink RM mini === | ||
{{Infobox Hardware | {{Infobox Hardware | ||
|Bild= | |Bild=RMmini.png | ||
|Bildbeschreibung= BroadLink RM mini 3 | |Bildbeschreibung= BroadLink RM mini 3 | ||
|HWProtocol= Infrarot | |HWProtocol= Infrarot | ||
Zeile 29: | Zeile 29: | ||
|HWPoweredBy= Micro USB | |HWPoweredBy= Micro USB | ||
|HWSize= 5.5 x 5.5 x 6.45 cm | |HWSize= 5.5 x 5.5 x 6.45 cm | ||
|HWDeviceFHEM= | |HWDeviceFHEM= Broadlink | ||
<!-- |ModOwner= --> | <!-- |ModOwner= --> | ||
|HWManufacturer= BroadLink | |HWManufacturer= [http://www.ibroadlink.com/rmMini3/ BroadLink] | ||
}} | }} | ||
Der BroadLink RM mini 3 ist ein WLAN zu Infrarot Gateway (ohne RF, vgl. [[#BroadLink RM Pro|RM Pro]]) | Der BroadLink RM mini 3 (wird nicht mehr hergestellt, evtl. noch bei Amazon / ebay erhätlich) ist ein WLAN zu Infrarot Gateway (ohne RF, vgl. [[#BroadLink RM Pro|RM Pro]]). Im Vergleich zum RM Pro ist die Sendeleistung deutlich schwächer, da nur ein IR-Transmitter verbaut ist. | ||
<br clear=all> | <br clear=all> | ||
Zeile 41: | Zeile 41: | ||
=== BroadLink RM Pro === | === BroadLink RM Pro === | ||
{{Infobox Hardware | {{Infobox Hardware | ||
|Bild= | |Bild=RMPro.png | ||
|Bildbeschreibung= BroadLink RM Pro | |Bildbeschreibung= BroadLink RM Pro | ||
|HWProtocol= Infrarot, RF | |HWProtocol= Infrarot, RF | ||
Zeile 52: | Zeile 52: | ||
|HWPoweredBy= Micro USB | |HWPoweredBy= Micro USB | ||
|HWSize= 11 x 3,5 x 11,5 cm | |HWSize= 11 x 3,5 x 11,5 cm | ||
|HWDeviceFHEM= | |HWDeviceFHEM= Broadlink | ||
<!-- |ModOwner= --> | <!-- |ModOwner= --> | ||
|HWManufacturer= BroadLink | |HWManufacturer= [http://www.ibroadlink.com/rmPro/ BroadLink] | ||
}} | }} | ||
Der BroadLink RM Pro ist ein WLAN zu Infrarot- und | Der BroadLink RM Pro/RM3 (wird nicht mehr hergestellt, evtl. noch bei Amazon / ebay erhältlich) ist ein WLAN zu Infrarot- und RF Gateway. Der aktuelle Nachfolger ist der RMpro 4 (https://www.ibroadlink.com/productinfo/762672.html). | ||
Der RM Pro verfügt im Vergleich zum [[#BroadLink RM mini|RM mini]] über eine größere Reichweite, da 6+1 (Kreis und Mitte) IR-Transmitter verbaut sind. | |||
(In der Version RM3 soll der unterstützte RF-Bereich inoffiziell sogar 142...1050 MHz betragen.) | |||
Der RM Pro enthält auch einen Temperatursensor, der mindestens über die App ausgelesen und für Aktions-Regeln verwendet werden kann. Der Sensor ist offenbar nicht in allen Versionen verbaut bzw. kann oft nur als externer Sensor angeschlossen werden. | |||
Es gab/gibt Vorgängerversionen: | |||
* RM Home/RM1: "rote Version"; nur IR, ohne RF; schwache Sendeleistung | |||
* RM Pro/RM2: "schwarze Version"; ID 10 002; IR und RF 433/315MHz; verstärkte IR-Sendeleistung (7 IR-Transmitter) | |||
* (OEM Version) RM Plus: schwarz, keine Aufkleber, keine Beschriftungen, gerade, nicht abgerundete Oberseite... (soll intern baugleich mit RM Pro/RM3 sein). | |||
<br clear=all> | <br clear=all> | ||
== Nutzung in FHEM == | == Nutzung in FHEM == | ||
=== Modul === | |||
Das | '''Achtung: Das Modul wird offenbar nicht mehr gepflegt und funktioniert bei vielen Nutzern nicht bzw. (nach Rücksetzen des Gateways) nicht mehr. Empfohlen wird aktuell der Einsatz der unten genannten python Module und der dort hinterlegten Skripte. | ||
''' | |||
== | Es gibt das {{Link2CmdRef|Lang=de|Label=Modul Broadlink|Anker=Broadlink}}, mit dem Broadlink-Geräte in FHEM eingebunden werden können: | ||
* rmpro (RM Pro) | |||
* rmmini (RM mini) | |||
* sp3 (SP3 - Schalter) | |||
* sp3s (SP3S - Schalter mit aktueller Energieverbrauchsmessung) | |||
s.a.: [https://forum.fhem.de/index.php/topic,71972.msg Forenthread] | |||
=== Webservice === | |||
Es gibt den Ansatz, [https://forum.fhem.de/index.php/topic,38231.msg581909.html#msg581909 auf dem FHEM-Server einen Webservice (pro Gateway) zu installieren] und via [[HTTPMOD]] Befehle abzusetzen. | |||
== | === Skripte === | ||
Auf dem FHEM-Server werden die python Module mit den integrierten Skripten installiert und nur jeweils bei Bedarf angestoßen. So wird keine permanente Systemlast produziert. Die Reaktionsgeschwindigkeit ist nicht überwältigend, aber praxistauglich. (Ca 2-3 sec). | |||
:: '''Credits''' | |||
:: | |||
:: Die Python-API ist von [https://github.com/mjg59/python-broadlink dieser Github-Seite]. | |||
== Hinweis == | |||
Mit diesem Vorgehen unterstützt das BroadLink sowohl IR als auch RF. | |||
== Vorgehen (Skripte) == | |||
=== Installation === | |||
Zunächst wird der Broadlink mit der App ins eigene Netz eingebunden. Hierzu der Anleitung in der App folgen. | |||
Alternativ und ohne Notwendigkeit die App zu installieren kann der Broadlink auch über die python Skripte ins WLan gebracht werden, siehe https://github.com/mjg59/python-broadlink. | |||
Auf dem FHEM-Rechner (z.B. Raspi) muss python und am besten | Auf dem FHEM-Rechner (z.B. Raspi) muss python (python3) und am besten git installiert sein. Ggf. muss auch noch simplejson und pip installiert werden. | ||
sudo apt-get install python git pip | sudo apt-get install python git pip | ||
Zeile 106: | Zeile 121: | ||
cd .. | cd .. | ||
== Skripte == | |||
Die python Module bringen eigene Skripte zum Anlernen und Senden von IR/RF commands mit. Sie liegen im Verzeichnis /opt/BroadLink/python-broadlink/cli. Die Verwendung wird hier beschrieben: https://github.com/mjg59/python-broadlink/tree/master/cli | |||
Anleitung im Forum dazu: https://forum.fhem.de/index.php?topic=71972.msg1313044#msg1313044 | |||
'''In a nutshell:''' | |||
Broadlink finden: | |||
<syntaxhighlight lang="Text"> | |||
broadlink_discovery | |||
</syntaxhighlight> | |||
Die Daten des gefundene Gerätes in einem File speichern (siehe Shell Ausgabe), als Beispiel: | |||
<syntaxhighlight lang="Text"> | |||
rmpro.device | |||
</syntaxhighlight> | |||
Command anlernen und in File speichern: | |||
<syntaxhighlight lang="Text"> | |||
broadlink_cli --device @rmpro.device --rflearn --learnfile TVon | |||
</syntaxhighlight> | |||
Command senden: | |||
<syntaxhighlight lang="Text"> | |||
broadlink_cli --device @rmpro.device --send @TVon | |||
</syntaxhighlight> | |||
Integration in notify/DOIF: | |||
<syntaxhighlight lang="bash"> | |||
{system("/opt/BroadLink/python-broadlink/cli/broadlink_cli --device \@/opt/BroadLink/python-broadlink/cli/rmpro.device --send \@/opt/BroadLink/python-broadlink/cli/TVOn")} | |||
</syntaxhighlight> | |||
'''== Die folgenden Skripte bzw der ganze Abschnitt ist veraltet ==''' | |||
Die hier zitierten Skripte laufen nicht mehr unter python3. Sie sind auch nicht mehr erforderlich, da die python Module eigene Skripte mitbringen. Diese liegen im Verzeichnis /opt/BroadLink/python-broadlink/cli. Die Verwendung wird hier beschrieben: https://github.com/mjg59/python-broadlink/tree/master/cli | |||
In das Verzeichnis dann noch die vier Skripte kopieren. | In das Verzeichnis dann noch die vier Skripte kopieren. | ||
1. search-bl.sh | 1. search-bl.sh | ||
< | <syntaxhighlight lang="python"> | ||
#!/usr/bin/python | #!/usr/bin/python | ||
Zeile 142: | Zeile 187: | ||
print "Device " + str(index + 1) +" MAC address = " + mymacadd | print "Device " + str(index + 1) +" MAC address = " + mymacadd | ||
print "..............." | print "..............." | ||
</ | </syntaxhighlight> | ||
2. learn-bl.sh | 2. learn-bl.sh | ||
< | <syntaxhighlight lang="python"> | ||
#!/usr/bin/python | #!/usr/bin/python | ||
Zeile 181: | Zeile 226: | ||
print "Hex code gespeichert unter " + codeName + ".txt" | print "Hex code gespeichert unter " + codeName + ".txt" | ||
</ | </syntaxhighlight> | ||
3. send-bl.sh | 3. send-bl.sh | ||
< | <syntaxhighlight lang="python"> | ||
#!/usr/bin/python | #!/usr/bin/python | ||
Zeile 216: | Zeile 261: | ||
device.send_data(myhex.decode('hex')) | device.send_data(myhex.decode('hex')) | ||
print "Code Sent...." | print "Code Sent...." | ||
</ | </syntaxhighlight> | ||
4. sendmore-bl.sh | 4. sendmore-bl.sh | ||
< | <syntaxhighlight lang="python"> | ||
#!/usr/bin/python | #!/usr/bin/python | ||
Zeile 272: | Zeile 316: | ||
# print "Code Sent...." | # print "Code Sent...." | ||
sys.exit() | sys.exit() | ||
</ | </syntaxhighlight> | ||
Zeile 279: | Zeile 323: | ||
sudo chown fhem.dialout *.sh | sudo chown fhem.dialout *.sh | ||
sudo chmod 744 *.sh | sudo chmod 744 *.sh | ||
=== Konfiguration === | === Konfiguration === | ||
Zeile 324: | Zeile 367: | ||
Mit dem dritten und vierten Script kann man den Code wieder senden. Auch hier wieder die eigene IP Adresse und MAC Adresse des Broadlink von oben eintragen. | Mit dem dritten und vierten Script kann man den Code wieder senden. Auch hier wieder die eigene IP Adresse und MAC Adresse des Broadlink von oben eintragen. | ||
Der Aufruf ist für das dritte Skript: | |||
Der Aufruf im Terminal ist für das dritte Skript: | |||
sudo /opt/BroadLink/send-bl.sh /opt/BroadLink/test.txt | sudo /opt/BroadLink/send-bl.sh /opt/BroadLink/test.txt | ||
Zeile 336: | Zeile 380: | ||
define atAbendsLichtAn at *19:00:00 "/opt/BroadLink/send-bl.sh /opt/BroadLink/FB1An.txt" | define atAbendsLichtAn at *19:00:00 "/opt/BroadLink/send-bl.sh /opt/BroadLink/FB1An.txt" | ||
Zeile 347: | Zeile 392: | ||
Das Skript extrahiert aus dem Befehlsaufruf den Pfad und ergänzt ihn jeweils bei den Parametern sowie um die Dateierweiterung ".txt". Daher kann der Aufruf dann kürzer sein. Angenommen, es sind die Code-Dateien 1.txt, 2.txt, 3.txt usw. im selben Verzeichnis wie die Skripte vorhanden, lautet der Aufruf dann z.B. nur noch: | Das Skript extrahiert aus dem Befehlsaufruf den Pfad und ergänzt ihn jeweils bei den Parametern sowie um die Dateierweiterung ".txt". Daher kann der Aufruf dann kürzer sein. Angenommen, es sind die Code-Dateien 1.txt, 2.txt, 3.txt usw. im selben Verzeichnis wie die Skripte vorhanden, lautet der Aufruf im Terminal dann z.B. nur noch: | ||
/opt/BroadLink/sendmore-bl.sh 1 2 3 2 | /opt/BroadLink/sendmore-bl.sh 1 2 3 2 | ||
Im "define" lautet das oben genannte Beispiel: | |||
define atAbendsLichtAn at *19:00:00 "/opt/BroadLink/sendmore-bl.sh FB1An" | |||
=== Feintuning === | |||
Im 4. Skript definiert die Zeile (kurz vor Ende) | |||
time.sleep(0.5) | |||
die Wartezeit zwischen zwei gesendeten "Tasten". Bei vielen Geräten funktioniert das auch, wenn man die Zeile auskommentiert oder löscht. Dann werden die Signale schneller hintereinander gesendet. | |||
Man kann hier natürlich auch den Wert 0.5 verändern. Einfach ausprobieren! | |||
== Mehrere Bridges betreiben == | |||
Um mehrere Bridges nebeneinander zu betreiben, braucht man für jedes Gerät das dritte oder vierte Skript unter eigenem Namen, also z.B. sendmore-bl-WoZi.sh und sendmore-bl-SchlafZi.sh und sendmore-bl-Kueche.sh. In diese müssen die jeweils zugehörenden IP- und MAC-Adressen eingetragen werden. Dann entscheidet man über den Aufruf, welche Bridge den Befehl bekommt. Dabei kann man die gelernten Codes für alle Bridges nutzen und muss sie nicht für jede Bridge neu anlernen. | |||
== Bekannte Probleme == | == Bekannte Probleme == | ||
Man kann mit dem dritten Skript nur einzelne Tastendrücke senden. Und der Aufruf von mehreren Befehlen nacheinander liegt so weit auseinander, dass das nicht als Folge von Befehlen ankommt, sondern jeweils als Einzelbefehle. Dafür kann man das 4. Skript ausprobieren. | Man kann mit dem dritten Skript nur einzelne Tastendrücke senden. Und der Aufruf von mehreren Befehlen nacheinander liegt so weit auseinander, dass das nicht als Folge von Befehlen ankommt, sondern jeweils als Einzelbefehle. Dafür kann man das 4. Skript ausprobieren. | ||
Einige User berichten von diesem Fehler: | |||
Traceback (most recent call last): | |||
File "/opt/BroadLink/send-bl.sh", line 34, in <module> | |||
device.send_data(myhex.decode('hex')) | |||
File "/usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/__init__.py", line 455, in send_data | |||
self.send_packet(0x6a, packet) | |||
File "/usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/__init__.py", line 250, in send_packet | |||
response = self.cs.recvfrom(1024) | |||
socket.timeout: timed out | |||
Abhilfe schafft, in der Datei "/usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/__init__.py" Zeile 249 | |||
den Timeout von 1 Sekunde auf z.B. 5 Sekunden zu stellen: self.cs.settimeout(5) | |||
Bei der Einrichtung via Smartphone-App gibt den AP-Modus: in diesem wird im Gateway ein WLAN-AP aktiviert, '''unverschlüsselt''', mit dem sich das Smartphone dann verbindet. Über das für Sniffer offene WLAN wird dann SSID und Passwort des lokalen WLAN übermittelt, worauf sich das Gateway versucht dort anzumelden. '''''Die Einrichtung über diesen Weg legt das WLAN Passwort für Sniffer ohne weiteren Aufwand offen. Das Risiko ist auf diese eine Übertragung begrenzt.''''' | |||
== Hinweis == | == Hinweis == | ||
Wenn alles funktioniert, kann man aus dem dritten Skript natürlich die Bildschirmausgaben löschen, da es ja in FHEM im Hintergrund aufgerufen wird. Umgekehrt kann man sie auch im 4. Skript wieder "freischalten", indem man die # vor den "print"-Anweisungen löscht. | Wenn alles funktioniert, kann man aus dem dritten Skript natürlich die Bildschirmausgaben löschen, da es ja in FHEM im Hintergrund aufgerufen wird. Umgekehrt kann man sie auch im 4. Skript wieder "freischalten", indem man die # vor den "print"-Anweisungen löscht. | ||
Gelegentlich auftretende Fehlermeldungen (die nur im Terminal sichtbar sind), tun der Funktion keinen Abbruch. | Gelegentlich auftretende Fehlermeldungen (die nur im Terminal sichtbar sind), tun der Funktion (bei mir) keinen Abbruch. | ||
[[Kategorie:Infrarot]] | [[Kategorie:Infrarot]] |
Aktuelle Version vom 12. November 2024, 16:05 Uhr
Beschreibung
Die chinesische Firma BroadLink stellt unter Anderem auch Gateways her, die sich per Wifi ansprechen lassen und Infrator (38KHz-IR) bzw. RF (433/315 MHz-RF) Komponenten fernsteuern können (https://www.ibroadlink.com/productinfo/762672.html).
Die Gateways werden mit Hilfe einer Android- oder iOS-App ("Intelligent Home Center for EU (IHC) oder "BroadLink - Universal TV Remote") angelernt.
Danach stellen sie die Möglichkeit bereit,
- Infrarot- (und ggf. RF-) Codes bzw. Code-Sequenzen zu erfassen und via WLAN als Parameter zu übermitteln und
- (gelernte) Codes an kompatible IR- bzw. RF-Empfänger zu versenden.
Die dazugehörige openAPI ist nicht öffentlich und unterliegt einer BroadLink NDA.
Zur praktischen Verwendung gibt es mehrere Schnittstellen:
- die offizielle App (https://www.ibroadlink.com/bleapp), mit der Codes angelernt, in der App gespeichert und im lokalen WLAN über die RM versendet werden können,
- die RM Bridge für Android-Geräte, die eine HTTP REST web API auf dem Androidgerät als Webservice bereitstellt,
- die Python-Bibliothek python-broadlink von Matthew Garrett (mjg59) für Server, auf denen Python lauffähig ist. Diese kann dann direkt per (Shell-)Skript aufgerufen werden aber auch noch schön gekapselt werden:
- Webservice für Python fähige Server. In dieser Form sind dann gelernte Sendebefehle elegant als HTTPMOD Objekte in FHEM integrierbar.
BroadLink RM mini
Broadlink | |
---|---|
Allgemein | |
Protokoll | Infrarot |
Typ | Gateway |
Kategorie | Infrarot |
Technische Details | |
Kommunikation | Infrarot 38 KHz Wifi 2.4GHz b/g/n |
Kanäle | 1 |
Betriebsspannung | 5V |
Leistungsaufnahme | max. 2,5W (max. 0,5A) standby ca. 0.85W |
Versorgung | Micro USB |
Abmessungen | 5.5 x 5.5 x 6.45 cm |
Sonstiges | |
Modulname | Broadlink |
Hersteller | BroadLink |
Der BroadLink RM mini 3 (wird nicht mehr hergestellt, evtl. noch bei Amazon / ebay erhätlich) ist ein WLAN zu Infrarot Gateway (ohne RF, vgl. RM Pro). Im Vergleich zum RM Pro ist die Sendeleistung deutlich schwächer, da nur ein IR-Transmitter verbaut ist.
BroadLink RM Pro
Broadlink | |
---|---|
Allgemein | |
Protokoll | Infrarot, RF |
Typ | Gateway |
Kategorie | Infrarot, RF |
Technische Details | |
Kommunikation | Infrarot 38 KHz RF 433/315 MHz Wifi 2.4GHz b/g/n |
Kanäle | 2 |
Betriebsspannung | 5V |
Leistungsaufnahme | max. 5W (max. 1A) ca. 1W standby |
Versorgung | Micro USB |
Abmessungen | 11 x 3,5 x 11,5 cm |
Sonstiges | |
Modulname | Broadlink |
Hersteller | BroadLink |
Der BroadLink RM Pro/RM3 (wird nicht mehr hergestellt, evtl. noch bei Amazon / ebay erhältlich) ist ein WLAN zu Infrarot- und RF Gateway. Der aktuelle Nachfolger ist der RMpro 4 (https://www.ibroadlink.com/productinfo/762672.html).
Der RM Pro verfügt im Vergleich zum RM mini über eine größere Reichweite, da 6+1 (Kreis und Mitte) IR-Transmitter verbaut sind.
(In der Version RM3 soll der unterstützte RF-Bereich inoffiziell sogar 142...1050 MHz betragen.)
Der RM Pro enthält auch einen Temperatursensor, der mindestens über die App ausgelesen und für Aktions-Regeln verwendet werden kann. Der Sensor ist offenbar nicht in allen Versionen verbaut bzw. kann oft nur als externer Sensor angeschlossen werden.
Es gab/gibt Vorgängerversionen:
- RM Home/RM1: "rote Version"; nur IR, ohne RF; schwache Sendeleistung
- RM Pro/RM2: "schwarze Version"; ID 10 002; IR und RF 433/315MHz; verstärkte IR-Sendeleistung (7 IR-Transmitter)
- (OEM Version) RM Plus: schwarz, keine Aufkleber, keine Beschriftungen, gerade, nicht abgerundete Oberseite... (soll intern baugleich mit RM Pro/RM3 sein).
Nutzung in FHEM
Modul
Achtung: Das Modul wird offenbar nicht mehr gepflegt und funktioniert bei vielen Nutzern nicht bzw. (nach Rücksetzen des Gateways) nicht mehr. Empfohlen wird aktuell der Einsatz der unten genannten python Module und der dort hinterlegten Skripte.
Es gibt das Modul Broadlink, mit dem Broadlink-Geräte in FHEM eingebunden werden können:
- rmpro (RM Pro)
- rmmini (RM mini)
- sp3 (SP3 - Schalter)
- sp3s (SP3S - Schalter mit aktueller Energieverbrauchsmessung)
s.a.: Forenthread
Webservice
Es gibt den Ansatz, auf dem FHEM-Server einen Webservice (pro Gateway) zu installieren und via HTTPMOD Befehle abzusetzen.
Skripte
Auf dem FHEM-Server werden die python Module mit den integrierten Skripten installiert und nur jeweils bei Bedarf angestoßen. So wird keine permanente Systemlast produziert. Die Reaktionsgeschwindigkeit ist nicht überwältigend, aber praxistauglich. (Ca 2-3 sec).
- Credits
- Die Python-API ist von dieser Github-Seite.
Hinweis
Mit diesem Vorgehen unterstützt das BroadLink sowohl IR als auch RF.
Vorgehen (Skripte)
Installation
Zunächst wird der Broadlink mit der App ins eigene Netz eingebunden. Hierzu der Anleitung in der App folgen.
Alternativ und ohne Notwendigkeit die App zu installieren kann der Broadlink auch über die python Skripte ins WLan gebracht werden, siehe https://github.com/mjg59/python-broadlink.
Auf dem FHEM-Rechner (z.B. Raspi) muss python (python3) und am besten git installiert sein. Ggf. muss auch noch simplejson und pip installiert werden.
sudo apt-get install python git pip sudo pip install simplejson
Verzeichnis erstellen und die Bibliothek installieren
sudo mkdir /opt/BroadLink sudo chown fhem.dialout /opt/BroadLink cd /opt/BroadLink sudo git clone https://github.com/mjg59/python-broadlink.git cd python-broadlink sudo python setup.py install cd ..
Skripte
Die python Module bringen eigene Skripte zum Anlernen und Senden von IR/RF commands mit. Sie liegen im Verzeichnis /opt/BroadLink/python-broadlink/cli. Die Verwendung wird hier beschrieben: https://github.com/mjg59/python-broadlink/tree/master/cli
Anleitung im Forum dazu: https://forum.fhem.de/index.php?topic=71972.msg1313044#msg1313044
In a nutshell: Broadlink finden:
broadlink_discovery
Die Daten des gefundene Gerätes in einem File speichern (siehe Shell Ausgabe), als Beispiel:
rmpro.device
Command anlernen und in File speichern:
broadlink_cli --device @rmpro.device --rflearn --learnfile TVon
Command senden:
broadlink_cli --device @rmpro.device --send @TVon
Integration in notify/DOIF:
{system("/opt/BroadLink/python-broadlink/cli/broadlink_cli --device \@/opt/BroadLink/python-broadlink/cli/rmpro.device --send \@/opt/BroadLink/python-broadlink/cli/TVOn")}
== Die folgenden Skripte bzw der ganze Abschnitt ist veraltet == Die hier zitierten Skripte laufen nicht mehr unter python3. Sie sind auch nicht mehr erforderlich, da die python Module eigene Skripte mitbringen. Diese liegen im Verzeichnis /opt/BroadLink/python-broadlink/cli. Die Verwendung wird hier beschrieben: https://github.com/mjg59/python-broadlink/tree/master/cli
In das Verzeichnis dann noch die vier Skripte kopieren.
1. search-bl.sh
#!/usr/bin/python
#Script to locate Broadlink devices on local network by Graeme Brown Dec 23 2016
#These must be set up using the Broadlink app first!
import broadlink
import time
print "************************************************"
print "Using python library created by Matthew Garrett"
print "https://github.com/mjg59/python-broadlink"
print "************************************************"
print "Scanning network for Broadlink devices...."
mydevices = broadlink.discover(timeout=5)
print "Found " + str(len(mydevices )) + " broadlink devices"
time.sleep(1)
print "..............."
for index, item in enumerate(mydevices):
mydevices[index].auth()
ipadd = mydevices[index].host
ipadd = str(ipadd)
print "Device " + str(index + 1) +" Host address = " + ipadd[1:19]
macadd = ''.join(format(x, '02x') for x in mydevices[index].mac[::-1])
macadd = str(macadd)
mymacadd = macadd[:2] + " " + macadd[2:4] + " " + macadd[4:6] + " " + macadd[6:8] + " " + macadd[8:10] + " " + macadd[10:12]
print "Device " + str(index + 1) +" MAC address = " + mymacadd
print "..............."
2. learn-bl.sh
#!/usr/bin/python
import broadlink
import time
import sys
device = broadlink.rm(host=("<your RM3 IP address>",80), mac=bytearray.fromhex("<your RM3 mac>"))
print "Connecting to Broadlink device...."
device.auth()
time.sleep(1)
print "Connected...."
codeName = raw_input("Bitte Namen f. den Code eingeben, z.B. tvOff ")
time.sleep(1)
print "Wenn die LED am Broadlink angeht, innerhalb von 5 Sek die FB-Taste druecken "
device.host
device.enter_learning()
time.sleep(5)
ir_packet = device.check_data()
#convert code to hex
myhex = str(ir_packet).encode('hex');
if ir_packet == None:
print "Kein Code empfangen - Ende"
sys.exit()
else:
# record learned hex code to file
f = open(codeName +".txt",'w')
f.write(myhex)
f.close()
print "Hex code gespeichert unter " + codeName + ".txt"
3. send-bl.sh
#!/usr/bin/python
import broadlink
import time
import sys
try:
fileName = sys.argv[1]
except IndexError:
fileName = 'null'
if fileName == 'null':
print "Error - kein Dateiname angegeben"
sys.exit()
else:
device = broadlink.rm(host=("<your RM3 IP address>",80), mac=bytearray.fromhex("<your RM3 mac>"))
print "Connecting to Broadlink device...."
device.auth()
time.sleep(1)
print "Connected...."
time.sleep(1)
device.host
file = open(fileName, 'r')
myhex = file.read()
device.send_data(myhex.decode('hex'))
print "Code Sent...."
4. sendmore-bl.sh
#!/usr/bin/python
import broadlink
import time
import sys
try:
fileName = sys.argv[1]
except IndexError:
fileName = 'null'
if fileName == 'null':
print "Error - kein Dateiname angegeben"
sys.exit()
else:
device = broadlink.rm(host=("<your RM3 IP address>",80), mac=bytearray.fromhex("<your RM3 mac>"))
# print "Connecting to Broadlink device...."
device.auth()
time.sleep(1)
# print "Connected...."
device.host
# Pfad aus Aufruf extrahieren und dann den Befehl selbst vom Stapel nehmen
Parameter = sys.argv
# Name des Befehls selbst
filename1 = Parameter[0]
# Gesamtlaenge
FileNameLaenge = len(filename1)
# in Bestandteile aufteilen
filearray = filename1.split("/")
# den letzten identifizieren. Das ist der eigentliche Befehl
splitNo = len(filename1.split("/"))
lastElement = filearray[splitNo-1]
# den vom Aufruf wegschneiden, um den Pfad zu bekommen
FileNameAbzug = len(lastElement)
Ende = FileNameLaenge - FileNameAbzug
Pfad = filename1[0:Ende]
# Befehl aus der Liste loeschen, damit die Parameter bleiben
Parameter.pop(0)
# repeat for each argument
for argument in Parameter:
fileName = Pfad + argument +".txt"
file = open(fileName, 'r')
myhex = file.read()
device.send_data(myhex.decode('hex'))
time.sleep(0.5)
# print "Code Sent...."
sys.exit()
Dann in dem Verzeichnis noch die Dateibesitzer wechseln und die Skripte ausführbar machen:
sudo chown fhem.dialout *.sh sudo chmod 744 *.sh
Konfiguration
Nun gilt es, die IP und MAC-Adresse des Broadlink herauszufinden. Entweder man schaut im Router nach, benutzt die Android-App FING oder das Script "search-bl.sh". Dazu
sudo ./search-bl.sh
Beispielhaft kommt dann:
************************************************ Using python library created by Matthew Garrett https://github.com/mjg59/python-broadlink ************************************************ Scanning network for Broadlink devices.... Found 1 broadlink devices ............... Device 1 Host address = '192.168.1.16', 8 Device 1 MAC address = b4 43 0d aa b3 54 ...............
Für später sind die IP Adresse und die MAC Adresse wichtig. Diese müssen im zweiten bis vierten Script eingetragen werden!! Ich benutze da den Editor nano.
sudo nano ./learn-bl.sh sudo nano ./send-bl.sh sudo nano ./sendmore-bl.sh
Dabei die doppelten Anführungszeichen stehen lassen und an der passenden Stelle jeweils die IP und an der anderen die MAC-Adresse (mit Leerzeichen anstelle der Doppelpunkte) eintragen. Das erste Script liefert die auch so formatiert. Wenn man sie aber aus dem Router hat oder so, dann eben beachten!
Das zweite Script dient zum Anlernen des Fernbedienungscodes und Abspeichern in jeweils einer txt Datei. Das Script verbindet sich mit dem Broadlink und erwartet einen Namen für den Code. Dann hat man 5 Sec Zeit, um die entsprechende Fernbedienungstaste zu drücken, um den Code anzulernen. Dieser wird dann in eine Datei mit dem Codenamen gespeichert. So kann man alle seine zu verwendenden Codes nacheinander anlernen.
sudo ./learn-bl.sh
zeigt Folgendes an:
Connecting to Broadlink device.... Connected.... Bitte Namen für den Code eingeben, z.B. tvOff test Wenn die LED am Broadlink angeht, innerhalb von 5 Sek die FB-Taste drücken Hex code gespeichert unter test.txt
Betrieb
Mit dem dritten und vierten Script kann man den Code wieder senden. Auch hier wieder die eigene IP Adresse und MAC Adresse des Broadlink von oben eintragen.
Der Aufruf im Terminal ist für das dritte Skript:
sudo /opt/BroadLink/send-bl.sh /opt/BroadLink/test.txt
Wichtig ist bei diesem Skript, für das Textfile den ganzen Pfad anzugeben, und der in test.txt gelernte Befehl wird gesendet.
Aus FHEM heraus kann dann z.B. auf der Eingabezeile gesendet werden:
"/opt/BroadLink/send-bl.sh /opt/BroadLink/test.txt"
Dabei sind die " " wichtig, da es sich um einen Shell-Befehl handelt.
So kann man das dann auch in at-, notify- oder DOIFs verwenden. Hier mal ein Beispiel:
define atAbendsLichtAn at *19:00:00 "/opt/BroadLink/send-bl.sh /opt/BroadLink/FB1An.txt"
Das 4. Skript "sendmore-bl.sh" ist eine Modifikation des Send-Skripts. Die Unterschiede sind:
1. Es sendet auch mehrere Codes nacheinander, also z. B. auch Zahlenfolgen wie "0202".
2. Es nimmt an, dass die Codes als .txt-Dateien im selben Verzeichnis liegen wie das Skript.
3. Das Skript gibt keine Meldungen aus. Die sind beim Aufruf aus FHEM heraus auch unnötig.
Das Skript extrahiert aus dem Befehlsaufruf den Pfad und ergänzt ihn jeweils bei den Parametern sowie um die Dateierweiterung ".txt". Daher kann der Aufruf dann kürzer sein. Angenommen, es sind die Code-Dateien 1.txt, 2.txt, 3.txt usw. im selben Verzeichnis wie die Skripte vorhanden, lautet der Aufruf im Terminal dann z.B. nur noch:
/opt/BroadLink/sendmore-bl.sh 1 2 3 2
Im "define" lautet das oben genannte Beispiel:
define atAbendsLichtAn at *19:00:00 "/opt/BroadLink/sendmore-bl.sh FB1An"
Feintuning
Im 4. Skript definiert die Zeile (kurz vor Ende)
time.sleep(0.5)
die Wartezeit zwischen zwei gesendeten "Tasten". Bei vielen Geräten funktioniert das auch, wenn man die Zeile auskommentiert oder löscht. Dann werden die Signale schneller hintereinander gesendet. Man kann hier natürlich auch den Wert 0.5 verändern. Einfach ausprobieren!
Mehrere Bridges betreiben
Um mehrere Bridges nebeneinander zu betreiben, braucht man für jedes Gerät das dritte oder vierte Skript unter eigenem Namen, also z.B. sendmore-bl-WoZi.sh und sendmore-bl-SchlafZi.sh und sendmore-bl-Kueche.sh. In diese müssen die jeweils zugehörenden IP- und MAC-Adressen eingetragen werden. Dann entscheidet man über den Aufruf, welche Bridge den Befehl bekommt. Dabei kann man die gelernten Codes für alle Bridges nutzen und muss sie nicht für jede Bridge neu anlernen.
Bekannte Probleme
Man kann mit dem dritten Skript nur einzelne Tastendrücke senden. Und der Aufruf von mehreren Befehlen nacheinander liegt so weit auseinander, dass das nicht als Folge von Befehlen ankommt, sondern jeweils als Einzelbefehle. Dafür kann man das 4. Skript ausprobieren.
Einige User berichten von diesem Fehler:
Traceback (most recent call last): File "/opt/BroadLink/send-bl.sh", line 34, in <module> device.send_data(myhex.decode('hex')) File "/usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/__init__.py", line 455, in send_data self.send_packet(0x6a, packet) File "/usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/__init__.py", line 250, in send_packet response = self.cs.recvfrom(1024) socket.timeout: timed out
Abhilfe schafft, in der Datei "/usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/__init__.py" Zeile 249 den Timeout von 1 Sekunde auf z.B. 5 Sekunden zu stellen: self.cs.settimeout(5)
Bei der Einrichtung via Smartphone-App gibt den AP-Modus: in diesem wird im Gateway ein WLAN-AP aktiviert, unverschlüsselt, mit dem sich das Smartphone dann verbindet. Über das für Sniffer offene WLAN wird dann SSID und Passwort des lokalen WLAN übermittelt, worauf sich das Gateway versucht dort anzumelden. Die Einrichtung über diesen Weg legt das WLAN Passwort für Sniffer ohne weiteren Aufwand offen. Das Risiko ist auf diese eine Übertragung begrenzt.
Hinweis
Wenn alles funktioniert, kann man aus dem dritten Skript natürlich die Bildschirmausgaben löschen, da es ja in FHEM im Hintergrund aufgerufen wird. Umgekehrt kann man sie auch im 4. Skript wieder "freischalten", indem man die # vor den "print"-Anweisungen löscht.
Gelegentlich auftretende Fehlermeldungen (die nur im Terminal sichtbar sind), tun der Funktion (bei mir) keinen Abbruch.