ガジェット好きブログ

スマホとかraspberry piとか3Dプリンターとかetc

【Raspberry pi】自宅スマートホーム化その1【EchoDot】

自部屋の一部をスマートホーム化してみました。

構成

構成図は以下のようになります。

f:id:Di_no:20190505134302j:plain

流れとしては、

①AmazonEchoに向かって話したことをalexaスキルを使って解析し、slackに投稿

②投稿されたslackの内容をraspberry piのhubotが受け取り、スクリプト実行

③実行されたスクリプトによりirmagicianが照明をオンオフする赤外線を出力

というふうになります。

キーポイントは

・alexaスキルはAmazonクラウドサービス、つまりインターネット上で動かすしかない。

・照明をオンオフするraspberry piは家庭のLAN上で、家庭のLANはグローバルIPをもっていない。

・ということはalexa(AWS)とrapberry piをつなぐ何かが必要

です。

今回はslackを使ってみました。

ほかにも「Node-RED」や「IFTTT」とかがあるかと思いますが

Node-RED・・・alexaスキルが有効にならないよ。どうもNode-REDのサーバがおちてんじゃない?そんなの大丈夫??てかIBMだからWASなのかなぁと思っていたらNginxでした。

IFTTT・・・なんか音声認識がうまくできなかった

ということで断念しました。

詳細①

alexaスキルの開発については公式にいろいろありますのでそちらのほうがわかりやすいかと思います。

ここではslackへの投稿部分だけ簡単に記載します。

slack側の準備

簡単なのはIncoming Webhooksだと思うのでそれにしました。

API管理でWebhook用のURLを発行しておくだけです。

f:id:Di_no:20190505135257p:plain

alexa側の記述

キーを受け取ったインテントの中でslackに投稿する動作を記述します。

具体的にはインテントの中のhandleの中です。

そこでhttpsによりPOSTをします。

f:id:Di_no:20190505135507p:plain

隠している個所にslack側で発行したURLをコピペします。

なお頭で

const slackreq = require('https');

を定義しておきます。

JSONの中身は決まったユーザに投稿するだけなので

JSON.stringify({"text":"<@pibot>test"})

としています。これで「pibot」というユーザに「test」というメッセージを投稿する内容になっています。

f:id:Di_no:20190505140414p:plain

こんな感じです。

AlexabotはslackのAPI登録時に分かりやすいようにしています。

そしてpibotはraspberryに仕込んであるhubot用のslackAPIです。

このpibot君はtestといわれたら何があろうとtest-OKと返すようにしています。

とりあえずこれでEchoに向かって話をしたらslackに投稿するまではできるようになりました。

詳細②

長くなるので次の記事にします。

詳細③

長くなるので次の記事にします。