見出し画像

2022.4.3『「MESH」と「Google スマートスピーカー」を使って、ベランダの気温をリビングで確認する!』

3年ほど前に「MESHのタグ情報(気温・湿度・明るさ)をgoogle スマートスピーカーに喋らせる」仕組みを構築。それに必要なモジュール「google-home-notifier」が2020年末あたりからエラーに。有効な解決策がネットにUpされていないことから、しばらく放置していました。
(2019/5/6)
みうみうの小部屋: 続・MESH チャレンジ!

いつか復旧させたいな、と定期的にググっていたところ、このネット記事を発見。チャレンジすることにしました。
(URL)
google-home-notifierの代替となりそうなgoogle-home-playerを試してみる - Qiita

ラズパイを初期化してチャレンジ。割と簡単に喋らせることができました。しかし「google-home-notifier」と異なり、手厚いサンプル(HTTP POSTなど)はなし。ということで、いちから環境構築。稼働後、1週間経過しましたが問題なし。せっかくなので手順を整理しておこう。

MESHの「ボタン」ではなく、AIスピーカーに音声指示できるようにもしましたが、IFTTTのMESHイベント送信に時間がかかることがあり、反応がいまいち。これの改善は難しそうだなぁ~


[手順]

(1).ラズパイの初期化
(URL)
ラズパイの初期化とOS再インストール方法をまとめてみた│takuのアトリエ
Raspbianのインストールと最強の初期設定 | 純規の暇人趣味ブログ

(2).Webサーバの構築(Node/npm/express SetUp)
(URL)
【Node.js】初心者のためのNode.js/npmの基礎とはじめてのExpressの設定 | アールエフェクト

⇒ローカル環境で「Hello World」を出力してみる

(3).google-home-playerのインストール(Webサーバ環境下)
(URL)
google-home-notifierの代替となりそうなgoogle-home-playerを試してみる - Qiita

⇒nodeで喋らせる(文言固定)

(4).HTTP POSTでgoogle-home-playerを呼び出す
(URL)
Node.js + Express でPOSTデータを取得後、WebAPIへ問い合わせる - Qiita

⇒「express index.js修正」「HTTP POST(ローカル環境)で喋らせる」

(5).ngrok(トンネリングサービス)設定 (ngrokアカウント登録含む)
(URL)
ngrok と express を組み合わせて Hello World!(ngrok のモジュールを利用) - Qiita
ngrok - npm | auth-token
google-home-notifierが気づいたら動かなくなってた時の対処法 - Qiita

⇒「express index.js修正」「HTTP POST(インターネット環境)で喋らせる」

(6).forever設定 (永続化)
(URL)
【Node.js入門】foreverの使い方とデーモン化による永続化・自動起動まとめ! | 侍エンジニアブログ

⇒「index.js」の永続化(端末切っても動くように...)

(7).IFTTT設定 / MESH設定(喋らせる)
(URL)
イチからGoogleHome+RaspberryPi3+IFTTTを連携させて喋らせるまで - Qiita

⇒「IFTTT」アプレットを作成

(URL)
IFTTT連携の初期設定方法を教えてください – MESHサポート | 遊び心を形にできる、アプリとつなげるブロック形状の電子タグ

⇒「MESH」と「IFTTT」との連携

(8).IFTTT設定 / MESH設定 (音声指示)
(URL)
Google Home Mini が待ちきれなくてスマホとIFTTTのGoogle AssistantとMESHで連携感覚をつかんでおくメモ – 1ft-seabass.jp.MEMO

⇒「MESH」アプレットを作成

<index.js sample> サブディレクトリ「speech」でPOSTを受ける!
const express = require('express')
const ngrok = require('ngrok')
const token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const app = express()
const bodyParser = require('body-parser')
const port = 3000

const GoogleHomePlayer = require('google-home-player');
const ip = '000.000.000.000'; // your Google Home's ip address
const googleHome = new GoogleHomePlayer(ip, 'ja');

app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser.json());

app.get('/', (req, res) => res.send('Hello World!'))
app.post('/', (req, res) => res.send('Hello World! by Post Request'))

app.post('/speech', (req, res) => {
googleHome
.say(req.body.text)
.catch(function(err) {
console.error(err);
});

console.log(req.body);
res.send("Received POST Data!");
});

ngrok.connect({authtoken: token, addr: port}).then((url) => {
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
console.log(`Example app listening at ${url}`);
});
});


この記事が気に入ったらサポートをしてみませんか?