26
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

All About Group(株式会社オールアバウト)Advent Calendar 2017

Day 10

Google Homeで帰宅時間になったら蛍の光を再生させる

Last updated at Posted at 2017-12-10

:beginner: はじめに

この記事はオールアバウトアドベントカレンダー10日目の記事です。

最近Google HomeとEcho dotを入手しまして、その便利さにまさに世はスマートスピーカー戦国時代だな〜と日々感じています。

今回は、散々やられているのでN番煎じネタだとは思いますが、帰宅時間になったら自動的に蛍の光を再生して「帰らなきゃ…」という気持ちにさせてくれるやつをGoogle Homeでやってみました!

:pencil: 使用するもの

  • Google Home
  • PCまたはラズパイなどNode.jsを実行できる環境

:smile: Google Homeに喋らせる

Google Homeに自発的に喋らせる方法として便利なライブラリがあります。Node.jsのライブラリであるgoogle-home-notifierです。
大体調べるとこのライブラリが使われているかともいます。

まずはサクッとディレクトリを作って、google-home-notifierを使える準備をしましょう。
このあたりの準備については下記の記事を参考にさせていただきました:bow:

Google Home開発入門 / google-home-notifier解説 - Qiita

$ mkdir [ディレクトリ名]
$ cd [ディレクトリ名]
$ npm init // package.jsonが作成される
$ npm install google-home-notifier
$ npm install moment // 日付操作で便利なライブラリ

環境が整ったらmain.jsを作成し、サンプルコードを参考にGoogle Homeを喋らせてみます。

main.js
var googlehome = require('google-home-notifier');
var language = 'ja';

googlehome.device('{{ここにGoogle Homeで設定したデバイス名を指定する}}', language);

googlehome.notify('こんにちは、Google Homeです。', function(res) {
  console.log(res);
});

:loud_sound: Google Homeで音楽を再生する

次に、Google Homeで音楽を再生させる方法ですが、これもgoogle-home-notifierで実行することができます。
下記のように再生したい音楽のURL渡すと、自動的に再生します。
音楽ファイルはGoogle Homeから参照できる同一ネットワーク上などにアップロードしておくと良いのではないかと思います。

これだけでGoogle Homeに音楽を流すことができます。すごい簡単ですね :tada:

main.js
var googlehome = require('google-home-notifier');
var language = 'ja';

googlehome.device('{{ここにGoogle Homeで設定したデバイス名を指定する}}', language);

googlehome.play('http://ほげほげ/hotarunohikari.mp3', function(res) {
  console.log(res);
});

:railway_car::runner_tone1: 帰宅時間の判定

音楽を流すことができたら、次はタイマーの設定です。
要件としては、例えば「平日18時になったら蛍の光を再生」だとします。

setIntervalにより定期的に現在時間を取得し、定時を過ぎていてかつ平日の場合のみ、Google Homeに音楽を再生させます。

こちらの実装方法については下記の記事を参考させていただきました :bow:
Google Homeに植物の気持ちをしゃべってもらいたい - Qiita

main.js
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でやる意味がないと思います。
なので、対話で設定できたりとか、帰宅時間が近づいてきたら部屋の照明を落としたりとか、そういう工夫をもう少ししたいところですね!

26
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?