【Google Home】Google Homeに喋らせたい(IFTTT連携自動化)
概要
前回,IFTTTのButton Widgetを使ってIFTTTアプリのボタンを押すことでGoogle Homeを喋らせることが可能になりました.今回はボタンを押すのではなく,IFTTTアプリが取得している自己位置をトリガーとしてGoogle Homeが喋れるようにしてみたいと思います.
手順
基本的な手順は前回のButton Widgetと同様で,トリガーの設定が異なります.今回もIFTTTのWebサイトでAppletを追加していきます.まず,ホームの右上ドロップダウンメニューから「New Applet」を選択します.
「+ this」をクリックしてトリガーの設定を開始します.
今回はIFTTTアプリが端末から取得している自己位置情報をトリガーにするので「location」サービスを選択します.
次にどんなタイミングでイベントを発生させるのかを選択します.選択肢として以下の3つタイミングが選べます.
- You enter an area:エリアに入ったタイミング
- You exit an area:エリアから出たタイミング
- You enter or exit an area:エリアから入ったか出たタイミング
ここでは自宅に帰るタイミングで喋らせたいのでエリアから出たタイミングをトリガーとします.
次にエリアを設定します.地図とエリアを示す円が表示されているので,エリアの中心と地図の拡大率を変更することでエリアを調整します.GPSやWiFiベースの測位は誤差が100m程度になることもあるので,このエリアは狭くし過ぎるとエリア内にいてもエリアから出たことになってしまったりします.普段当該エリアでどの程度の精度で測位が出来ているかを確認しておくと調整しやすいと思います.
次に「+ that」をクリックしてアクションを設定します.
google-home-notifierにPOSTするために「Webhooks」を選択します.
POSTする内容を設定します.これは前回と同様で,喋らせる内容を適当に変更します.
URL:node example.jsを実行した際に表示されるngrokのURLを入力
Method:CURLでPOSTしたようにPOSTを指定
Content Type:application/x-www-form-urlencodedを指定
Body:text=[Google Homeに喋らせる内容]形式で入力
適当な名前を設定して「Finish」ボタンで設定完了です.
IFTTTのアプレットの作成が終ればIFTTTアプリにも設定が反映されるので,後は自動的にイベントが発生してGoogle Homeが喋ってくれます.
まとめ
Google Homeを喋らせる方法が分かったことで自分の中でGoogle Homeの価値が上がりました.折角なので何か他のことも喋らせてみたくなりました.例えば出勤前に自動的に今日の予定を喋ってくれるとか.なんだかんだ言ってわざわざ「ねぇ,ぐーぐる」とか言ってウェイクアップさせるのって面倒ですよね.出勤前とか準備している時間が決まっているので日時をトリガーにしてGoogleカレンダーから情報を取ってくるようなことができればいいなと思います.今後時間があれば試してみたいです.
【Google Home】Google Homeに喋らせたい(IFTTT連携)
概要
前回,CURLでgoogle-home-notifierに任意のテキストをPOSTすることでGoogle Homeに喋らせることが可能になりました.今回はIFTTTと連携することで,例えばボタンを押すことをトリガーとしてGoogle Homeに予め決めておいたテキストを喋らせてみようと思います.
手順
IFTTTとの連携のポイント
IFTTTは様々なイベントをトリガーとしてアクションを発生させることができます.今回はボタンを押すことをトリガーとすることを目標としています.具体的にはiOSのIFTTTアプリ中のボタンを押すことをトリガーとします.
そして,アクションとして前回CURLでgoogle-home-notifierにPOSTしたようにIFTTTからgoogle-home-notifierにPOSTを行なうことが出来ればGoogle Homeを喋らせることが出来るようになるという目論見です.
IFTTTにサインイン
私は既にIFTTTのアカウントを持っていますので,そのアカウントでIFTTT(https://ifttt.com/)にサインインします.まだアカウントを持っていない方はサインアップからアカウントを取得しましょう.最終的にはiOS上のボタンをトリガーにしますが,トリガーの作成はPCのブラウザで作成可能なのでトリガーとアクションの作成はブラウザ上で行ないます.Appletの作成
サインイン後,画面右上のドロップダウンメニューから「New Applet」を選択します.
すると下図のような画面が出てきますので,「+ this」部分をクリックしてトリガーの作成を開始します.
Choose a serviceということで,沢山のアイコンが表示されると思います.これらのサービスと連携して様々なイベントをトリガーとして利用することが可能です.今回はボタンを押すことをトリガーとしたいので,「Search services」テキストボックスに「BUTTON」と入力します.すると下図のようにButton Widgetのみが表示された状態になると思います.Button Widgetアイコンをクリックしましょう.
IFTTTアプリを最新にしろと言われていますが,恐らく最新なので気にせず「Connect」ボタンを押して進めます.
「Button press」という名前でButton Widgetが登録されたようです.表されている「Button press」を更にクリックするとトリガーとして設定出来ます.
トリガーが設定されると「+ this」だったところがButton Widgetのアイコンになっています.
次に,ボタンを押したときに行なうアクションを設定します.「+ that」をクリックします.
Choose action serviceということで,また沢山のアイコンが表示されていると思います.IFTTTが実行出来るアクションも多いのですが,ここではPOSTを行えるアクションを選びます.
POSTが可能なサービス「Webhooks」を選択するため,「Search services」テキストボックスに「Web」と入力するとWebhooksサービスだけが表示されます.
「Connect」ボタンを押してサービスを利用可能な状態にします.
利用可能になったWebhooksサービスをクリックして選択します.
アクションの詳細を設定する画面が表示されます.各フィールドを下記のように設定します.- URL:
node example.js
を実行した際に表示されるngrokのURLを入力 - Method:CURLでPOSTしたようにPOSTを指定
- Content Type:application/x-www-form-urlencodedを指定
- Body:
text=[Google Homeに喋らせる内容]
形式で入力
必要に応じてこのアクションの名前を付けて「Finish」で設定終了です.
- URL:
Appletの実行
上記手順を踏んだ後,iOSのIFTTTアプリに同じアカウントでサインインすると上記設定で作成したAppletがIFTTTアプリ上に現れているはずです.IFTTTアプリ上でボタンを押すことでRaspberry Pi上で実行しているgoogle-home-notifierにnotificationがPOSTされ,Google Homeが喋ってくれます.
次回
ここまでの設定で,例えば帰宅するときにIFTTTアプリのボタンを押すだけで「今から帰るよー」とかGoogle Homeに喋らせることが可能になりました.GPSの位置情報の曖昧さを考えると,もしかしたらこの使い方の方がいいかも知れません.次回,実際その辺はどうなのかと言うことを実際に設定して試してみたいと思います. 以下蛇足ですが,いつの間にかngrokで繋がらなくなったという場合はアドレスが期限切れになっている可能性があります.そんな場合は,下記のサイトを参考にするといいと思います. google-home-notifierが気づいたら動かなくなってた時の対処法
【Google Home】Google Homeに喋らせたい(Google Homeに喋らせる)
概要
前回,Raspberry PiがRaspbianで利用可能になりました.今回,やっとGoogle Homeに喋らせるところまでいきます. なお,今回の作業はRaspberry PiにSSHで接続していることが前提です.
手順
Google Homeを喋らせるための構成要素
まずGoogle Homeを喋らせるための構成要素を確認しておきます.
- google-home-notifier
node.jsをベースに作られたGoogle Homeにnotificationを送信して喋らせるソフトウェア.このソフトウェアが色々難しいことを肩代わりしてくれているので,簡単な入力でGoogle Homeを喋らせることが可能になる. - Raspberry Pi
google-home-notifierを常時起動させておくためのサーバとして利用する.PCとかAWSとかでもできないことは無いと思うけど,コスト的なメリットが大きい. - ngrok
ローカルネットワークのサーバをインターネット環境から簡単にアクセスすることができるようにするツール&サービス.Raspberry Piをgoogle-home-notifierのサーバとして利用するので,そのサーバにインターネットからGoogle Homeが喋る内容を送信可能にすることが利用目的になります.今のところ,ルータの設定とか面倒なことをせずに使えるのがメリットかと思っています. - IFTTT
様々なトリガー(イベント発生条件)を基にアクションを設定可能なWebサービス.今回の目標で言うと,GPSの位置情報をトリガーとして,Google Homeに喋らせる内容を送信するアクションを行なう.IFTTTについては次回使うことになります.
ngrokについては,利用せずとも目標を達成する方法はあると思いますが,せっかくgoogle-home-notifierのサイトにもIFTTTとの連携ができていると書いてあるので使ってみたいと思います.
node.jsのインストール
google-home-notifierのサイトに記載されている"Raspberry Pi"の項目と同様に下記のコマンドでnode.jsをRaspberry Piにインストールします.curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - sudo apt-get install nodejs
google-home-notifierのサイトの方では上記"setup_7.x"になっていたけど,それだとうまくいかなかったので"setup_8.x"に変更しています.
下記はその他の依存パッケージっぽいです.sudo apt-get install git-core libnss-mdns libavahi-compat-libdnssd-dev
加えて,google-home-notifierのサイトではインストールされている前提になっていますが,npm(node.jsのパッケージ管理ツール)を使うので下記コマンドでインストールしておきます.sudo apt-get install npm
google-home-notifierのインストール
google-home-notifierのサイトの記載に従って下記コマンドでインストールを行ないます.npm init
はサイトには書いてないけれどやって方がいいみたい.npm init npm install google-home-notifier git clone https://github.com/noelportugal/google-home-notifier cd google-home-notifier npm install
google-home-notifierのサイトの情報に従って,
npm install
後のプログラムの変更を行なっておきます.nanoかなにかのテキストエディタでbrowser.js
を書き換えます.nano node_modules/mdns/lib/browser.js
変更箇所は下記の通り.最後の方にあります.
この部分を変更する. Browser.defaultResolverSequence = [ rst.DNSServiceResolve(), 'DNSServiceGetAddrInfo' in dns_sd ? rst.DNSServiceGetAddrInfo() : rst.getaddrinfo(), rst.makeAddressesUnique()];
以下のように変更
Browser.defaultResolverSequence = [ rst.DNSServiceResolve(), 'DNSServiceGetAddrInfo' in dns_sd ? rst.DNSServiceGetAddrInfo() : rst.getaddrinfo({families:[4]}), rst.makeAddressesUnique()];
正常に動作するかexample.js
を動かして試してみます.下記コマンドでexample.js
を実行してみて,google-home-notifierのサイトのような実行例が表示されればOKです.node example.js
以下が実行例.WARNINGが何行か表示されていましたが,割愛しています.また,XXXX部分は適当な文字列が入っています.
Endpoints: http://192.168.1.20:8091/google-home-notifier https://XXXX.ngrok.io/google-home-notifier GET example: curl -X GET https://XXXX.ngrok.io/google-home-notifier?text=Hello+Google+Home POST example: curl -X POST -d "text=Hello Google Home" https://XXXX.ngrok.io/google-home-notifier
ngrokは自分で設定しないと行けないのかと思ったら同時に動くようになっているんですね.CURLでGoogle Homeに喋らせてみる
google-home-notifierが正常に動作しているかGoogle Homeに任意のテキストを喋らせてみて確認してみます.上記実行例の中に,curlコマンドでnotificationを送る方法が書いてあるので,実際に試してみます.
とりあえずはngrokは使用せず.ローカルのアドレスでnotificationを送ってみます.Google HomeのIPアドレスは,iOSだと"Google Home"アプリのデバイス設定から確認することができます.このIPアドレス(うちの環境では192.168.1.5)にnotificationが送られるようにexample.js
を書き換えます.nano example.js
コード中のdeviceName
とip
を自身の環境に合せて変更して下さい.例えば下記のような感じで,ip
にはGoogle HomeのIPアドレスを設定して下さい.var deviceName = `Google Home mini`; var ip = `192.168.1.5`; `pl` を `ja`に置換
そして,example.js
を再度実行します.別のSSHセッション等で下記コマンドを実行することで任意のテキストをnotificationとしてexample.js
に送信します.当然ですが別PCからexample.js
にコマンドを送信する場合はlocalhostではなくexample.js
を動かしている環境のIPアドレスを指定して下さい.curl -X POST -d "text=こんにちは Google Home" http://localhost:8091/google-home-notifier
次回
CURLでgoogle-home-notifierに任意のテキストをPOSTすることでGoogle Homeを喋らせることが可能になりました.次回はIFTTTとの連携を行なってみようと思います.
【Google Home】Google Homeに喋らせたい(Raspbianインストール)
概要
前回,Raspberry PiのマザーボードにHDMIモニタとケースを取付けました.次はOSとしてRaspbianをインストールします.
Raspbianインストール手順
Raspbianのダウンロード
Raspberry Piの公式サイトのdownloadページから「RASPBIAN STRETCH WITH DESKTOP」をダウンロード.1.6GBあり時間がかかるのでゆっくり待つ.ダウンロードしたファイルは「2018-06-27-raspbian-stretch.zip」で解凍後,「2018-06-27-raspbian-stretch.img」というファイル名で約4.7GBのOSイメージが入っています.microSDカードのフォーマット
Raspberry PiのブートローダがFAT16かFAT32しか対応してないということなのでFAT32でフォーマット.ちなみにFAT32だと1パーティションで32GBが最大.
購入したmicroSDカードをPCで読ませると既にFAT32でフォーマットされていました.このまま使ってもいいとは思いますが,念のため自身でフォーマットします.フォーマッタはSD Associationのソフトウェアを利用します.
↓購入時の段階でFAT32でフォーマット済み
↓フォーマット完了画面
サンディスク ( SANDISK ) 32GB microSD Extreme PRO R=100MB/s W=90MB/s SDアダプタ付き [海外パッケージ] SDSQXCG-032G-GN6MA
- 出版社/メーカー: SanDisk
- メディア: Personal Computers
- この商品を含むブログを見る
OSイメージをmicroSDカードに書き込む
OSイメージの書き込みにはDD for Windowsを利用します.ダウンロードしたDD for Windows(DDWin.exe)を管理者権限で起動し,下図のように対象ディスクに手順2でフォーマットしたmicroSDカードを指定,対象ファイルに手順1でダウンロードしたOSイメージファイルを指定します.書き込みを開始しようとすると下図のような警告が出ますが,「はい」で進めます.
書き込み終了後,下図のようなファイル構成になっていました.
Raspberry Pi起動
OSイメージを書き込んだmicroSDカードをRaspberry Piのマザーボードに挿入,マウス・キーボード・有線LANケーブルを接続して,最後に電源ケーブルとなるUSBケーブルを接続します.そうすると無事起動.起動後,初期設定のウィザードが勝手に動くので指示に従って設定を進めていきます.ここでWiFiの設定も可能.それにしてもHDMIモニタが小さくてギリギリ文字が読めるレベルです.たぶん解像度の設定を適切にすれば読みやすくなるはず...
↓microSDカード挿入後
↓USBケーブル接続後起動画面
↓いくつか設定があるよ画面
↓国・言語・タイムゾーン設定
↓'pi'アカウントのパスワード設定
↓WiFi設定
↓アップデートをチェックして更新作業,結構待たされます.
↓Rebootして利用開始
VNCとSSHの有効化
RaspbianのGUIメニューの「設定」⇒「Raspberry Piの設定」⇒「インターフェイス」タブにて,VNCとSSHを有効化します.これでVNCやSSHでWindowsPCから接続可能になったはず.
IPアドレスの確認
VNCやSSHで接続するためにRaspberry PiのIPアドレスを知る必要があります.GUIではIPアドレスが確認出来なかったのでターミナルを起動して下記コマンドで確認.
ifconfig
WindowsPCからVNCでRaspberry Piに接続
RealVNCをWindowsPCにインストールしてRaspberry Piに接続します.なんだか暫く見ないうちにRealVNCが近代的なGUIになってた...IPアドレスの固定
現在Raspberry PiのIPアドレスはDHCPで取得されており,今後VNCで接続する際にIPアドレスが度々変わっていると面倒なのでIPアドレスを固定化しておきます.
ターミナルにて下記コマンドでnanoというテキストエディタでdhcpcd.confファイルを開きます.
nano /etc/dhcpcd.conf
下図のようにテキストを追記し,WiFi接続のIPアドレスを固定しました.
(おまけ)Raspberry PiにWindowsPCからSSHで接続
VNCからターミナルを触っていればそれでいい気もしたのですが,念のためSSHで接続可能か確認しておきます.WindowsPCにSSHクライアントを入れておけば下記コマンドで接続出来ます.
ssh [ユーザ名]@192.168.XXX.XXX
SSHクライアントはTeratermとかOpenSSHとか色々選択肢はあると思います.私の場合はたまたまインストール済みだったOpenSSHを利用しました.ユーザ名は特に設定していなければ「pi」でパスワードは初期設定のウィザードで設定したものです.
次回
Raspberry Piの初期セットアップが終りました.これからGoogle Homeを喋らせるために必要なソフトウェア等をインストールしていこうと思います.
【Google Home】Google Homeに喋らせたい(HDMIモニタ+ケース組立て)
概要
先日Amazonで購入したRaspberry Pi一式(前回参照)が届いたのでHDMIモニタや付属のケースを組立てます.
Raspberry Pi 一式確認
Raspberry Pi 3 B +マザーボード
小さな箱にまさにマザーボードだけ入っていました.OSが入ったCDとか,せめてRaspberry PiのOSの入手先くらい書いてある紙くらい入っているのかと思っていました.必要なモノは勝手に探せってことですね.RSコンポーネントRaspberry Pi 3 B +マザーボード
- 出版社/メーカー: ケイエスワイ
- メディア: 付属品
- この商品を含むブログを見る
3.5インチタッチスクリーン HDMIモニタTFT LCDディスプレイ
今回の組み立てのメインになるHDMIモニタとスケルトン的なケースのセット.こちらにはドライバCDらしきCDが入っていました.モニタが小さくてカワイイ.ケースの各部材に保護フィルムが貼ってあって一見してクリアじゃないなと勘違いしました.フィルムを剥がすのを忘れないようにしましょう.3ピースのヒートシンクセット
高負荷計算用に放熱するためのヒートシンクを用意.簡素な封筒に入っていました.ラズベリーパイ3やパイ2、パイモデルB+のためのEnokay3ピースのヒートシンクセット(三つのヒートシンクセット)
- 出版社/メーカー: Shen Zhen Eno Electronic Co.,Ltd
- メディア: Personal Computers
- この商品を含むブログを見る
32GB microSDカード
そこそこ高速大容量なmicroSDカード.これにOSを入れて起動するようですが,OSのインストールは次回になりそう.サンディスク ( SANDISK ) 32GB microSD Extreme PRO R=100MB/s W=90MB/s SDアダプタ付き [海外パッケージ] SDSQXCG-032G-GN6MA
- 出版社/メーカー: SanDisk
- メディア: Personal Computers
- この商品を含むブログを見る
組み立ての流れ
マザーボードにヒートシンク貼付
ヒートシンクセットをマザーボードに貼付けます.背が高いヒートシンクが2つあり,これらをマザーボードの表面の2つのチップの上に貼付けます.もう1つの背の低いヒートシンクは裏面のチップの上に貼付けます.ヒートシンクには両面テープのような感じで粘着質になっています.タダの両面テープには見えないので熱伝導率の高い物質なのかも知れません.マザーボードをケースの底面部に固定
マザーボード4隅のネジ穴に合うサイズの穴が空いたパーツがケース底面部のパーツになります.このパーツにマザーボードを固定します.固定には4つのナットと長めのネジ,透明なスペーサーを使います. マザーボードと底面部パーツの間には透明なスペーサーを挟むことを忘れないようにします.HDMIモニタとマザーボードを接続
ケース側面部のパーツとHDMIコネクタ部の位置が適切になっていることを確認し,問題なさそうならHDMIモニタをマザーボードに接続します.ケース上部の取付け
ケース上部パーツをHDMIモニタの位置を確認しつつ取付けます.底面部パーツと上部パーツを長いスペーサーとネジで固定します.
小さくていいですねー.OSを入れて動かすのが楽しみです.次回はOSをインストールしてVNC等でWindowsPCから操作できるようにしようと思います.
【Google Home】Google Homeに喋らせたい(物品購入)
概要
Nature Remoを使ったりして声で家電をコントロールして遊んでみたりしたものの,その後イマイチ利用の機会がなくなっていたGoogle Home.下記記事に触発されてうちのGoogle Homeくんにも何か喋らせたくなったので,早速必要なモノを購入しました. chasuke.com
目標
Google Homeに何か喋らせたいと言っても,何を喋らせるのか? 真っ先に思いついたのは職場からの帰宅タイミングや最寄り駅に到着したタイミングで「職場を出たよー」とか「○○駅に着いたよー」と喋らせること.自動的にそんな感じで家族に伝えてくれればショートメールで連絡する必要がなくなって便利になりそうと思ったわけです.
上記の実現を下記の2ステップで行なう予定です.
基本的に先人達の追試をしていけば実現可能とは思っていますが,躓きどころなどがあればメモとして書いておこうと思います.
購入した物
Google Homeやスマホ,ネットワーク環境は既にあるので,それ以外でGoogle Homeに喋らせるのに必要な下記のモノを購入しました.なお,衝動的に購入しているため足りないモノや理解不足があるかも知れません.
Raspberry Pi3 B+
- 2018年になって発売された新しいモデルでスペックはRaspberry Piシリーズの中では高いということで選定
RSコンポーネントRaspberry Pi 3 B +マザーボード
- 出版社/メーカー: ケイエスワイ
- メディア: 付属品
- この商品を含むブログを見る
- 2018年になって発売された新しいモデルでスペックはRaspberry Piシリーズの中では高いということで選定
microSDカード
- Raspberry Pi3 B+では32GBより大容量のmicroSDカードは認識しないらしい(未確認)
- 目標実現でだけを考えれば32GBも必要ないかも知れないが,大した価格差でないので容量が大きい&高速なモノを選定
サンディスク ( SANDISK ) 32GB microSD Extreme PRO R=100MB/s W=90MB/s SDアダプタ付き [海外パッケージ] SDSQXCG-032G-GN6MA
- 出版社/メーカー: SanDisk
- メディア: Personal Computers
- この商品を含むブログを見る
(option) Raspberry Pi用ヒートシンク
- もしかしたら高負荷の計算(DNNとか)をさせるかもしれないので冷却のために購入
ラズベリーパイ3やパイ2、パイモデルB+のためのEnokay3ピースのヒートシンクセット(三つのヒートシンクセット)
- 出版社/メーカー: Shen Zhen Eno Electronic Co.,Ltd
- メディア: Personal Computers
- この商品を含むブログを見る
- もしかしたら高負荷の計算(DNNとか)をさせるかもしれないので冷却のために購入
(option) Raspberry Pi用ディスプレイ
電源はUSBケーブルから取ることになりますが,AnkerのUSB電源アダプタが既にあるのでこれで事足りると判断.もしこれの出力不足なら専用のアダプタを購入予定.
明日,2018/08/25,一式届くのでRaspberry Piのセットアップ等進めてみたいと思います.