作業日記@HatenaBlog

各種の作業メモ

スマートスピーカと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のセットアップ

  1. Node-RED Alexa Home Skill Bridgeにアクセスして Register からユーザ登録する
  2. Devices → Add Deviceで新しい機器を登録する
  3. バイス登録
    • Name: と Description: には自分が分かりやすい名前を付ける
      ここで付けた名前は (1)Amazon Alexa アプリのスマートホームバイス、(2)Node-Red の呼び出しで使われる
    • Amazon Echo から呼び出す名前は、後から Amazon Alexa アプリで変更可
    • リビングの照明をオン、オフする → ON: OFF: にチェックを付ける
    • 明るくする、暗くする → +%: -%: にチェックを付ける
    • Application Type → LIGHT: にチェックを付ける
    • 登録例
      f:id:sillywalk7:20180513205720p:plain
  4. 登録完了
    f:id:sillywalk7:20180513210713p:plain

スマートホームスキル(Node-RED)とデバイスを追加する

  1. スマホAmazon Alexa アプリ または https://alexa.amazon.co.jp/ を使う
  2. スキルで「Node-RED」を検索
  3. Node-RED Alexa Home Skill Bridge のログイン画面が表示される
  4. 上記で登録した ID とパスワードでログインする
  5. バイスが検出された
    f:id:sillywalk7:20180513211804j:plain

Node-RED と Alexa を連携させる

  1. ブラウザから http://192.168.xxx.yyy:1880/ へアクセスして Node-RED の画面を表示
  2. 画面右上の f:id:sillywalk7:20180513212528p:plain メニューから、パレットの管理 → パレット → ノードの追加 を選択
  3. 「alexa-home」で検索し「node-red-contrib-alexa-home-skill」が表示されたら「ノードの追加」を選択
    f:id:sillywalk7:20180513213120p:plain
     
  4. 「現在のノード」に Alexa 用パレットが追加された
    f:id:sillywalk7:20180513213414p:plain
     

Node-RED で家電操作のフローを作成する

  1. 上記のパレット追加画面で [閉じる] ボタンを押して、トップ画面へ戻る
  2. 左メニューの一番下に alexa が追加されているのを確認する
    f:id:sillywalk7:20180513214126p:plain
     
  3. 左側の alexa home を右側へドラッグ&ドロップする
    f:id:sillywalk7:20180513214537p:plain
     
  4. 右側の Alexa Home をダブルクリックすると、以下のウィンドウが出る
    f:id:sillywalk7:20180513215151p:plain
     
  5. Account 欄の右端 f:id:sillywalk7:20180513215440p:plain マークをクリック
     
  6. Node-RED Alexa Home Skill Bridge に登録したアカウントを入力する
    f:id:sillywalk7:20180513215745p:plain
     
  7. しばらく待つと Device 欄に「照明」が表示される
    (表示されないときは削除して再作成する)
    f:id:sillywalk7:20180513221340p:plain
     
  8. アイコン名が「Alexa Home」から「照明」に変わるので、その右隣に「switch」を配置する
    f:id:sillywalk7:20180513221900p:plain
     
  9. switch をダブルクリックして編集ウィンドウを表示
    「==」を選択して、「is true」「is false」の2つを作って「完了」する
    f:id:sillywalk7:20180513222603p:plain
     
  10. switch の右隣に、左側メニューの「vその他」から「exec」を2個配置する
    f:id:sillywalk7:20180513223606p:plain
     
  11. exec のうち1つをダブルクリックで開いて以下を入力する
    • コマンド /home/pi/python-broadlink/cli/broadlink_cli
    • 引数 msg.payload のチェックを外す
      --device @/home/pi/python-broadlink/cli/ROOM.device --send @/home/pi/python-broadlink/cli/LIGHT.on
      ※--device と --send の後ろに @ を必ず付けること
    • 名前 LIGHT.on
    • 同じように LIGHT.off も作成する
    • 編集結果
      f:id:sillywalk7:20180513225849p:plain
       
  12. 「is true」側に LIGHT.on を接続する
    f:id:sillywalk7:20180513231059p:plain
     
  13. 「is false」側に LIGHT.off を接続する
    f:id:sillywalk7:20180513231124p:plain
     
  14. 右上の「デプロイ」ボタンを押して保存する
    f:id:sillywalk7:20180513231401p:plain

動作テスト

  • 「アレクサ、照明をつけて」→ LIGHT.on
  • 「アレクサ、照明を消して」→ LIGHT.off

参考サイト