Broadlink Modul

Begonnen von daniel2311, 14 Mai 2017, 22:51:30

Vorheriges Thema - Nächstes Thema

Robi72

@connormcl: welche python Version nutzt Du? 2.x oder 3.x? Wenn ich nach dem wiki gehe und die Scriptversion versuche, scheitere ich bereits bei der Installation:
sudo apt-get install python git pip
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
E: Paket pip kann nicht gefunden werden.

Ich habe versucht einzeln zu installieren, pip geht nicht durch:
sudo apt-get install pip
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
E: Paket pip kann nicht gefunden werden.

Der nächste Schritt wird zwar durchgeführt, jedoch mit Synthaxfehlern (s. Dateianhang)
sudo python setup.py install
Ich nehme an, dass das alles mit der alten Python2 Version zu tun hat. Also habe ich in versucht das ganze auf Python3 umzustellen, da ja auf github auch auf pip3 verwiesen wird, die Skripte sind dort auch mit python3 ausgewiesen. Egal was ich mache, ich bekomme ständig Fehler. Ein update/upgrade meines systems führt dazu, dass mein 'buster' auf 'bullseye" upgegraded wird und anschließend gar nichts mehr geht - musste bereits einmal Image zurückspielen.

Das einzige Verfahren, wo ich halbwegs weiterkomme ist dieses: https://github.com/mjg59/python-broadlink. Ich kann den Broadlink zum Anlernen bringen, die Daten prüfen und auch wieder senden auf pyhton3 Konsole. Nur wie extrahiere ich den gelernten Befehl, um ihn entsprechend aus FHEM zu senden?

Robi72

So, es ist zumindest fast geschafft! :D ;D :D

Ich habe eine Kombination aus wiki https://wiki.fhem.de/wiki/Broadlink und github https://github.com/mjg59/python-broadlink hinbekommen. Für alle die, die das gleiche Problem/Phänomen unter Buster/PI3/Broadlink RM4Pro und den verschiedenen Python Versionen haben:
Mit dem Befehl print(packet) den ausgebebenen ir-hexcode in eine Datei packen und in Fhem weiterverarbeiten.

Das Anlernen:
python3
import broadlink
broadlink.setup('Eigene SSID eintragen', 'Eigenen WLAN CODE eintragen, 3)
device = broadlink.hello('IP des Broadlinks eintragen')
device.auth()
device.enter_learning()
packet = device.check_data()
device.send_data(packet)
print(packet)


Die Ausgabe des IR Hex-Codes mit dem folgenden Code in eine *.py Datei im Verzeichnis /opt/BroadLink anlegen:

#!/usr/bin/python3
import broadlink
broadlink.setup('Eigene SSID eintragen', 'Eigenen WLAN CODE eintragen, 3)
device = broadlink.hello('IP des Broadlinks')
device.auth()
device.send_data(b'&\x00f\x00\x90\x95\x136\x13\x12\x136\x136\x13\x12\x137\x12\x12\x13\x12\x136\x13\x12\x136\x137\x13\x11\x137\x13\x12\x12\x12\x13\x12\x136\x137\x13\x11\x137\x136\x13\x12\x13\x12\x127\x13\x12\x12\x12\x137\x12\x12\x13\x12\x100\x137\x13\x00\x05\xb4\x91\x95\x13\x12\x13\x00\x0cp\x91\x95\x13\x12\x13\x00\x0cp\x91\x95\x13\x12\x00\x00\x0cp\x91\x95\x13\x12\x12\x00\r\x00')


Der *.py Datei Rechte für fhem vergeben und in FHEM in der Komandozeile zwischen " " ausführen:

"/opt/BroadLink/Dateiname.py"

Vielleicht hilft es dem einen oder anderen weiter, der die gleiche Herausforderung hat!
Was ich noch nicht hinbekommen habe, ist wie man RF Codes lesen kann. Die Anweisung auf der github-Seite führt zum teils bekannten Fehler the dvice storage is full:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.7/dist-packages/broadlink/remote.py", line 37, in check_data
    return self._send(0x4)
  File "/usr/local/lib/python3.7/dist-packages/broadlink/remote.py", line 82, in _send
    e.check_error(resp[0x22:0x24])
  File "/usr/local/lib/python3.7/dist-packages/broadlink/exceptions.py", line 152, in check_error
    raise exception(error_code)
broadlink.exceptions.StorageError: [Errno -5] The device storage is full


Wäre euch dankbar, falls jemand eine Idee hat.

Taifun

Zitat von: MadMax-FHEM am 09 Januar 2022, 10:57:35
.......

Dort wird erwähnt, dass man für lokale Nutzung die Anmeldung an/per App NICHT abschließen soll/darf (klingt bei dir als wärst du schon "zu weit gegangen" ;)  )...
...und irgendwas mit lokaler Nutzung "freischalten" muss...
(bin nur drüber geflogen)

......
Gruß, Joachim

Hi, ich habe auch lange gekämpft, bis ich in der App die Einstellung "Sperrvorrichtung" gefunden habe. Nachdem ich die ausgeschaltet hatte redet es mit FHEM.
Vielleich hilft diese Information ja weiter ;-)

Gruß Christoph 
IntelNUC -> FHEM, MySQL, IOBroker und VIS
BananaPiPro, 2xRaspberryPi 3 -> FHEM, presenced, 

HM & HMIP, HUE, Bluetooth, WiFi, FS20, LaCrosse, WH1080, BME280, DHT22

benedikt-wue

#183
Hallo,
ich habe ein kleines Problem.
Ich habe meine FHEM - Installation auf ein neues System migriert, was auch irgendwann funktioniert hat.
Mit Hilfe des Broadlink - Moduls hatte ich mir eine grafische Oberfläche in TabletUI zusammengebastelt zur Steuerung meines TV´s.
Leider funktioniert das auf dem neuen System nicht, da ich das Broadlink - Modul nicht einbinden kann, da er immer möchte, dass ich OpenSSL/AES installiere. Wäre ja auch in Ordnung, allerdings schaffe ich genau das nicht :-)
Wenn ich sudo cpan Crypt/OpenSSL/AES.pm in der Shell eingebe, kommt nach etwa 30 Sekunden die Fehlermeldung "Getötet" und es geht nicht weiter... habe ich irgendwelche Grundvoraussetzungen für die Installation vergessen? Würde mich über Hilfe freuen!

Edith:habe es hinbekommen... Nun noch eine weitere Frage: wenn ich die broadlink - Datei aus dem alten System aus dem Ordner /opt/fhem/Log auf das neue System kopiere, kennt FHEM dann die Befehle wieder?

kamp

#184
Ich habe meinen alten RM mini 3 ausgegraben, da ich meine Klimaanlage damit per FHEM steuern möchte. Ich scheitere auch daran, dass ich ihn nicht authentifizieren lassen kann. In der App habe ich "Sperrvorrichtung" ausgeschalten. Aber was ist damit gemeint, dass man die Einrichtung nicht zu Ende machen darf? Ab welchem Punkt konkret muss man die Einrichtung abbrechen (und wie? App schließen, Gerät vom Strom nehmen...?)

EDIT: So wie das auf der zuvor verlinkten Seite zu HA klappt es jedenfalls nicht. Ich habe das Gerät neu verbunden und bevor ich es einem Raum hinzugefügt hatte, die Installation per App abgebrochen. Jedenfalls ist das Gerät im WLAN verbunden und ich kann auch einen Ping ausführen. Im FHEM jedoch immer noch: authentication failed - device not connected? - response length: 56

EDIT2: Sollte man Module die keinen Maintainer mehr haben und offenbar bei niemandem mehr funktionieren nicht löschen? Der Ersteller war seit 2021 nicht mehr aktiv.

hapege

Hallo,

nachdem ich meinen jahrelang gut laufenden RMpro zurücksetzen musste, laufe ich nun auch in den Fehler
"authentication failed - device not connected? - response length: 56"Hat vorher klaglos funktioniert, offenbar setzt das Zurücksetzen des RMpro irgendetwas in fhem zurück, so dass sich der RMpro nicht mehr über das Modul anlernen lässt :(
Hat jemand schon eine Lösung gefunden?


Ich bin jetzt auf die Skripte umgestiegen, die im Wiki genannt sind. Leider sind die gnadenlos veraltet, sie laufen so nicht mehr unter python3.
Ich habe sie "entschlackt" wie Robi72 oben, nur noch ein bisschen schlanker. Den WLAN setup
broadlink.setup('Eigene SSID eintragen', 'Eigenen WLAN CODE eintragen, 3)
brauchts m.E. nicht mehr.
Mein send-Skript für RF sieht so aus:
#!/usr/bin/python3
import broadlink
device = broadlink.hello('192.168.xxx.xxx')
device.auth()
device.send_data(b'<daten hier hinkopieren>')

Anlernen für RF ist etwas "brute force" gebastelt, das Schreiben als binärcode in eine Datei habe ich nicht hinbekommen (geschrieben wir der in hex gewandelte Code) - ich kopiere das Datenpaket einfach manuell in das send-Skript:

#!/usr/bin/python3

import broadlink
import time
import sys

device = broadlink.hello('192.168.xxx.xxx')

print ("Connecting to Broadlink device....")
device.auth()
time.sleep(1)
print ("Connected....")

codeName = input("Bitte Namen f. den Code eingeben, z.B. tvOff ")
time.sleep(1)
device.host
print ("Wenn die LED am Broadlink angeht, die FB Taste LANG (ca 8s) drücken")
print ("nach 10s gehts weiter...")
device.sweep_frequency()
time.sleep(10)
ok = device.check_frequency()
print (ok)

if ok  == False:
   print ("Kein Code empfangen - Ende")
   device.cancel_sweep_frequency()
   sys.exit()
else:
  print ("Code empfangen, weiter gehts...")

print ("Taste loslassen!")
time.sleep(2)

print ("Jetzt die die FB-Taste KURZ druecken ")
device.find_rf_packet()

time.sleep(5)
rf_packet = device.check_data()

print (rf_packet)

myhex = rf_packet.hex();

if rf_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 ("als hex code gespeichert unter " + codeName + ".txt")
Developer: 70_ESCVP21net.pm, 70_SVDRP.pm
Mitglied FHEM e.V.

hapege

Update/Korrektur:
Geht auch ganz ohne die Skripte - die aktuelle Version des python tools bringt eine eigene CLI zum lernen und senden mit:
broadlink_cli --device @BEDROOM.device --rflearn --learnfile LG-TV.powerbroadlink_cli --device @BEDROOM.device --send @LG-TV.power
Das device findet man ganauso komfortabel via
broadlink_discovery
Läuft problemlos mit einem rmpro uns einem rm4pro :)

Einziger Haken: Über das "@" in den Befehlen stolpert fhem, wenn man die commands in einen notify/doif verwendet:

{system("broadlink_cli --device @rmpro --send @LG-TV.power")}geht so nicht!

Mein Workaround:
Ein kleines shell script, das ich mit Parametern aus fhem aufrufe.
SKript:
#/bin/sh
#echo $1 $2
cd  /opt/BroadLink/python-broadlink/cli
./broadlink_cli --device @$1 --send @$2

fhem notify/doif:
{system("/opt/BroadLink/python-broadlink/cli/sendRF.sh rmpro LG-TV.power");return}
Developer: 70_ESCVP21net.pm, 70_SVDRP.pm
Mitglied FHEM e.V.

MadMax-FHEM

Doppeln, also @@ statt @ schon probiert?

Oder auch \@

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

hapege

Hi,

nice - "@@" geht nicht, "\@<pfad>" geht :)
{system("/opt/BroadLink/python-broadlink/cli/broadlink_cli --device \@/opt/BroadLink/python-broadlink/cli/rmpro --send \@/opt/BroadLink/python-broadlink/cli/TVOn")}
Mit dem sendRF script ist es nur etwas schöner lesbar.
Danke für den Tipp!
Developer: 70_ESCVP21net.pm, 70_SVDRP.pm
Mitglied FHEM e.V.

hapege

Update: Ich habe das Wiki zum Modul aktualisiert. Das Modul selbst bekomme ich nicht (mehr) zum Laufen, der Maintainer liest hier offenbar nicht mehr mit :(
Developer: 70_ESCVP21net.pm, 70_SVDRP.pm
Mitglied FHEM e.V.

hemonu

Zitat von: hapege am 11 Mai 2024, 12:39:22Hallo,

nachdem ich meinen jahrelang gut laufenden RMpro zurücksetzen musste, laufe ich nun auch in den Fehler
"authentication failed - device not connected? - response length: 56"Hat vorher klaglos funktioniert, offenbar setzt das Zurücksetzen des RMpro irgendetwas in fhem zurück, so dass sich der RMpro nicht mehr über das Modul anlernen lässt :(
Hat jemand schon eine Lösung gefunden?


Ich habe die Lösung hier gefunden: https://forum.fhem.de/index.php/topic,80703.msg1264423.html#msg1264423

In der 38_Broadlink.pm muss man in der Routine Broadlink_getCipher den Parameter padding von 'space' auf 'none' ändern,
wenn Crypt::CBC auf eine Version >= 3 aktualisiert wurde. Das ist bei meinen aktuellen Pi OS Bookworm der Fall und jetzt läuft's wieder.


Fakenius

Funktioniert mit dieser Änderung in der Routine Broadlink_getCipher auch bei mir wieder. Super und danke für den Tipp.

Gruß
Joachim
FS20, Homematic (DebMatic), Zigbee (deCONZ), LaCrosse, selbstgebaute Sensoren und Aktoren via MQTT
 (CUL, HB-RF-USB-2, Jeelink, SIGNALDuino, ConBee III)

hapege

Hi,

klasse, das hatte ich nciht gefunden - Danke Dir!
Developer: 70_ESCVP21net.pm, 70_SVDRP.pm
Mitglied FHEM e.V.