テレワークに便利。
tl;dr
- Google Homeの「ルーティーン」を使ってもできる
- 今回はNode-REDから時報を喋らせる
- 定期的にタスクを実行して、喋らせたい文字列をGoogle Home MiniにCastするだけ
テレワークのタイムマネジメント
いうほどできてないんですが。ついうっかりミーティングの存在を忘れたりしがちなので、以前から1時間おきにGoogle Home Miniに時報を喋らせてました。
Echo Dot (エコードット)第3世代 - スマートスピーカー with Alexa、チャコール
- 発売日: 2018/10/30
- メディア: エレクトロニクス
ルーティーンという機能をつかって、設定した時間に「OK, google. 今何時?」という問いを内部的に投げて、その答えをGoogle Home Miniから発話させることで、時報として活用していました。ただ、最近設定した時間の±1分くらいに発火する謎の病にかかってしまい、代替手段を探していました。で、今回はその方法としてNode-REDからGoogle Home Miniに対して時報を喋らせてみようと思います。
フローは至ってシンプル
最初にフローから。
こんな感じ。
まずはInjectionノードで定期実行をトリガー。「おいおい、真夜中に発火させてどうした?」みたいなこと思うかもしれませんが、Node-REDが動作しているRaspberry PiのタイムゾーンがUKのままなので、運用でカバーしています・・・(笑)良い子は真似しないでね。
次のFunctionノードで発話させるメッセージを作成しています。こちらでもタイムゾーンをゴニョゴニョしてます。
const date = new Date(Date.now() + ((new Date().getTimezoneOffset() + (9 * 60)) * 60 * 1000)); msg.message = "現在の時刻は、だいたい" + date.getHours() + "時です。"; return msg;
そして、実際の発話はnode-red-contrib-cast
ノードで実行しています。
文字通り、Castを行うノードですが、対象のIPアドレスをGoogle Home MiniのIPアドレスにすると、msg.message
のStringを発話してくれます。
実際のフローはこちら
[ { "id": "3e94927e.7c6d7e", "type": "cast-to-client", "z": "36b47ac9.340b66", "name": "", "url": "", "contentType": "", "message": "", "language": "ja", "ip": "192.168.1.31", "port": "", "volume": "50", "x": 630, "y": 120, "wires": [ [] ] }, { "id": "fdae59a3.98caa8", "type": "inject", "z": "36b47ac9.340b66", "name": "22:00-00:00", "topic": "", "payload": "", "payloadType": "date", "repeat": "", "crontab": "0 22-23 * * 1,2,3,4,5", "once": false, "onceDelay": 0.1, "x": 140, "y": 60, "wires": [ [ "88c5f7d4.a36758", "b569a844.e50c58" ] ] }, { "id": "88c5f7d4.a36758", "type": "debug", "z": "36b47ac9.340b66", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "x": 370, "y": 60, "wires": [] }, { "id": "b569a844.e50c58", "type": "function", "z": "36b47ac9.340b66", "name": "メッセージ作成", "func": "const date = new Date(Date.now() + ((new Date().getTimezoneOffset() + (9 * 60)) * 60 * 1000));\nmsg.message = \"現在の時刻は、だいたい\" + date.getHours() + \"時です。\";\nreturn msg;", "outputs": 1, "noerr": 0, "x": 380, "y": 120, "wires": [ [ "3e94927e.7c6d7e" ] ] }, { "id": "a93920ed.ddbc3", "type": "inject", "z": "36b47ac9.340b66", "name": "00:00-10:00", "topic": "", "payload": "", "payloadType": "date", "repeat": "", "crontab": "0 0-9 * * 1,2,3,4,5", "once": false, "onceDelay": 0.1, "x": 140, "y": 120, "wires": [ [ "88c5f7d4.a36758", "b569a844.e50c58" ] ] } ]