スマートスピーカとRaspberry Piを連携する
概要
- Amazon Alexaを使って家電操作をする
- eRemote mini ( RM mini 3 )を使用する
- Raspberry Pi 3を使用する
- Node-REDを使用する
Raspberry Piの準備
gitをインストールする
$ sudo apt-get install git
gitからpython-broadlinkをダウンロードする
$ git clone https://github.com/mjg59/python-broadlink.git
pipをインストールする
$ sudo apt-get install python-dev $ sudo apt-get install python-pip $ sudo pip install broadlink
RM mini 3の準備
ネットワーク上にあるRM mini 3を探索する
(前提として、スマホアプリでRM mini 3の無線LAN設定まで終わり、家庭内LANにつながっているものとする)
$ cd ~/python-broadlink/cli $ ./broadlink_discovery Discovering... ########################################### RM2 # broadlink_cli --type 0x2737 --host 192.168.ppp.qqq --mac XXXXXXXXXXXX Device file data (to be used with --device @filename in broadlink_cli) : 0x2737 192.168.xxx.yyy XXXXXXXXXXXX temperature = 0.0
探索結果を保存する
$ cd ~/python-broadlink/cli $ vi ROOM.device 0x2737 192.168.xxx.yyy XXXXXXXXXXXX ← 探索結果のうちこの1行を保存
リモコン学習をさせる(照明器具でテスト)
$ cd ~/python-broadlink/cli $ ./broadlink_cli --device @ROOM.device --learnfile LIGHT.on (RM mini3に向けてリモコンのONボタンを押す) $ ./broadlink_cli --device @ROOM.device --learnfile LIGHT.off (RM mini3に向けてリモコンのOFFボタンを押す)
動作テスト
$ cd ~/python-broadlink/cli ./broadlink_cli --device @ROOM.device --send @LIGHT.on ./broadlink_cli --device @ROOM.device --send @LIGHT.off
node-REDの準備
node-REDのインストール
$ sudo npm install -g --unsafe-perm node-red
node-REDを起動
$ node-red-pi --max-old-space-size=256 2 May 14:28:00 - [info] Welcome to Node-RED =================== 2 May 14:28:00 - [info] Node-RED version: v0.18.4 2 May 14:28:00 - [info] Node.js version: v8.11.1 2 May 14:28:00 - [info] Linux 4.14.37-v7+ arm LE 2 May 14:28:02 - [info] Loading palette nodes 2 May 14:28:05 - [info] Settings file : /home/pi/.node-red/settings.js 2 May 14:28:05 - [info] User directory : /home/pi/.node-red 2 May 14:28:05 - [warn] Projects disabled : set editorTheme.projects.enabled=true to enable 2 May 14:28:05 - [info] Flows file : /home/pi/.node-red/flows_raspberrypi.json 2 May 14:28:06 - [info] Creating new flow file 2 May 14:28:06 - [info] Starting flows 2 May 14:28:06 - [info] Started flows 2 May 14:28:06 - [info] Server now running at http://127.0.0.1:1880/
アクセステスト
ブラウザを立ち上げて http://192.168.xxx.yyy:1880/ アクセスする node-REDのページが表示されたら成功
node-REDの停止
ctrl+Cを押下するとストップする ^C2 May 14:28:57 - [info] Stopping flows 2 May 14:28:57 - [info] Stopped flows
自動起動の設定
sudo systemctl enable nodered.service
Node-RED Alexa Home Skill Bridgeのセットアップ
- Node-RED Alexa Home Skill Bridgeにアクセスして Register からユーザ登録する
- Devices → Add Deviceで新しい機器を登録する
- デバイス登録
- Name: と Description: には自分が分かりやすい名前を付ける
ここで付けた名前は (1)Amazon Alexa アプリのスマートホームデバイス、(2)Node-Red の呼び出しで使われる - Amazon Echo から呼び出す名前は、後から Amazon Alexa アプリで変更可
- リビングの照明をオン、オフする → ON: OFF: にチェックを付ける
- 明るくする、暗くする → +%: -%: にチェックを付ける
- Application Type → LIGHT: にチェックを付ける
- 登録例
- Name: と Description: には自分が分かりやすい名前を付ける
- 登録完了
スマートホームスキル(Node-RED)とデバイスを追加する
- スマホの Amazon Alexa アプリ または https://alexa.amazon.co.jp/ を使う
- スキルで「Node-RED」を検索
- Node-RED Alexa Home Skill Bridge のログイン画面が表示される
- 上記で登録した ID とパスワードでログインする
- デバイスが検出された
Node-RED と Alexa を連携させる
- ブラウザから http://192.168.xxx.yyy:1880/ へアクセスして Node-RED の画面を表示
- 画面右上の メニューから、パレットの管理 → パレット → ノードの追加 を選択
- 「alexa-home」で検索し「node-red-contrib-alexa-home-skill」が表示されたら「ノードの追加」を選択
- 「現在のノード」に Alexa 用パレットが追加された
Node-RED で家電操作のフローを作成する
- 上記のパレット追加画面で [閉じる] ボタンを押して、トップ画面へ戻る
- 左メニューの一番下に alexa が追加されているのを確認する
- 左側の alexa home を右側へドラッグ&ドロップする
- 右側の Alexa Home をダブルクリックすると、以下のウィンドウが出る
- Account 欄の右端 マークをクリック
- Node-RED Alexa Home Skill Bridge に登録したアカウントを入力する
- しばらく待つと Device 欄に「照明」が表示される
(表示されないときは削除して再作成する)
- アイコン名が「Alexa Home」から「照明」に変わるので、その右隣に「switch」を配置する
- switch をダブルクリックして編集ウィンドウを表示
「==」を選択して、「is true」「is false」の2つを作って「完了」する
- switch の右隣に、左側メニューの「vその他」から「exec」を2個配置する
- exec のうち1つをダブルクリックで開いて以下を入力する
- 「is true」側に LIGHT.on を接続する
- 「is false」側に LIGHT.off を接続する
- 右上の「デプロイ」ボタンを押して保存する
動作テスト
- 「アレクサ、照明をつけて」→ LIGHT.on
- 「アレクサ、照明を消して」→ LIGHT.off