Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

amymd
allabout
その道のプロである専門家(ガイド)を基盤に、総合情報サイトを中心とした様々なサービスをWEB&リアルで展開
https://allabout.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした