1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Node-RED Alexa Home Skill Bridgeを設定する(2019/1Q版 その1)[On Onion Omega2+]

Last updated at Posted at 2019-05-01

image.png

昨年10月(2018/10)の記事「Node-REDからpython-broadlinkでRM mini3をコントロール【失敗】[on Onion Omega2+]」では、python-broadlinkNode-Redexecノードで実行しようというものでした。結果的に75-exec.jsTypeErrorの例外が発生してしまい、躓いていました。
原因は、使っているNode.jsが古い(v4.3.1)ことが起因しているようでした・・・
Node.jsをクロスコンパイルすることもトライしましたが、ハードルが高く断念しました。

あれから約半年、どうもNode.js v8.10.0が正式サポートされたようです。
また、Node-REDも公式にサポートされました。但し、公式サポートは、最新のOmega2 Proのようです。Omega2+と比較がありましたので、参照すると以下のようになっておりました。MemoryがOmega2 Pro=512MBに対し、Omega2 Plus=128MBとなっておりますが、Swapで対応すれば、カバーできそうです。

image.png

0. 前提条件

  • Onion Omega2 Plus
    工場出荷状態にリセット済み
  • 2GB Micro-SD Card
    • パーティション2分割
      • 512MB=スワップ用、残り=システム領域拡張用
      • 各領域共にext4でフォーマット済み
  • Omega2拡張ドック

1. ファームウェアのアップデート

最初にファームウェアをアップデートします。
詳細は、公式ページを参照してください。

$ oupgrade -l

更新後のファームウェアの確認は、以下で可能です。

$ oupgrade -v
> Device Firmware Version: 0.3.2 b220
$

この時点で以下の構成となります。

  • Onion Omega2 Plus
    • BusyBox v1.28.3
    • Ω-ware: 0.3.2 b220
    • Linux 4.14.81 #0 Thu Feb 21 20:59:23 2019 mips GNU/Linux

2. スワップ領域の確保

以前の記事に書いた方法でスワップ領域を作成・設定します。

必要なパッケージのインストール

$ opkg update
$ opkg install swap-utils block-mount

スワップファイルの作成

$ dd if=/dev/zero of=/mnt/mmcblk0p1/swap.page bs=1M count=512

スワップ領域として設定・有効化

$ mkswap /mnt/mmcblk0p1/swap.page
$ swapon /mnt/mmcblk0p1/swap.page

micro-SD自動マウント有効化

$ block detect > /etc/config/fstab

/etc/config/fstabを開いて、option enabledを**'1'**に設定します。

/etc/config/fstab
config 'mount'
        option  target  '/mnt/mmcblk0p1'
        option  uuid    'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
        option  enabled '1'

スワップファイル自動有効化

/etc/rc.local に swapon コマンドを仕込みます。

/etc/rc.local
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.

### activate the swap file on an external SD-Card
SWAP_FILE="/mnt/mmcblk0p1/swap.page"
if [ -e "$SWAP_FILE" ]; then
        swapon $SWAP_FILE
fi

exit 0

再起動して、スワップファイルが自動で有効になっているか確認します。

$ free
             total       used       free     shared    buffers     cached
Mem:        124920      93244      31676         44       5760      20828
-/+ buffers/cache:      66656      58264
Swap:       524284        512     523772

3. 外部ストレージからの起動設定

こちらも同じく、以前の記事に書いた方法で設定していきます。

外部ストレージのフォーマット

e2fsprogsをインストールします。

$ opkg update
$ opkg install e2fsprogs

アンマウント後、ext4でフォーマットします。
フォーマット後、再マウントします。

$ umount /mnt/mmcblk0p2
$ mkfs.ext4 /dev/mmcblk0p2

/overlay ディレクトリをコピー

/overlay に格納されているシステム関連ファイルを Micro-SD にコピーします。

$ mount /dev/mmcblk0p2 /mnt/mmcblk0p2 ; tar -C /overlay -cvf - . | tar -C /mnt/mmcblk0p2 -xf - ; umount /mnt/mmcblk0p2

/overlay 自動マウント設定

$ block detect > /etc/config/fstab

/etc/config/fstab のoption targetを**'/overlay'に、option enabledを'1'**に設定します。

/etc/config/fstab
config 'mount'
        option  target  '/overlay'
        option  uuid    'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
        option  enabled '1'

設定が終わったら再起動します。

以下、確認結果です。

$ df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root                 7936      7936         0 100% /rom
tmpfs                    62460        92     62368   0% /tmp
/dev/mmcblk0p2         1348020    291676    969816  23% /overlay
overlayfs:/overlay     1348020    291676    969816  23% /
tmpfs                      512         0       512   0% /dev
/dev/mmcblk0p1          564156    524736         0 100% /mnt/mmcblk0p1

4. Node-RED関連インストール

公式ガイドに従い、Node-REDをインストールします。

Node-Redインストール

公式ガイドを見ると、インストールはブラウザからアクセスするOnionOSのApp Managerで可能との記載があります。
OnionでのNode-RED公式サポートは、Omega2 ProのみOmega2+は公式サポートしていないようです。App Managerのインストール用アイコンには***"Pro"***と明記されています。インストールに際し、もしかしたらエラーと成り得る可能性も考え、(私的にエラー調査し易い)コマンドラインでインストールすることにしました。

$ opkg update
$ opkg install oos-app-nodered

インストール完了後、再起動すると自動的にNode-REDが起動するように**/etc/init.d/nodered及び、/etc/rc.d/S99nodered**が作成されるようです。

image.png

再起動後、Omega2にブラウザでアクセスすると、Node-REDのアイコンが追加されています。アイコンをクリックすると、Node-REDのフローエディタにアクセスできます。
image.png

ちなみに、起動後停止する場合は、/etc/init.d/nodered stopをコンソールから入力します。stopのところをstartで再開となります。

$ /etc/init.d/nodered stop
引数 説明
start サービスを起動する
stop サービスを停止する
restart サービスを再起動する
reload サービスの設定をリロードする(Node-RED未実装?)
enable サービスの自動起動を有効化する
disable サービスの自動起動を無効化する

サービスを利用せず、nodeコマンドで起動する場合は、以下となります。

$ /usr/bin/node --max-old-space-size=128 /usr/lib/node_modules/node-red/red.js --userDir /root/.node-red

以下、上記コマンドで実行した際、コンソール出力されたログに出力されるバージョン情報を記録しておきます。

Item Version
Node-RED version: v0.19.5
Node.js version: v8.10.0
Linux 4.14.81 mipsel LE

関連ツールのインストール

公式ガイドに従い、追加の関連ツールをインストールします。

まずは、npmをインストールします。

$ opkg update
$ opkg install node-npm

次にコンパイルが必要なNodeパッケージのインストールに備え、gccとmakeをインストールします。インストールにあたり、node-gypのインストールと設定が必要です。

$ opkg update ; opkg install python
$ cd /root/.node-red
$ node --max_old_space_size=512 $(which npm) install -g node-gyp

/etc/opkg/distfeeds.confのコメントアウトしてある***"src/gz openwrt_base http://.....""src/gz openwrt_packages http://....."***のリポジトリを有効化します。

/etc/opkg/distfeeds.conf
# src/gz openwrt_core http://downloads.openwrt.org/releases/18.06-SNAPSHOT/targets/ramips/mt76x8/packages
- #src/gz openwrt_base http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/base
+ src/gz openwrt_base http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/base
# src/gz openwrt_luci http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/luci
# src/gz openwrt_onion http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/onion
- #src/gz openwrt_packages http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/packages
+ src/gz openwrt_packages http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/packages
# src/gz openwrt_routing http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/routing
# src/gz openwrt_telephony http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/telephony
src/gz omega2_core http://repo.onioniot.com/omega2/packages/core
src/gz omega2_base http://repo.onioniot.com/omega2/packages/base
src/gz omega2_packages http://repo.onioniot.com/omega2/packages/packages
src/gz omega2_routing http://repo.onioniot.com/omega2/packages/routing
src/gz omega2_onion http://repo.onioniot.com/omega2/packages/onion

/etc/opkg/distfeeds.confを保存後、以下を実行します。

$ opkg update
$ opkg install make gcc
$ ar -rc /usr/lib/libpthread.a

Node-RED認証有効化

Node-REDの認証を有効化します。
【2019/04/29時点】
 有効化できますが、bcryptjsが遅いためか(?)認証が上手くいきませんでした。
 現状、無効化してます。

**/root/.node-red認証時に使用するモジュール(bcryptjs)をインストールします。

/root/.node-red
$ cd /root/.node-red
$ node --max_old_space_size=512 $(which npm) install bcryptjs

認証用パスワードのハッシュコードを得ます。
(ハッシュコードが得られるまで約3分かかります)

/root/.node-red
$ cd /root/.node-red
$ node -e "console.log(require('bcryptjs').hashSync(process.argv[1], 8));" your-passwd
$2a$08$8KgbG3bxk9Dg0cJUw/i2oOQf72zhcn9nUzqp6m.jJ8DF4X/b6cU82

ハッシュコードが得られたら、/root/.node-red/settings.jsの122行目あたりにあるadminAuth部分を有効化(コメントアウトを削除)してpasswordの部分に取得したハッシュコードを定義します。

/root/.node-red/settings.js
   adminAuth: {
        type: "credentials",
        users: [{
            username: "admin",
            password: "$2a$08$8KgbG3bxk9Dg0cJUw/i2oOQf72zhcn9nUzqp6m.jJ8DF4X/b6cU82",
            permissions: "*"
        }]
    },

Node-REDを再起動し、ブラウザでアクセスすると、以下のようにユーザ名とパスワードを入力する画面が表示されます。
【2019/04/29時点】認証でFailedになっちゃいます。

image.png

とりあえず、一旦休憩!
Node-REDインストール迄を**「その1」**とします。

次回は、

  • broadlink RM mini3の設定
  • Alexa Home Skill Bridgeの設定

を行っていく予定です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?