Python
RaspberryPi
IoT

Raspberry PiからコマンドラインでRM mini3(スマートリモコン)を制御する

この記事でやること

Raspberry PiからコマンドラインでスマートリモコンのRM mini3を制御します。


RM minie3

制御にはBlackBeanControlを使用します。

コマンドラインからリモコンが制御できるようになると、cronで照明のON/OFFを制御したり外出先からTwitterで命令を送ったらエアコンをつける、といったことが簡単にできるようになります。

本稿ではRM mini3の制御にBlackBeanControlを使います。BlackBeanControlはPython2で書かれており、Python3からはうまく動かなかったので、今回はpython2を使って行います。

前提

RM mini3のセットアップは済んでいる前提なので、まだの方はこちらの記事を参考にしてください。RM mini3とWiFiとのペアリングが完了し、RM mini3のIPアドレスとMACアドレスが分かっていれば良いです。

またRaspberry PiはRM mini3と同じLANに接続するようにしてください。

環境

今回使用したRaspberry Piの環境は以下のとおりです。

/etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 7 (wheezy)"
NAME="Raspbian GNU/Linux"
VERSION_ID="7"
VERSION="7 (wheezy)"
ID=raspbian
ID_LIKE=debian
ANSI_COLOR="1;31"
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

本体は2015年8月に購入したRaspberry Pi 2 Model Bです。

インストール

python2.7-dev

Raspberry Piにはデフォルトで素のpython2が入っていると思いますが、devel版(python2.*-dev)がないと後述するbroadlinkライブラリの構築に失敗するので改めてインストールします。

# python2のdevel版が必要なのでインストール

$ sudo apt-get update
$ sudo apt-get upgrade # 時間がかかるので省略可
$ sudo apt-get install python2.7-dev

私の環境ではpythonコマンドにはpython3.6系が割り当てられているので、本稿では明示的にpython2コマンドを使います。

シェルでpythonpython2とタイプしてエンターすると簡単なバージョン情報が見られます。

pi@raspberrypi ~/work/BlackBeanControl $ python2
Python 2.7.3 (default, Nov 24 2017, 21:13:24) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

>>>というプロンプトが出て止まるので、そのままCtrl-Dexit()でインタプリタモードから抜けられます。

pipのインストール

次にpipをインストールします。pipはpythonのパッケージを管理をするものです。

$ curl -O https://bootstrap.pypa.io/get-pip.py
$ sudo python2 get-pip.py
$ sudo python2 -m pip install --upgrade pip # pip自身の更新

broadlinkライブラリのインストール

BlackBeanControlはpython-broadLinkというBroadLink社のデバイス(今回はRM mini3)を操作するためのライブラリを使用するのでインストールします。git cloneするとsetup.pyというファイルが得られるのでinstallコマンド付きで実行するとインストールされます。

# 外部ライブラリのインストール(devel版のインストール後に行うこと)

$ sudo python2 -m pip install configparser
$ sudo python2 -m pip install netaddr
$ sudo python2 -m pip install pycrypto

# python-broadlinkのインストール

$ git clone https://github.com/mjg59/python-broadlink.git
$ cd python-broadlink
$ sudo python2 setup.py install

BlackBeanControlのインストール

続いてBlackBeanControlをインストールします。GitHubからクローンするだけです。RM mini3のIPアドレスやMACアドレスを設定します。

$ git clone https://github.com/davorf/BlackBeanControl.git
$ cd BlackBeanControl
BlackBeanControl.ini
[General]
IPAddress = 192.168.10.4
Port = 80
MACAddress = 34:EA:34:40:XX:XX
Timeout = 30
[Commands]

設定ファイルが書けたら、リモコンを準備してBlackBeanControlを-c command_nameオプション付きで起動します。command_nameは何でも良いですが、後で学習データを呼び出す時にも使用するのでわかりやすいものが良いでしょう。今回はaircon_offを割り当ててみます。

起動したらRM mini3のLEDが白く点灯するのでmini3の方にリモコンを向けてボタンを押します。何も表示されませんが、成功するとすぐにmini3のLEDランプが消え、しばらく経ってからコマンドプロンプトが帰ってきます。

$ python2 BlackBeanControl.py -c aircon_off
$ 

もう一度BlackBeanControl.iniを見てみましょう。リモコンの信号が保存されていれば成功です。

BlackBeanControl.ini
[General]
IPAddress = 192.168.10.4
Port = 80
MACAddress = 34:EA:34:40:XX:XX
Timeout = 30

[Commands]
aircon_off = 2600bc01723a0e0e0e2b0e0f0d0f0d100d0f0d0f0d100d0f0d0f0d100d0...

信号が保存されたら、また同じコマンドを叩くと今度はRM mini3がリモコンの信号を発信します。

$ python2 BlackBeanControl.py -c aircon_off
$ 

BlackBeanControlはこのように「iniファイルに設定がなければ信号を学習し、設定があれば信号を発信する」という少し変わった仕様になっています。

参考