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:側が実行されます。
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してみたいと思います。