PicoGWのインストール

npmでインストールできます。グローバルインストールが必要です。

npm i -g picogw
使用する環境でバージョン8以上のnode.js/npmを使えるようにしておいてください。また、極力グローバルインストール(npm i -g ..)はスーパーユーザー権限なしで実行できるようにしておいてください。nvmが使える場合は、nvmでnode.jsを入れるのがおすすめです。

最初からスーパーユーザーでインストールするという手もあります。システム起動時に自動的にPicoGWを立ち上げるなどしたい場合は、nvmを用いるよりこちらのほうがよいでしょう。
ちなみに、node.jsのプロセスをデーモン化して実行する場合にはforeverやpm2などが使われることが多いですが、PicoGWは内部的にforeverを使って本体を走らせているので、めったなことでは落ちません。PicoGWの回復不能な実行時エラーは内部的な再起動を引き起こすだけです(もちろん外部のforever等での起動を禁じるわけではありません)。

Androidの場合は、まずTermuxというアプリをインストールして起動、そのシェルでpkg install nodejsとすれば最新のnode.js/npmが使えるようになります。Hacker’s Keyboardというソフトキーボードアプリも同時に入れるのがおすすめです。

Windows10の場合は、DOSプロンプトだとうまくいかないのでWindows Subsystem for Linuxを利用してnode.jsをインストールしてください。

インストールや実行に失敗する場合

いくつかの原因が考えられますが、最もよくあるのは① node.jsのバージョン違い ② 上書きインストールに伴う不整合 ③ arpedライブラリの問題 あたりでしょうか。

① の場合、もし最新のnode.jsで動かない場合は、ver.8ベースのものに変更してみてください。unixベースのシステムの場合、nvmを使うとバージョンの変更も容易です。ちなみに手元の開発用マシンはv11.3.0とv8.10.0でした。

② の場合まずnpm un -g picogwとしたのちに再度インストール(npm i -g picogw)としてください。そのさいに、キャッシュディレクトリ~/.picogwもrm -rf ~/.picogwで削除してから新しいPicoGWを起動すると初期状態からスタートできます。

③ の場合は少し厄介です。PicoGWではゲートウェイのユニークなIDとして、ネットワークインターフェースのIDすなわちMac addressを調べて利用しています。MAC addressを調べるのにはarpテーブルというOSの情報を用いており、これを求める方法がOSにより大幅に異なるのです。このために、PicoGWではdave-irvine/node-arpedをForkして作ったnode-arpedを用いています(本家にプルリクエストを送ったのですが応じてもらえませんでした)。いくつかの環境に追加対応していますが、対応が間に合っていないシステムもあると思います。
基本的にはOSのarpコマンドを呼び出して、結果の文字列を処理しているだけですので、新たなシステムに対応させることは難しくありません。ぜひ対応させてプルリクエストをお願いします!

PicoGWの実行

picogw

で起動します。Android+Termuxで実行すると、以下のようになります。

このように、コマンドラインには赤字でこのPicoGWのID (最初に見つかったMAC Addressになります)と、実行中のマシンのIPアドレスが表示されます。

8080番ポートにWebサーバが立ち上がるので、ブラウザでアクセスしてください。同じAndroidのOperaブラウザからアクセスした例を以下に示します。

このように簡単なGUIフロントエンドが出ます。

PicoGWは本質的にWebAPIのサーバーです。このGUIフロントエンドはAPIの階層を示しています。/v1/の直下にあるのは、デフォルトで入っているプラグインです。階層を開いていくと、プラグイン配下にあるAPIがわかります。例えばECHONET Liteの場合/v1/echonetの下に、自動発見した機器一覧が並びます。

WebAPI(REST, WebSocket)も同じく8080ポートからホストされます。
上記のGUIから、葉ノード(フォルダアイコンではないもの)をクリックすると、HTTP GETでAPIにアクセスすることができます。

上の例では、ECHONET Liteの分電盤のmanufacturercode、すなわちメーカーコードにアクセスしています。返答のvalueにある27は16進数で1B、すなわち東芝ライテックのことです。

カテゴリー: NanoGW