python-broadlinkでRM mini3をコントロール[on Onion Omega2+]


Broadlink社のRM mini3をPythonコードで制御するpython-broadlinkをOnion/Omega2+上で試してみました。

尚、python-broadlinkは、pycryptodomex-3.4.11を使っています。先日、pycryptodomex-3.4.11をOmega2+にインストールすべく、クロスコンパイル環境を立ち上げましたが、どうも、pycryptodomex-3.4.11の代わりにOmega2+のopkgコマンドでインストール可能なpython-cryptoで動作可能でした。

0.前提条件

  • RM mini3は、セットアップしてローカルwifi環境に接続済
    • 私は、Broadlink e-Control Appを使用してiPhoneから設定しました。
  • python-broadlink
  • pycryptodomex-3.4.11の代わりにpython-crypto-2.6.1-1を使用

1.必要なパッケージをインストール

Omega2+にtelnetまたはシリアル通信で接続します。
以下のコマンドで必要なパッケージをインストールします。
今回、pycryptodomexの代わりにpython-cryptoを使用するので、python-cryptoもインストールします。
※pycryptodomexは、opkgで提供されていません(2018/09現在)。

$ opkg update
$ opkg install git git-http ca-bundle python-crypto python-pip
$ pip install setuptools

2.python-broadlinkのインストール

githubからpython-broadlinkをダウンロードします。

$ cd /root
$ git clone https://github.com/mjg59/python-broadlink.git

setup.pyは、pycryptodomexをインストールするような記述となっています。
今回、pycryptodomexの代わりにpython-cryptoを使用するため、setup.pyを編集してpycryptodomexのインストールが無効になりようにします。

$ cd python-broadlink
$ vi setup.py

dynamic_requires の部分を以下のように変更します。
※try:の中で import pyaesがありますが、Omega2+では、エラーになるので、except:側が実行されます。

setup.py
try:
    import pyaes
    dynamic_requires = ["pyaes==1.6.0"]
except ImportError as e:
    dynamic_requires = []
    #dynamic_requires = ['pycryptodome==3.4.11']

編集が終わったら、python-broadlinkをインストールします。

$ python setup.py install

3.python-broadlinkをセットアップする

まずは、ネットワーク上からRM mini3を探します。
「./broadlink_discovery」コマンドを実行すると、RM mini3をネットワーク上から探してくれます。

$ cd ~/python-broadlink/cli
$ ./broadlink_discovery
Discovering...
###########################################
RM2
# broadlink_cli --type 0x2737 --host 192.168.1.32 --mac 25xxxxxxxxxx
Device file data (to be used with --device @filename in broadlink_cli) :
0x2737 192.168.1.32 25xxxxxxxxxx
temperature = 0.0

「0x2737 192.168.1.32 25xxxxxxxxxx」をファイル ROOM.device に格納します。

$ echo "0x2737 192.168.1.32 25xxxxxxxxxx" > ROOM.device

4.リモコン設定と制御

制御したい赤外線リモコンを用意します。
私は、リビングのリーリングライトを制御してみます。
以下のコマンドで FLOOR_LIGHT.on というファイルにリモコンの制御コマンドをダンプします。「Learning...」と表示されたら、RM mini3 目がけてリモコンでスイッチONします。

$ ./broadlink_cli --device @ROOM.device --learnfile FLOOR_LIGHT.on
Learning...
Saving to FLOOR_LIGHT.on
$

以下のようにダンプされていることが確認できます。

$ cat FLOOR_LIGHT.on
2600580000012a91160f16341610151015101510151016341634160f16351535151015351634160f160f16351510151015101634160f163416351510153515351634160f163515101500054c00012a4815000c6700012a4815000d05
$

OFFのリモコン制御コマンドもダンプします。

$ ./broadlink_cli --device @ROOM.device --learnfile FLOOR_LIGHT.off
Learning...
Saving to FLOOR_LIGHT.off
$ cat FLOOR_LIGHT.off
26006000000128931411143614121312131213121411143614361412133713371312143614361411141213371337143614361436141213371337131214111411160f1411163515101500054c00012b4715000c6700012a4716000c6600012b4716000d050000000000000000
$

準備が整いました。
以下のコマンドで、シーリングライトをONできると思います。

$ ./broadlink_cli --device @ROOM.device --send @FLOOR_LIGHT.on

OFFの場合も同じように以下のコマンドを実行します。

$ ./broadlink_cli --device @ROOM.device --send @FLOOR_LIGHT.off

以上で終わりです。

次回は、このコマンドをNode-Redに接続して音声でシーリングライトをOn/Offしてみたいと思います。