Broadlink als IR + HF gateway

Begonnen von palicaj, 17 Juni 2015, 15:42:39

Vorheriges Thema - Nächstes Thema

Hakanzaza

hallo Würde es auch gerne einrichten nur ich komme mit dieser API Anleitung nicht zu recht gibst die eventuell in deutsch??

rr725

Zitat von: Hakanzaza am 02 März 2017, 13:22:48
hallo Würde es auch gerne einrichten nur ich komme mit dieser API Anleitung nicht zu recht gibst die eventuell in deutsch??
keine ahnung, ob es die anleitung in deutsch gibt- schon gesucht ?
eigentlich ist's ganz simpel:
http://rm-bridge.fun2code.de/rm_manage/index.html
dort einen code erzeugen/anlernen, welcher dann unten angezeigt wird.
dies ist der komplette http string. mehr braucht's nicht


fstefan1960

#17
Hallo,

ich habe das alles sauber installiert. Beim Aufruf via Browser mit
http://192.168.1.19:1234/command?cmd=list
bekomme ich
list - Lists all commands
sendData <hexData> - sends the given hex data
learnCode - puts the broadlink link in learning mode. press ir button while led is white


Wenn ich
192.168.1.19:1234/command?cmd=learnCode
aufrufe, egal, ob learncode oder learnCode, dann gibt es
<type 'exceptions.ValueError'> at /command
non-hexadecimal number found in fromhex() arg at position 2
Python /opt/rmBridge/bl_webservice.py in GET, line 27
Web GET http://192.168.1.19:1234/command


Gleiches auch bei sendData.

Auf dem Server kommt:
192.168.1.189:63868 - - [10/Mar/2017 18:50:44] "HTTP/1.1 GET /command" - 200 OK
Versuche Aufbau zu Device '192.168.1.164'(B3:12:0D:17:93:A2) ...
Keine Verbindung zum Device '192.168.1.164'(B3:12:0D:17:93:A2) moeglich
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 239, in process
    return self.handle()
  File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 230, in handle
    return self._delegate(fn, self.fvars, args)
  File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 462, in _delegate
    return handle_class(cls)
  File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 438, in handle_class
    return tocall(*args)
  File "/opt/rmBridge/bl_webservice.py", line 28, in GET
    web.device = broadlink.rm(host=(web.broadLinkIP,80), mac=bytearray.fromhex(web.broadLinkMac))
ValueError: non-hexadecimal number found in fromhex() arg at position 2

192.168.1.189:63872 - - [10/Mar/2017 18:52:26] "HTTP/1.1 GET /command" - 500 Internal Server Error


???? Kann mir da jemand weiterhelfen?



FHEM auf PC: CUL868, CUL 443, HM_LAN, JeeLink
FHEM auf Raspi: CUL868
div. LaCrosse Temp/Hum-Sensoren, HM-Heizkörperventile, Schaltaktoren, etc.

fstefan1960

#18
Die Fehlermeldung weist ja darauf hin, dass das BroadLink-Gateway nicht erreicht wird. Ein Ping auf die IP dort ist erfolgreich. Allerdings ergibt ein Portscan mit nmap zumindest

Scanning Broadlink-RMPROSUB-ef-93-a2.fritz.box (192.168.1.164) [1000 ports]
Completed Connect Scan at 20:29, 6.35s elapsed (1000 total ports)
...
Nmap scan report for Broadlink-RMPROSUB-ef-93-a2.fritz.box (192.168.1.164)
Host is up (0.0045s latency).
All 1000 scanned ports on Broadlink-RMPROSUB-ef-93-a2.fritz.box (192.168.1.164) are closed


ein anderer Scan sagt:

Discovered open port 80/udp on 192.168.1.164
Discovered open|filtered port 80/udp on Broadlink-RMPROSUB-ef-93-a2.fritz.box (192.168.1.164) is actually open
Discovered open port 49154/udp on 192.168.1.164
Discovered open|filtered port 49154/udp on Broadlink-RMPROSUB-ef-93-a2.fritz.box (192.168.1.164) is actually open
Service scan Timing: About 50.00% done; ETC: 20:43 (0:00:52 remaining)
Completed Service scan at 20:42, 57.54s elapsed (2 services on 1 host)

FHEM auf PC: CUL868, CUL 443, HM_LAN, JeeLink
FHEM auf Raspi: CUL868
div. LaCrosse Temp/Hum-Sensoren, HM-Heizkörperventile, Schaltaktoren, etc.

rr725

keine ahnung was du da installier  hast und probierst....sorry hab jetzt keine zeit die historie hier durchzulesen. eigentlich, um die http requests einer fernbedienung, welche man anlernen will zu bekommen muss man nichts installieren. ich verstehe nicht was du da machst, aber liest sich kompliziert :-)

gukafbo

Hallo!

Die MAC-Adresse muss ohne die Doppelpunkte angegeben werden, dann sollte es funktionieren.
Habe auch erst lange herumprobiert...

fstefan1960

@rr725
Installation
    Installation der Broadlink API aus dem GitHub https://github.com/mjg59/python-broadlink
    Nach der Installation sollte ein Ordner "python-broadlink" vorhanden sein mit ein paar Dateien und Ordnern
    Installation des web.px Frameworks (Wurde benutzt um die Erstellung des Webservices zu beschleunigen). Anleitung hier http://webpy.org/
    Kopieren der angefügten Dateien auf das Dateisystem


Dem Hinweis mit den Doppelpunkten gehe ich gerne mal nach.
FHEM auf PC: CUL868, CUL 443, HM_LAN, JeeLink
FHEM auf Raspi: CUL868
div. LaCrosse Temp/Hum-Sensoren, HM-Heizkörperventile, Schaltaktoren, etc.

fstefan1960

#22
Mit diesem Vorgehen unterstützt das BroadLink bei mir sowohl IR als auch RF.

Meine Lösung basiert auf https://www.amzecho.de/broadlink-f71/broadlink-ohne-rm-bridge-t1542.html.. Von dort sind auch die Skripte, die ich nur eingedeutscht habe. Wer lieber Englisch benutzt, nimmt die bitte von dort. Die Python-API ist von https://github.com/mjg59/python-broadlink.

Zunächst wird der (?) Broadlink mit der App ins eigene Netz eingebunden. http://www.banggood.com/Broadlink-RM-pro-Wi-Fi-Remote-Wi-Fi-Remote-Controller-For-Smart-Home-p-946427.html
1.Plug in your RM-pro / RM-home,your will find that the blue Wi-Fi indicating light is on and flashing fast (5 times per second). If not, please reset your device.
2.Firstly, link your phone to your own Wi-Fi. Secondly,operate your "Broadlink e-control " on your smart phone. Third, press the "+" on the top right hand and select "add remote control".
3.Input WI-Fi password to configure and click "configure" on the button.
4.The blue Wi-Fi indicating light is flashing slowly now (once per second). After being wait for about 60 seconds,the configuration is finish. The RM is linked to your smartphone through your own Wi-Fi.The blue Wi-Fi indicating light is off at this moment.


Bei mir läuft das Ganze auf demselben Rechner wie FHEM. Auf dem Rechner muss python und am besten auch git installiert sein. Ggf. muss auch noch simplejson installiert werden.
Da ich mich nicht als user fhem einlogge, sind da viele "sudo"s drin.

sudo apt-get install python git
sudo pip install simplejson


Ich habe dann ein Verzeichnis dafür erstellt:
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 ..


In das Verzeichnis dann noch die drei Scripte aus den Anhängen 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...."


Dann in dem Verzeichnis noch die Dateibesitzer wechseln und die Skripte ausführbar machen:

sudo chown fhem.dialout *.sh
sudo chmod 744 *.sh


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.*.*', 8
Device 1 MAC address = b4 43 0d ** ** **
...............


Für später sind die IP Adresse und die MAC Adresse wichtig. Diese müssen im zweiten und dritten Script eingetragen werden!! Ich benutze da den Editor nano.
sudo nano ./learn-bl.sh

Dabei die doppelten Anführungszeichen stehen lassen und an der einen 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 eine txt Datei.
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


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.

Mit dem dritten 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:
sudo /optBroadLink/send-bl.sh /opt/BroadLink/test.txt

Wichtig ist 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"
FHEM auf PC: CUL868, CUL 443, HM_LAN, JeeLink
FHEM auf Raspi: CUL868
div. LaCrosse Temp/Hum-Sensoren, HM-Heizkörperventile, Schaltaktoren, etc.

Marbru

Danke für die super Beschreibung!

Es hat alles auf anhieb funktioniert!!! :)

Nur noch eine Frage:

Wie bekomme ich es hin, noch 1-2 weitere Broadlink zu verbinden?
Bzw. was muss ich beachten, umstricken, wiederholen?

Danke....!  ;) :)

fstefan1960

Hey, das freut mich.

Um einen anderen Broadlink zu schalten, musst du (nur) das send-bl.sh - Skript für jeden Broadlink einmal kopieren. Nenn die Skripte dann meinetwegen send-bl_Wohnzimmer.sh und send-bl_Schlafzimmer.sh usw.
Dann in dem jeweiligen Skript die IP und die MAC ändern, so dass dieses Skript eben den Wohnzimmer- / Schlafzimmer- oder wer weiß welchen aufruft.

Und dann musst du aufrufen:
/opt/Broadlink/send-bl_Wohnzimmer.sh /opt/BroadLink/test.txt

Dabei kannst du die gelernten *.txt-Dateien für alle Geräte nutzen.

FHEM auf PC: CUL868, CUL 443, HM_LAN, JeeLink
FHEM auf Raspi: CUL868
div. LaCrosse Temp/Hum-Sensoren, HM-Heizkörperventile, Schaltaktoren, etc.

Stephan Labude

@fstefan1960

bräuchte bitte etwas Hilfe, irgendwo klemmt es bei mir.
"sudo apt-get install python git" lief problemlos durch, bei "sudo pip install simplejson" kam folgende Fehlermeldung:
"sudo: pip: command not found". Angemeldet bin ich als User "fhem".
Habe dann die drei Dateien in das Verzeichnis "/opt/BroadLink" kopiert, rechte liegen bei fhem dialout, ausführbar sind sie auch,
das anlernen hat auch funktioniert, beim Senden kommt nach Aufruf von "sudo ./send-bl.sh /opt/BroadLink/tv_sz_4.txt" aber folgende Fehlermeldung:
"sudo: ./send-bl.sh: command not found". Ich weiß auch, dass das Problem mal wieder vor dem Gerät sitzt, habe aber keine Idee, wo ich ansetzen muss, zumal suchen und anlernen funktioniert haben.

Danke!





Marbru

@fstefan1960

Danke für die schnelle Antwort!

Ja, so sollte es funktionieren...! :)

Dann werde ich mal noch zwei von den teilen bestellen!
So kann ich auch die letzten verbliebenen IR Geräte in Fhem einbinden.
Und das für günstige 24€ eine echte alternative zum Harmony Hub den ich einfach zu teuer finde!
Zudem geht es bei mir nur ums ein/ausschalten von Geräten....den Rest erledigt Kodi! ;-)

Daumen hoch! :)

fstefan1960

@ StephanLabude

Wenn bei Dir pip nicht installiert ist, dann musst du entsprechend

sudo apt-get install pip

eingeben. Dann am besten die Sachen ab da nochmal durchturnen.

Dass das "command not found" kommt, deutet darauf hin, dass entweder
- das Skript nicht existiert oder
- die Rechte zum Ausführen nicht passen oder
- du die Datei von einem anderen Ort aus aufrufst.

Probier als erstes mal (müsste auch ohne sudo gehen):
sudo /opt/BroadLink/send-bl.sh /opt/BroadLink/tv_sz_4.txt

Wenn das klappt, dann eben immer den ganzen Pfad mit angeben, also das "/opt/BroadLink/" vorne dran ...

Sonst gib mal ein:
sudo ls -l /opt/BroadLink

Dabei sollten diese Zeilen vorkommen
-rwxrwxrwx 1 fhem dialout  795 Mär 10 21:14 learn-bl.sh
-rwxr--r-- 1 fhem dialout 1106 Mär 10 21:09 search-bl.sh
-rwxr--r-- 1 fhem dialout  556 Mär 10 21:21 send-bl.sh


Wichtig ist dabei, dass die Datei tatsächlich genau diesen Namen trägt und vorne die Rechte "rwx" stehen.

Falls es noch nicht klappt, meld dich nochmal.
FHEM auf PC: CUL868, CUL 443, HM_LAN, JeeLink
FHEM auf Raspi: CUL868
div. LaCrosse Temp/Hum-Sensoren, HM-Heizkörperventile, Schaltaktoren, etc.

Stephan Labude

@fstefan1960

es klappt, Danke!!!! :D

"sudo /opt/BroadLink/send-bl.sh /opt/BroadLink/tv_sz_4.txt" funktioniert.

VG



fstefan1960

Ich habe im WIKI einen Artikel "Broadlink" geschrieben. Dort gibt es auch ein Skript, das mehrere Tasten nacheinander senden kann. Da ich das im Zug geschrieben habe und die nächsten Tage nicht daheim bin, konnte ich es noch nicht testen.
Bitte mal testen und ggf. Rückmeldung geben.
Auch der Befehlsaufruf wurde "verschlankt".
FHEM auf PC: CUL868, CUL 443, HM_LAN, JeeLink
FHEM auf Raspi: CUL868
div. LaCrosse Temp/Hum-Sensoren, HM-Heizkörperventile, Schaltaktoren, etc.