Node-RED Node-gen で 作ったパーツ を 別の環境で 動作させる
目的
nodered-node-gen で作った ノード パーツ モジュール を 作ったところとは別の環境で動作させる。
環境メモ
node-red-nodegen 0.1.0 コマンドの インストール済み
Nodejs v12.16.1
Node-RED v1.0.4
Nodejs v12.16.1
Node-RED v1.0.4
( node-red-nodegen インストール不要でした )
移行元
~/.node-red/lib/functions/
|
そこで 作成した 該当する js ファイルと、それに該当するディレクトリを 移行先へコピーする
scp など。
( Format-date.js と node-red-contrib-format-date/配下全て )
移行先 の例
~/.node-red/lib/functions
|
必要な nodejs モジュールなど 準備を先に行っておく
cd ~/.node-red
npm install (Node-REDノードで使うNodejsモジュールなど)
|
以後は、前回の記事で作成した node-red-contrib-format-date を例にコマンド 例を かきます。
移行コピーしたディレクトリへ移動
必要な nodejs モジュールなど 準備を先に行っておく
cd ~/.node-red/lib/functions/node-red-contrib-format-date
|
リンク引っ張り
sudo npm link
|
リンク生成
cd ~/.node-red/
npm link node-red-contrib-format-date
|
Node-RED を再起動
Raspberry Piなら 例えば
sudo service nodered restart
|
移行できました!
私のは動きましたが、 動作確認もしっかりと👍
NodeRED nodegen における require を使う Nodejs モジュール ( ライブラリ ) 込みのケース
目的
< 環境メモ >
Nodejs v12.16.1
Node-RED v1.0.4
node-red-nodegen 0.1.0 コマンドの 通常インストール済み
時間を出力するだけのオリジナルノードを生成してみる。
環境準備
( nodejs で使える moment モジュール ( ライブラリ ) を使った Node-gen )
Nodejs でつかう モジュール の require 記述
ここでは moment モジュール の require
vi ~/.node-red/settings.js
|
221行目前後の " functionGlobalContext " の項目を変更
functionGlobalContext: {
// os:require('os'),
// jfive:require("johnny-five"),
// j5board:require("johnny-five").Board({repl:false})
moment: require('moment’) // 外部モジュールの定義を追加
},
|
コア機能に使うモジュールをインストール。
ここでは、Nodejs モジュール moment を インストール。
cd ~/.node-red/
|
npm install moment
|
cd
|
これでまず 手元の node-red 上で上記モジュールを使う準備は整った。
目的となる function ノードの生成
node-red を起動
以下 パーツを配置接続
真ん中は 普通の function
function に記述。
このパーツに 名前をつける
名前: Format date
・ コード
var moment = global.get('moment');
msg.payload = moment().format('MMMM Do YYYY:mm:ss a');
return msg;
|
そして デプロイ。
動作確認
ちゃんと動作している。
function ノードの ライブラリ 出力
“ ライブラリへ保存 "
js ファイルとして保存します。
こうすると 通常 の保存先は、こちら でした。
{ ホームディレクトリ }/.node-red/lib/functions/
( GUI 上では、 function 。
CUI 上では、functions となっているのが若干 気になる。。 )
ls
Format-date.js -> 保存できている
|
ここで node-red-nodegen コマンド を実行 !
node-red-nodegen ~/.node-red/lib/functions/Format-date.js
|
Success: node-red-contrib-format-date
と表示されました。
ls
|
Format-date.js node-red-contrib-format-date/
|
jsファイルに定義を追加します
vi node-red-contrib-format-date/node.js
|
vm.createContext() の前に定義を追加します。
package.jsonファイル の 編集。依存関係を 明記します。
vi node-red-contrib-format-date/package.json
|
"keywords” 要素の次にでも。
追記しました。
シンボリックリンク の準備
cd ~/.node-red/lib/functions/node-red-contrib-format-date
sudo npm link
|
( 上記 cd の コマンド 、公式に 誤記? で 存在してなかったので 若干 迷った )
シンボリックリンク を生成します
cd ~/.node-red/
npm link node-red-contrib-format-date
|
これで 生成したノードが使用できるようになりました。
ノードジェネレータ の弱点を鑑みて 生成したノードが 使用できるか否かは、以下公式をチェックです👍
参照: Node-RED-Node-Gen 公式
素晴らしいツール作りと丁寧なドキュメントに感謝🙏
Node-RED で 画像 を トリミング
機械学習 を使った推論において、Node-RED で画像を扱い、 トリミング したくなった。
このような ものを使ったやり方が、あった。
少し紆余曲折の上、無事 トリミングできたので、ここに記録。
jimp を使いやすくしてくださって感謝です🙏
< 目次 >
Node-RED v 1.0.4
🤔躓き ポイント : 準備
インストールは 1つではないようなので注意!
.node-red ディレクトリに行き、、
# npm install Steve-Mcl/node-red-contrib-image-tools
# npm install node-red-contrib-image-tools
これで Node-RED を再起動すれば認識されるはずです。
下の方にありました。
使用方法
自分は、 Function 項目 を " batch " 、つまりバッチ処理にして、オプション内で crop を指定して成功しました。
( Function 項目 を crop でやってみたけど、、ドキュメントを探したけど指定方法がよくわからなかった。)
上記は、取得した画像 を 特定の場所で 中央 縦長にトリミング する例でした。
オリジナル画像
指定内容
0,1 では トリミング開始地点 x,y = ( 50,0 )
2,3 では、上記からのトリミング範囲 x,y = ( 80,200 )
結果
左 : 元の画像 右 : トリミングした画像
💡Tips 💡
・このパーツは、コアに、nodejs における画像加工用である jimp ライブラリを使用していた。
・ trim で検索 したけど なかなか 見つからず “ crop “ 命令によって、やりたいことができることがわかった。
・ trim も crop も 日本人は トリミング という言葉にひとくくりになっているかもしれないが、向こうの方では trim と crop は、使い分けている模様。
以上です。
jimp が Node-RED でサクっと使えるようになると便利ですね☺️
" HAProxy doesn't start, can not bind UNIX socket " の エラー対処
HAproxy エラー対処
docker から HAproxy のコンテナを 立ち上げて使っていると、うっかりこういうエラーに 躓く。
仮想マシン とかで使っていた haproxy.cfg を docker のコンテナ でも使おうとする場合に要注意。
“ HAProxy doesn't start, can not bind UNIX socket "
このとき、 もし必要ないなら socket のオプションを なくす!
(うっかり socket 使っていたりとか)
# turn on stats unix socket
# stats socket /var/lib/haproxy/stats
↑ここの行をコメントアウトする。
# chroot /var/lib/haproxy
# pidfile /var/run/haproxy.pid
tune.ssl.default-dh-param 2048
maxconn 30
# user haproxy
# group haproxy
上記いずれも必要あるなら、マニュアルに則って正しく設定する。
< docker で HAproxy を使うときの補足 >
docker logs haproxyのコンテナ名
で、ログをみたときに、、、
[ALERT] 310/124805 (6) : backend ‘バックエンド名' has no server available!
[WARNING] 310/124813 (6) : Server ‘バックエンド名'/static is UP, reason: Layer4 check passed, check duration: 0ms. 1 active and 0 backup servers online. 0 sessions requeued, 0 total in queue.
この例だと、、、
まだバックアップサービスを構築してないので " WARNING “ 扱いです;;;
Raspberry Pi 3+ で Grovepi RGBLEDをつける
今回は、Raspberry Pi で、 GrovePi+ を使うのになれなかったため、 まず Chainable RGB LED を点灯させてみました。
- 手元の環境
- ハードウェア的な接続
- Grovepi を Node-RED から扱いたい方 向け 余談
- GrovePi - ラズパイ セットアップ
- python のサンプルプログラムで Lチカ
- カラー制御
- 参考
手元の環境
- Raspberry Pi 3 Model B V1.2
- GrovePi+ ( GrovePi Plus )
- Grove Chainable RGB LED ( P9813というフルカラーLEDドライバで動作する )
- Grove用 4ピンケーブル
ハードウェア的な接続
Chainable RGB LED 側 配線
上記を GrovePi+ 側 RPISER 端子へ接続
Raspberry Pi と GrovePi+ は上記のように 端っこで合わせる。 列が ズレない様に注意。
Grovepi を Node-RED から扱いたい方 向け 余談
自分の場合 Grovepi の ノードと、Node-RED Nodejs の バージョンが合わなかった のか、GrovePiのノードをNode-RED のGUI で 持ってこれず、、
node-red のバージョンアップが必要でした。
まず Node-RED サービスを止めました。
$ sudo systemctl disable nodered.service
$ sudo systemctl stop nodered.service
Raspberry Pi用に、Nodered nodejs の更新です💪
$ bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)
GrovePi - ラズパイ セットアップ
Grove Pi を使うために、Raspberry Pi に必要な セットアップ を行います。
念のため 必要なものをインストールしておきます。
$ apt-get update
$ apt-get install wget
$ apt-get install less
$ apt-get install vim
結構 時間かかりました。10分くらいかかった?
ちゃんと進んでいますので、辛抱強く待ちましょう。
最終的には、以下の様な表示になりました。
完了したら 再起動
$ sudo reboot
再起動後 インストールが 完了されているか確認
$ sudo i2cdetect -y 1
このような表示 が出れば インストールできている と考えられます。
python のサンプルプログラムで Lチカ
任意のディレクトリへ移動して、サンプルプログラムをダウンロードします。
今回こちらをお借りしました。
コマンドはこちら
$ wget https://raw.githubusercontent.com/DexterInd/GrovePi/master/Software/Python/grove_chainable_rgb_led/direct_serial_lib/chainable_rgb_direct.py
python コマンド を実行してみましょう。
光りました💡
明るすぎるので直視しないように気をつけてください⚠️
カラー制御
プログラム の末尾を以下の様に変更すると、色も変わります。
127行目 LED 個体の指定
1番目の LED を指定します。
num_led=3 -> num_led=0
131行目 LEDの カラーを制御します。
眩しいし、赤と緑を混ぜて、弱めの黄色 にします。
l.setColorRGB(255,0,0) -> l.setColorRGB(5,5,0)
l.setColorRGB(0,0,0) にすると 明かりは消えました。
ちなみに l.setColorRGB(5,0,5) にすると 紫になります。
参考
公式
プログラム
https://github.com/DexterInd/GrovePi/blob/master/Software/Python/grove_chainable_rgb_led/direct_serial_lib/chainable_rgb_direct.py
ParticleJS における オブジェクトとは?
ParticleJS のサンプルソースを見ていてふと思ったのですが、
これを大もとの CreateJS として 制御するための オブジェクト にあたるもの って何だろう?
という疑問が出てきた ので メモ
例
// ステージを生成
stage = new createjs.Stage('myCanvas');
// パーティクルシステム作成
particleSystem = new particlejs.ParticleSystem();
// パーティクルシステムの描画コンテナーを表示リストに登録
stage.addChild(particleSystem.container);
// particleSystem.container が CreateJSにおけるオブジェクト?
この時 の ” particleSystem.container “、つまり
生成した パーティクルシステムのコンテナ が、CreateJS における オブジェクト にあたる 模様。
stage.addChild では、オブジェクトを指定する。
このオブジェクト単位で制御したい場合は有効かなと 実際にオブジェクトとして扱い挙動をみて思いました。
もしくは、 より真っ当なやり方 もあるかもなので、本記事は 備忘録程度です。
ついでにですが、パーティクル表現を消したり表示させたり制御したかったのですが、
上記 アプローチよりも、 下記 アプローチが制御しやすかったです。
例えば 表示状態が 以下状態のとき、
particleSystem.emitFrequency = 65;
非表示にしたければ、
particleSystem.emitFrequency = 0;
とするのもありですね。
キラキラな webページデザインのアクセントでお世話になりました。
一応、ライブラリ URL の注意点について
particlejs.min.js 。RawGit が終了で困った。
手がけた webページで、HTML Canvas 向けパーティクルライブラリ「 ParticleJS 」 を利用されている方。
要チェック です💦
( 注:particles.js とは別物です )
( https://ics.media/entry/11172/ より引用 )
今後も この美麗なパーティクルライブラリ ParticleJS が 使えるように、
以下URLのファイルを webページで使われる方は、ライブラリインポート の URL の 変更 が 必要 かと思います。
パーティクル表現で particlejs.min.js を このURLを使おうと思ったのですが、
こちら確認作業中になんと、、この https://cdn.rawgit.com 、
今年の ( 2019年 )10月に終了!?
( 何故、おすし🍣!? )
( https://cdn.rawgit.com より引用 )
代わりに 私の場合は、 jsdelivr というものを使ってみました。
1、 ここ に
2、これまで使っていた rawgit の URL 、、
たとえば、これまで使っていた particlejs.min.js のURL、
そうすると、、
3、jsdelivr 用のURL に変換してくれます。便利!
( 新しい particlejs.min.js のURL )
パーティクル演出のライブラリのURLをどうさせるのか悩んでいたところ、なんとかここにたどり着きました。
この マイグレーション ツール は非常に助かったので、ここに共有します。
ParticleJS の使い方はこちらが丁寧ですね( ˘ω˘ )