Andoroid端末上でNode.jsアプリを実行してみた


概要

コロナの関係で妻と二人在宅勤務を実施中。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に送信する。

実施内容

必要なアプリのインストール

  1. Termux
    Android上でNode.jsを動作させるため、初めはDory - node.jsを試したが、Node.jsのバージョンがv6と古く、アップデートする方法がわからなかったため断念。v6だとNode-REDがインストールできない。Termuxは最新のNode.jsがインストールでき、Node-REDも問題なくインストールできた。ちなみにNode-REDの公式ページでもTermuxを利用することが推奨されている。
  2. Node、npm、Express
    Termuxのターミナルから通常の手順でインストール可能。WiFi Keyboardを利用するとコマンド入力が楽になる。
  3. Node-RED
    公式ページ掲載の手順でインストール。フローの編集はPCのブラウザからhttp://スマホのIPアドレス:1880にアクセスして実施
  4. 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  

以上