RaspberryPiには、GoogleHomeNotifier(ここを参考に)をInstallして受信用Serverを起動している。
今回のメイン
複数のGoogleHomeを喋らせるコードを作成。
ここのhttpサーバーソースを参考にGoogleHomeNotifierをLine専用ではなく「type(=text),とspeakerNumber、message」のJSONデータをPostされた時に喋るように改造。
speakerNumberが'0'なら全てのSpeakerが喋る。
IFTTTあたりでWebHookを使い自宅サーバーにこのJSONを送ってテスト。
サーバーのコード
server.js (2018/3/25 MP3再生も対応できるように修正)
const googlehome = require('/google-home-notifier');
const config = require('./config.json');
const http = require('http');
const language = 'ja';
// 受信処理
function googlehome_speak(post_data) {
const json = JSON.parse(post_data);
const type = json.type;
const speakerNumber = json.speakerNumber;
const message = json.message;
const speakers = config.speakers;
if (speakerNumber == 0) {
// 0:全てのSpeakerで再生
speakers.forEach(function(speaker, i) {
SendToSpeaker(speaker, type, message);
});
} else {
// 指定のSpeakerで再生
SendToSpeaker(speakers[speakerNumber], type, message);
}
}
// google-home-notifierでコマンド送信
function SendToSpeaker(speaker, type, message) {
googlehome.device(speaker.name, language);
googlehome.ip(speaker.ip);
switch (type) {
case "text":
googlehome.notify(message, function (res) {
//
});
break;
case "sound":
googlehome.play(message, function(res) {
//
});
break;
}
}
// Webサーバー
http.createServer(function (request, response) {
let post_data = '';
request.on('data', function (chunk) {
post_data += chunk;
});
request.on('end', function () {
// 発声/再生
googlehome_speak(post_data);
// 表示ログ
response.writeHead(200, { 'Content-Type': 'text/plain' });
response.end();
});
}).listen(config.server_port);
server.jsの設定ファイル
config.json
{
"server_port": "xxxx",
"speakers":
[
{
"ip": "xxx.xxx.xxx.xxx",
"name": "living"
},
{
"ip": "xxx.xxx.xxx.xxx",
"name": "xxx"
},
{
"ip": "xxx.xxx.xxx.xxx",
"name": "xxx"
}
]
}
汎用にする為、LineのMessagingAPIからの受診処理のコードは、GoogleAppsScript側に持たせた。
Lineの発言をGoogleスプレッドシートに記録させ、GoogleHomeに「再放送」と話しかけると最新の発言を読みあげてくれるようにまで完成。
こちらは次回紹介。
続きを読む