はじめに
この記事はオールアバウトアドベントカレンダー10日目の記事です。
最近Google HomeとEcho dotを入手しまして、その便利さにまさに世はスマートスピーカー戦国時代だな〜と日々感じています。
今回は、散々やられているのでN番煎じネタだとは思いますが、帰宅時間になったら自動的に蛍の光を再生して「帰らなきゃ…」という気持ちにさせてくれるやつをGoogle Homeでやってみました!
使用するもの
- Google Home
- PCまたはラズパイなどNode.jsを実行できる環境
Google Homeに喋らせる
Google Homeに自発的に喋らせる方法として便利なライブラリがあります。Node.jsのライブラリであるgoogle-home-notifierです。
大体調べるとこのライブラリが使われているかともいます。
まずはサクッとディレクトリを作って、google-home-notifierを使える準備をしましょう。
このあたりの準備については下記の記事を参考にさせていただきました
Google Home開発入門 / google-home-notifier解説 - Qiita
$ mkdir [ディレクトリ名]
$ cd [ディレクトリ名]
$ npm init // package.jsonが作成される
$ npm install google-home-notifier
$ npm install moment // 日付操作で便利なライブラリ
環境が整ったらmain.js
を作成し、サンプルコードを参考にGoogle Homeを喋らせてみます。
var googlehome = require('google-home-notifier');
var language = 'ja';
googlehome.device('{{ここにGoogle Homeで設定したデバイス名を指定する}}', language);
googlehome.notify('こんにちは、Google Homeです。', function(res) {
console.log(res);
});
Google Homeで音楽を再生する
次に、Google Homeで音楽を再生させる方法ですが、これもgoogle-home-notifierで実行することができます。
下記のように再生したい音楽のURL渡すと、自動的に再生します。
音楽ファイルはGoogle Homeから参照できる同一ネットワーク上などにアップロードしておくと良いのではないかと思います。
これだけでGoogle Homeに音楽を流すことができます。すごい簡単ですね
var googlehome = require('google-home-notifier');
var language = 'ja';
googlehome.device('{{ここにGoogle Homeで設定したデバイス名を指定する}}', language);
googlehome.play('http://ほげほげ/hotarunohikari.mp3', function(res) {
console.log(res);
});
帰宅時間の判定
音楽を流すことができたら、次はタイマーの設定です。
要件としては、例えば「平日18時になったら蛍の光を再生」だとします。
setInterval
により定期的に現在時間を取得し、定時を過ぎていてかつ平日の場合のみ、Google Homeに音楽を再生させます。
こちらの実装方法については下記の記事を参考させていただきました
Google Homeに植物の気持ちをしゃべってもらいたい - Qiita
var googlehome = require('google-home-notifier');
var language = 'ja';
var moment = require('moment');
googlehome.device('Google-Home', language);
const interval = 1000 * 60 * 60; // 1時間ごとに実行
setInterval(function() {
let current = moment();
if(isTimeToGoHome(current)){
googlehome.play('http://ほげほげ/hotarunohikari.mp3', function(res) {
console.log(res);
});
return;
}
}, interval);
// 帰宅時間かどうか判定
const isTimeToGoHome = function(currentMoment){
console.log('帰宅時間かな?');
let quittingTime = moment({hours: 18, minutes: 00});
// 定時を過ぎてるかどうか判定
if(!currentMoment.diff(quittingTime) > 0){
console.log('まだ定時を過ぎていないようです。');
return false;
}
// 休日だったら判定しない
// 日:0, 月:1, 火:2, 水:3, 木:4, 金:5, 土:6
if(currentMoment.day() == 0 || currentMoment.day() == 6) {
console.log('今日は休日のようです。');
return false
}
return true;
}
あとはこのスクリプトをnode main.js
で実行させ続けると、定時を過ぎると自動的にGoogle Homeが蛍の光を再生してくれます。
改善ポイント
これだとGoogle Homeはスピーカーとしての役割しかないため、あまりGoogle Homeでやる意味がないと思います。
なので、対話で設定できたりとか、帰宅時間が近づいてきたら部屋の照明を落としたりとか、そういう工夫をもう少ししたいところですね!