アレコレ・ティプス

これ便利だな〜と思ったことなど

Node-RED Node-gen で 作ったパーツ を 別の環境で 動作させる

 
 目的
 
nodered-node-gen で作った ノード パーツ モジュール を 作ったところとは別の環境で動作させる。
 
 
( 前回の記事 に合わせた例です )

asuki-yt.hatenablog.jp

この記事で作った ものを 環境移行して動かしてみます。
 
 
 環境メモ
 
移行元 : MacOS High Sierra 10.13.6
node-red-nodegen 0.1.0 コマンドの インストール済み
Nodejs v12.16.1
Node-RED v1.0.4
 
移行先 : Raspberry Pi  - Raspbian GNU/Linux 9 (stretch) ( debian 9.11 )
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 のモジュールを使った Node-RED ノードジェネレータ ( node-red-nodegen ) による ノード 生成方法 を 知る
 
 
< 環境メモ >
 
Nodejs v12.16.1
Node-RED v1.0.4
MacOS High Sierra 10.13.6
 
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 を使いやすくしてくださって感謝です🙏
 
< 目次 >
 

 


 

 

動作環境メモ

 
MacOS High Sierra 10.13.6
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 や ユーザーの方もエラーできるけど 同様に必要 ないなら、コメントアウトする。     
 
#   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.
 

 
この状態 Layer4 check passed,  になっていれば、HAproxy が  自分で たてた webサービスフォワードできている状態。
 
この例だと、、、
まだバックアップサービスを構築してないので " WARNING “ 扱いです;;;
 
 

Raspberry Pi 3+ で Grovepi RGBLEDをつける

今回は、Raspberry Pi で、 GrovePi+  を使うのになれなかったため、 まず Chainable RGB LED を点灯させてみました。
 

 
 

 

手元の環境

 
  • 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 の更新です💪
 
 

 

GrovePi - ラズパイ セットアップ

 
Grove Pi を使うために、Raspberry Pi に必要な セットアップ を行います。
 
念のため 必要なものをインストールしておきます。
 
$ apt-get update
$ apt-get install wget
$ apt-get install less
$ apt-get install vim
 
 
sudo curl -kL dexterindustries.com/update_grovepi | bash
 
結構 時間かかりました。10分くらいかかった?
途中ここらへんでも 止まったかの様に見えますが、

ちゃんと進んでいますので、辛抱強く待ちましょう。
 
最終的には、以下の様な表示になりました。
 

 
完了したら 再起動
 
$ sudo reboot 
 
 再起動後 インストールが 完了されているか確認
 
$ sudo i2cdetect -y 1
 

 
 このような表示 が出れば インストールできている と考えられます。
 

 

python のサンプルプログラムで Lチカ

 
 
任意のディレクトリへ移動して、サンプルプログラムをダウンロードします。
 
今回こちらをお借りしました。
 
 
コマンドはこちら
  
 
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) にすると 紫になります。
 

 
 

参考

 
公式
 
 
 

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 とは別物です )
 

 
 
今後も この美麗なパーティクルライブラリ 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をどうさせるのか悩んでいたところ、なんとかここにたどり着きました。
この マイグレーション ツール は非常に助かったので、ここに共有します。
 

f:id:asuki_y:20190828135016p:plain

パーティクル演出
 
 

 
ParticleJS の使い方はこちらが丁寧ですね( ˘ω˘ )