GoogleHomeとIoTデバイスでオフィスのQOLを上げた話

GoogleHomeとIoTデバイスを使ってオフィス環境の向上と

仕事が効率化するように色々やったので紹介しようと思います

前提として、うちの会社(Togetter社)はオフィスに10名ちょっとしかいないので、GoogleHomeに好き勝手喋らせてもわりと大丈夫です

プログラム郡はすべてラズパイ上で動かしています

永続化はforever

API経由でGoogleHomeに好きな言葉を喋らせる

記事を探せばたくさん出てくるこのライブラリを使う

github.com

const googlehome = require('google-home-notifier')

googlehome.device('Google-Home', 'ja')
googlehome.notify('こんにちは', () => {})

これだけで喋ります

汎用的にするために、用意したAPIにワードをPOSTすると喋ってくれるようにしてみます

基本的な手順は前に書いた記事とほぼ同じなので、ざっと説明します。詳しくは下のリンクを見て下さい。

1. Fireabseの設定

Firebaseのデータベースを設定します

f:id:rskull:20180226223025p:plain

こんな感じの構造にします

2. Firebaseの更新を監視するコードを書く

const firebase = require('firebase');
const googlehome = require('google-home-notifier')

googlehome.device('Google-Home', 'ja')

// firebase
const config = {
  apiKey: "xxxxxxxxx",
  authDomain: "xxxx.firebaseapp.com",
  databaseURL: "https://xxxx.firebaseio.com",
  projectId: "xxxx",
  storageBucket: "xxxx.appspot.com",
  messagingSenderId: "01234567"
}

firebase.initializeApp(config)

const db = firebase.database();
const ref = db.ref('/googlehome');

ref.on('value', function(changedSnapshot) {
  const key = changedSnapshot.key;
  const text = changedSnapshot.child('text').val();

  if (text !== '') {
    // GoogleHomeに喋らせる
    googlehome.notify(text, () => {})
    ref.set({ text: '' })
  }
})

これでデータベースのtextカラムが更新されると、そのテキストを喋ってくれるようになりました

3. IFTTTを設定

New Appletを押して

if Webhook then Webhook な設定をします

最初のWebhookのトリガーは1つしかないので、そのままそれを選択します

Event Nameはなんでも良いので、適当なものを設定してください

f:id:rskull:20180226224525p:plain

次にthenのWebhookでは、APIからきたリクエストをFirebaseに書き込む設定をします

f:id:rskull:20180226225104p:plain

保存して適用しましょう

下記のページにアクセスして、Documentationと書いてあるページに飛ぶと

エントリーポイントとなるURLが確認できます

Do more with Webhooks - IFTTT

$ curl -X POST -H "Content-Type: application/json" -d '{"value1": "こんにちは"}' \
       https://maker.ifttt.com/trigger/googlehome/with/key/xxxxxxxxxxxx

curlでテストすると喋ってくれるようになしました

好きなことを喋らせられる機能

これは実験的ですが、上で作ったAPIを叩くフォームを作りました

Firebaseに書き込めばなんでも喋るので直接書き込んでもいいですが、出来るだけ楽をしたかったのでこうしました

もちろん社内からしかアクセスできません

公開したらみんな変なこと喋らせるのですぐ閉じました :(

カレンダーのスケジュールをアナウンスさせる

IFTTTを使って設定しました

if GoogleCalender then Webhook

トリガーにGoogleCalenderのAny event starts を選択

このトリガーはスケジュールのn分前(任意の設定)になると発火するので、その後に

WebhookでFirebaseのgooglehomeに書き込むようにすれば、予定をアナウンスしてくれるようになります

ゴミ当番を指名してアナウンス

小さいオフィスなので、ゴミ捨ては自分たちでやります

人がいたりいなかったりして当番制もやりにくいので抽選するプログラムを書きました

弊社ではとある勤怠管理Webサービスを使っていて、そこのAPIから出勤してる人一覧を取れます

なので、単純に出勤してる人の中から1名をランダムで抽出して喋らせるバッチを書いて

それをcronでゴミの日に実行されるようにすることで

「今日のゴミ当番は○○さんです。よろしくお願いします」とアナウンスさせることが出来るようになります

機会に言わせることで無駄な争いを生むこともありません。素敵ですね!

室内環境を監視してアラートさせる

去年、弊社では室内の二酸化炭素濃度を計測するモニターを買って、濃度が高くなったら換気をするという習慣をつけるようにしました

※ 弊社社長の去年のツイート

二酸化炭素濃度はppmという単位で表されます。

室内の最適なppm値はだいたい400 ~ 800くらいです。1000ppmがギリギリで、それ以上になってくると

頭がぼーっとしてきたり、息苦しくなってきます。

このモニターを使って毎日室内のCo2濃度を監視していたのですが、濃度が高くなったらGoogleHomeに警告させたいよね!

となったので、探してみたらAwairというIoTデバイスを発見しました

日本サポートもあり、技適も通ってるので大丈夫そうです

getawair.com

Awairは温度・湿度・Co2濃度・化学物質・ホコリを警告してくれる高性能なデバイスです

化学物質ってなんだ?と思っていましたが、シンナー臭い除光液とか使ってると反応して数値が高くなります(体験談

GoogleHomeと同じで、スマホにアプリを入れて連帯することで本体の設定や数値の確認をすることが出来ます

IFTTTに対応していて、各項目の数値が高くなったりしたときにトリガーすることが出来るので

さっきと同じようにWebhookFirebaseに投げてGoogleHomeにアナウンスさせるようにしました

デモ

これにより、弊社のオフィス内は温度・湿度・Co2濃度・化学物質・ホコリともに出来るだけ最高の状態を保つようにしています!

加湿機も3台フル稼働していて、なかなか忙しない感じです

室内環境で、とくに空調は体にダイレクトに影響するので

これらのデバイスを組み合わせてどんどん機会に支配されていきましょう!

終わりです。