python-broadlinkでRM mini3をコントロール[on Onion Omega2+]でやっとpython-broadlinkを使って赤外線リモコンをRM mini3経由で制御できるようになりました。
次は、Node-Redに接続して音声でシーリングライトをOn/Offをと頑張ってましたが、Node.jsで躓いてしまいました。(他の手段を模索中・・・)
以下、エラー現象と調査内容を記録として残しておきます。
0.前提条件
- Node-RED version: v0.18.4
- Node.js version: v4.3.1
- Linux 4.4.46 mipsel LE
- Onion Omega2+
- Alexa-skill設定済み
1.Node-REDのフロー設定
フローを設定するにあたり、まずは、シェルコマンドを作成しました。
# !/bin/ash
cd /root/python-broadlink/cli
./broadlink_cli --device @ROOM.device --send @$1
第一引数で渡すのは、broadlink_cli コマンドで学習した赤外線リモコンコードファイルになります。
ファイル名 | コード内容 |
---|---|
LivingLightOn | リビングライトをOnする赤外線リモコンコード |
LivingLightOff | リビングライトをOffする赤外線リモコンコード |
上記シェルコマンドをexecノードで実行できるように以下のようなフローを作成しました。
switchノードは、以下のようにtrueとfalseを設定しました。
そして、execノードは、python-broadlink.shの引数を変えたものを2つ用意しました。
switch | python-broadlink.shの引数 | 機能 |
---|---|---|
true | LivingLightOn | リビングライトをOnする |
false | LivingLightOff | リビングライトをOffする |
以上で、「アレクサ、リビングライトをつけて」でリビングライトが点灯、「アレクサ、リビングライトを消して」で消灯されるハズです。
・・・が、エラーが発生して、Node-REDがフリーズしてしまいました。
2.エラー内容
Node-REDのログでは、以下のログが出力されていました。
どうも、シェルコマンドを実行した際に例外が発生しているようです。
29 Sep 06:56:38 - [info] [debug:a60137fd.c462a8] false
29 Sep 06:56:48 - [red] Uncaught Exception:
29 Sep 06:56:48 - TypeError: binary is not a function
at Function.from (native)
at Function.from (native)
at /usr/bin/onion-node-red/node_modules/node-red/nodes/core/core/75-exec.js:135:46
at ChildProcess.exithandler (child_process.js:220:5)
at emitTwo (events.js:87:13)
at ChildProcess.emit (events.js:172:7)
at maybeClose (internal/child_process.js:821:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:211:5)
3.調査
Googleでいろいろと調べてみましたが、どうもNode.jsのバージョンを新しくするしかないようです・・(たぶん?)
現在、Onion Omega2でサポートされているNode.jsのバージョンは、v4.3.1です。
自力でバージョンアップをするには、Node.jsのコードをダウンロードして、自力でクロスコンパイルするしかなさそうです(実際、トライしましたがコンパイルエラーで断念しました)。
以上、解決には至りませんでした。
現在、他の方法を模索中です。