とうとうAlexaが家電をコントロール。Raspberry PiでBroadlink RM mini 3がちゃんと使えた。

LINEで送る
Pocket

理想が一つ1つ実現できたので、忘れないうちにアウトプットしておきます。

Echo Plusを使ってリビングのフロアライトをOFF/ON出来るようになりました!

元ネタとその手順を詳細に掲載されているもう1つのサイトが大変参考になりました。

参考にした、というよりほぼそのままやったダケなんですが、2例とも仮想Alexaでの構築事例。
実機のEcho Plusではどのように動くのか、そのあたりも書いていきます。

openHAB2

openHAB2はラズパイを始めとする各プラットフォームで動作するIoTゲートウェイ。Webサーバを持ちスマホでアクセス可能、元々定義した関連付けにのっとり入力に対応したサービスを出力します。

今回のpython-Broadlinkを試す前は、このopenHAB2でRM mini3を利用できないか試行錯誤していました。

しかし解ったのは

  • サービス(Binding)追加が難解でほぼCLI手設定
  • Hue,Xiaomiなどのデバイスはやっぱりホームハブが必要
  • RM mini3がうまく認識できない(個人のスキルとして)

という事。

基本的な部分だけは動いているため、今回このRaspberry Pi + openHAB2のLinux環境に後付でpython-Broadlinkをセットアップしていきます。OpenHAB2に興味のない人は元記事を読まれたほうが必要なコマンドは分かりやすいでしょう。

RM mini3のセットアップ

まずは黒豆ことRM mini3をネットワークにつなぎました。

Gearbest Broadlink RM mini3 Universal WIFI
Broadlink RM mini3 Universal WIFI [GearBest]

通電後LEDが「青く速い点滅」になります。
この状態でe-Controlを起動すると、接続するSSIDを聞かれるので自宅の2.4GHz帯の無線APの情報を入力します。

BroadLink e-Control 2.7.6(無料)App
カテゴリ: 仕事効率化, ライフスタイル
販売元: BroadLink Co., Ltd – Broadlink Co.,Ltd(サイズ: 79.1 MB)
全てのバージョンの評価: (99件の評価)

LEDが消え、DHCPでIPアドレスが付与されていたら設定完了。

うまく行かなければ早い青点滅状態からリセットボタンを5秒長押し。「ゆっくり点滅」になったらSSID”Broadlink…”といったアクセスポイントが出現するのでiPhoneにて接続。再度e-Controlにて無線APの情報を入れればの接続が完了。

例の「この装置は正規品じゃない」が出ても気にしなくてかまいません。純正アプリなんて無線LANを設定するためだけの存在です。

Python-boradlink

純正のサービスには見放されても、Pythonで書かれたRM mini3コントロールツールが公開されています。それがPython-broadlink

githubからもって来てインストール開始。

しかしpipが悪いのか

みたいなエラーを吐く。結局

とやってpipを再インストールしたら上手く”pip install broadlink”が進みました。

2018/01/02追記——————————-
古いRaspbianで実行したらPython.hのエラーで中断。

この場合はpyhon2.7-devを追加したらOkでした。

————————————————-

次にLANに接続したRM mini3を探します。

コマンド結果の下から2行目、以下の行を”ROOM.device”というファイルに保存。
この後のファイル含め、学習データはこの./python-broadlink/cliディレクトリに蓄積していく形になります。

このファイルでRM mini3を紐付け、次のコマンドで実際のリモコンからコードを学習させます。

1行メッセージが出て待機状態になったらRM mini3に向けてリモコンを押下。RM mini3側に白いLEDがついたらすぐ離す。これで学習は完了です。
試しに長押ししたデータを見てみたらその分サイズが増え、余計なデータが入ってしまいました。長く押す必要はありません。

以下はサンプル。

これをリモコンのボタンの数だけファイルネームを変えながら繰り返します。

データが出来たら実際にコマンドで送信テストしてみます。
この送信はコマンドが長ったらしいのでシェルスクリプトにするといいようです。

名前をroom.shとしました。実行権もつけておきます。

無事動きました。
あの「正規品じゃない呼ばわり」されたRM mini3が動くなんて嬉しい。

○ink○apa○ザマァwww

Node-RED

人の褌で相撲を取ったところで、今度は赤外線リモコンをAlexaと結びつけます。

その土台になるのが「Node-RED」。

Alexaのスマートホームグループにあって気になっていたらこういうツールだったのか!という感じです。
IFTTTとはまた違った、「事象Aを受けたら事象Bを出力する」サービスみたい。

Node-REDはNode.jsで動くのでまずそちらを導入。

Node-REDはNode-RED日本ユーザ会 : Running on Raspberry Piに従って手動インストールしました。

一般ユーザーで実行。
ルートでやると「root要らないけどホントにそのままやる??」って聞かれます。

例みたいにチェックマークじゃなくて「?」なのが気になるけど一応動きました。
これは”update-nodejs-and-nodered”と同一なのでもう一度やる必要はありません。

この方法でインストールしたNode-REDは元サイトのような”Node-red-start”ではなく、”node-red-pi”で起動します。

途中にかかれたhttp://127…..をラズパイのIPアドレスに読み替え、http://192.168.1.xxx:1880/にChromeでアクセス(FireFoxが公認らしいです)。うまく動けばノードエディタが開きます。

このnore-red-piをラズパイの起動に合わせて自動実行するには以下の通り。

Node-RED日本ユーザ会 : Running on Raspberry Pi


初期のnodered.serviceはユーザーpiで実行する設定になっています。
OpenHAB2の場合はデフォルトユーザー名がopenhabianなので、パスを含めて修正してからsystemctl daemon-reloadしましょう。

Node-RED Alexa Home Skill Bridge

Node-REDで動くAlexaとの橋渡しNode-RED Alexa Home Skill Bridgeを設定します。

実際の操作は以下参照サイトに詳しく書かれております。

ここで設定したものが、後のAlexaアプリにて検出されます。

ただし、声でAlexaを呼ぶフレーズはAlexaアプリ内で自由に変更可能であり、ここでの名前によって縛られる事はありません。なので分かりやすい英語でもなんでも問題なし。

次にiPhoneのAlexaアプリにてNode-REDスキルを追加します。

Amazon Alexa 2.2.874.0(無料)App
カテゴリ: ミュージック
販売元: AMZN Mobile LLC – AMZN Mobile LLC(サイズ: 150.8 MB)
全てのバージョンの評価: (158件の評価)
+ iPhone/iPadの両方に対応

ここまでやったらスマートホーム>「デバイスの追加」をすることで、Devicesに設定した仮想デバイスが検出されます。

早速検出されたDevice”Living”は日本語テストのため”居間の電気”に変更してみました。

Node-REDにて連携設定

いよいよ大詰め。
ここでの手順も先出のサイトに大変詳しく書かれています。

設定>パレットの管理>Palette>ノードを追加にて”node-red-contrib-alexa-home-skill”を追加。インストール中はコンソールに動作ログが表示され、数分かかります。

終わるとalexaグループに「alexa home」が増えるのでそれを始点にしてノードを繋いでいきます。

”alexa home”ノードを開き、Node-RED Alexa Home Skill Bridgeで作成したユーザー名(Notメアド)、パスワードを入力。すぐにDevice横のリロードボタンを押しても反応しませんが、何度かノードを開いて閉じてしているとふっとDeviceがリストに挙がってきます。

あとはお手本通りSwitchを”is true”,”is false”で2系統作成。最後にexecノードにてLinuxで準備したコマンドを入れます。

こちらはON側のexec。

最後に右上の「デプロイ」を押せば連携が有効になります。

使ってみる

とうとう完成したAlexa→赤外線コントロール。1,000円と格安だった分、しっかり回り道した気がします。

まずはAlexaアプリのスマートホームから、ボタンを押してOFF/ON。
ここでコマンドの呼び出しに問題がある場合はコンソールにログが出ますし、Node-REDの設定の問題であればFLOW画面でもノードの下にステータスがリアルタイムに表示され判断材料となります。

Alexa,居間の電気をつけて。

カチリという音がして部屋に明かりが灯りました。感動!Hue電球と何ら遜色ないスマートさです。スマート家電コントローラ RS-WFIREX3[RATOC]みたいに「家電リモコンで~を~して」とか言わなくていい。

点灯するときは「つけて」でも「点灯して」でもOK。ただ、デバイス名を「Living」にしていた当初、「消灯して」は良くても「けして」と伝えるとスケジュールの処理を始めてしまい、スマートホームの操作になりませんでした。「ダイニング」ではどちらのフレーズも大丈夫だったので、シンプルなフレーズでは一部扱いが異なるようです。
その後呼び名を「居間の電気」にしたらどちらのフレーズでも消灯ができました。

「電源のOFF/ONがインターネット経由でできる」という点でいえば、以下の赤外線リモコンをはさんでしまえばなんでもIoT化できるようになったわけです。

2 Responses

  1. chabbi3 2018/01/03 / 00:03

    突然のコメント失礼します。
    “声でAlexaを呼ぶフレーズはAlexaアプリ内で自由に変更可能”
    とありますが、iphoneアプリ内のデバイス管理以外で何かしら設定が必要だったりするものでしょうか?

    アプリ内でデバイス追加完了→アプリ内からの操作も問題なくできるのですが、声での呼びかけがうまくいかない状況に陥っています。何か心当たりがあればぜひご助言頂けますでしょうか・・・?

    • ぶっちー 2018/01/03 / 11:15

      ▽CHABBI3さん
      いらっしゃいませ。
      Alexaアプリ内の「スマートホーム」画面内で名前を変えるだけで動いてますね。
      (デバイスをタップ>編集>名前の編集)

      具体的にはNode-RED Alexa Home Skill Bridgeで”Living”と定義し、
      最初Alexaアプリでも”Living”として検出されました。
      あとはAlexaアプリ内で名前を「居間の電気」に変えただけで”居間の電気”に反応するようになっています。

      フレーズは何個か変えてみると変化あるかもしれません。

コメントを残す