eRemoteをpython3から操作してみよう!
eRemoteという赤外線リモコンのガジェットがあるのですが、pythonのツールを使うとLinuxから操作できるようになるのですが、
いま(2022年!)、これを使おうとしてハマった話。
eRemoteを操作するためには、主に、
「BlackBeanControl」、「python-broadlink」というのを使います。
(これのセットアップ方法はほかのサイトで見て!)
ただ、Linux Mint 20を使っているのですが、最近のOSってデフォルトのpythonってバージョン3なのですが、上記ツールはver2のpythonを対象にしているようで、ver3では動きません。
ただ、普通にツール動かそうとすると、ver3で動いちゃってめんどくさい。
(それに、python2でインストールとかもしなくてはいけなくてめんどい)
■対応方法、
まず、リモコンの登録をしようと下のコマンドを実行するとエラーが出ます
python3 BlackBeanControl.py -c xxx
①
File "BlackBeanControl.py", line 197
if (len(SentCommand) <> 8) or (not all(c in string.hexdigits for c in SentCommand)):
SyntaxError: invalid syntax
単純にノットイコールとして「<>」が使えないみたい。
「!=」に置き換えます。
②
Traceback (most recent call last):
File "BlackBeanControl.py", line 167, in
RM3Device = broadlink.rm((RealIPAddress, RealPort), RealMACAddress)
TypeError: __init__() missing 1 required positional argument: 'devtype'
関数の仕様変更により、引数が足りていないようです。
RM3Device = broadlink.rm((RealIPAddress, RealPort), RealMACAddress)
⇒RM3Device = broadlink.rm((RealIPAddress, RealPort), RealMACAddress , RealTimeout)
③登録時
File "BlackBeanControl.py", line 242, in
EncodedCommand = LearnedCommand.encode('hex')
AttributeError: 'bytes' object has no attribute 'encode'
実行時
File "BlackBeanControl.py", line 231, in
DecodedCommand = CommandFromSettings.decode('hex')
AttributeError: 'str' object has no attribute 'decode'
ver3ではencode関数とdecode関数が使えません。
なので、それぞれ、
DecodedCommand = CommandFromSettings.decode('hex')
→ DecodedCommand = bytes.fromhex(CommandFromSettings)
EncodedCommand = LearnedCommand.encode('hex')
→EncodedCommand = str(binascii.hexlify(LearnedCommand), 'utf-8')
に置き換えます。
多分これだけのはず。
2022年05月07日