概要
コロナの関係で妻と二人在宅勤務を実施中。2階で仕事をしている妻が送ったメッセージ(コーヒーが飲みたい、など)を1階リビングのgoogle homeに喋らせるシステムをNode.js、Node-REDで作成した。自宅にRaspberry Piが無いためPC上でシステムを動作させていたが、PCの変わりにスマホ上で動作させられないかと考え、本対応を実施。
環境
- 端末
- Android 9
- Androidにインストールしたアプリ
- Termux:Android上でLinuxターミナルを実行するためのアプリ。root化不要。無料アプリ。
- WiFi Keyboard:PCのキーボードでスマホの入力が可能。
- Termux:Boot:Nodeアプリ、Node-REDの自動起動に利用。有料アプリ。
- Termux上でインストールしたアプリ
- Node V14.0.0
- npm 6.14.4
- Node-RED
構成
Termuxにnode.js、npm、Express、Node-REDをインストール。
Node-REDのnode-red-contrib-cast
ノードを利用しPOSTしたメッセージをgoogle homeに喋らせるWEB APIを作成。
Expressでメッセージ入力用の簡単なページを作成し、入力されたメッセージをWEB API経由でgoogle homeに送信する。
実施内容
必要なアプリのインストール
- Termux
Android上でNode.jsを動作させるため、初めはDory - node.jsを試したが、Node.jsのバージョンがv6と古く、アップデートする方法がわからなかったため断念。v6だとNode-REDがインストールできない。Termuxは最新のNode.jsがインストールでき、Node-REDも問題なくインストールできた。ちなみにNode-REDの公式ページでもTermuxを利用することが推奨されている。 - Node、npm、Express
Termuxのターミナルから通常の手順でインストール可能。WiFi Keyboardを利用するとコマンド入力が楽になる。 - Node-RED
公式ページ掲載の手順でインストール。フローの編集はPCのブラウザからhttp://スマホのIPアドレス:1880
にアクセスして実施 - Termux:Boot
Google Playからインストール(有料)。インストール後、アプリの説明欄に従い、ホームディレクトリは以下に~/.termux/boot/
の様にディレクトリを作成。このディレクトリに後ほど自動起動用のスクリプトを作成する。
Node-REDでgoogle homeへのメッセージ送信APIを作成
基本的な手順は以下のページを参考に実施。
https://qiita.com/dozensofdars/items/6cec7db44636374b5382
今回Node.jsアプリからPOSTできるようにするため、node-red-contrib-castノードの前後をhttp in
ノードとhttp response
ノードで挟めばOK。http response
ノードを設定しないと、APIを呼び出したままアプリがだんまりになってしまうので注意。アプリからはmessage
パラメタにgoogle homeに喋らせたい文言をセットしてPOSTするよう実装する。
メッセージ入力用ページの作成
Expressでメッセージ入力ページ、メッセージ送信結果表示ページを作成。詳しい説明は割愛。
Termux:Bootの設定
NodeのアプリとNode-REDの自動起動のためTermux:Bootの設定を実施。~/.termux/boot/
ディレクトリ配下に任意の名前でファイルを作成し、以下の様にコマンドを記載。これでスマポ起動時に自動的にNode-REDとNodeアプリが実行される。
node-red
node (Nodeアプリ配置フォルダ)/bin/www
以上