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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/b7dff089-afe3-930f-dd1c-2bafc3f1fc4b.png)

[Broadlink社のRM mini3](http://www.ibroadlink.com/rmMini3/)をPythonコードで制御する[python-broadlink](https://github.com/mjg59/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してみたいと思います。