これを知っていると困った時に役に立つTips インターネット Node-RED 編
今回のTALKでは、今年に入ってから書き溜めた、インターネットや”Node-RED“に関する個人的な備忘録をご紹介します。いずれも、ちょっとした内容ですが、知っていると何かと役立つTipsです。
< injectノードだけでは不足のcronを設定する >
“Node-RED“標準ノードの”inject”でも、ある程度、定期的な実行条件を設定することができます。
でも、cronのように、ある時間帯の間だけ毎時5分に実行したい、といった設定はできません。
そんなニーズに応えてくれるノードが”node-red-contrib-cron“です。
このノードは、プロパティ画面の”CRON Expression”欄にcron特有の”* * * * *”部分を入力し、
後続のフローと接続するだけで、フロー全体をCRONの記述に従って実行してくれます。
< NodejsスクリプトからNode-REDをフローを呼び出す >
Nodejsスクリプト内から”Node-RED“の特定のフローを呼び出したい時は、”http in”ノードをフローの先頭に配置して、プロパティ画面の”URL”欄に”/◯◯”というパスを入力します。
そして、Nodejsスクリプト内で、URLを”http://localhost:1880/◯◯”と定義して”request”すれば、”Node-RED”のノードを呼び出すことができます。”inject”ノードのhttpバージョンということですね。問題なく実行できる点は良いのですが、同期処理をしているからなのか、”Error: socket hang up”というエラーが発生します。この点は気になるものの、実害はないので様子見モードです。
< ダッシュボードに動画や静止画を表示する >
ダッシュボードに動画や静止画を表示するなら、”template”ノードでHTMLやCSSを描くのが常套手段らしいのですが、HTMLはともかくCSSとなると敷居が高くなりますよね。
そんな時には、”node-red-contrib-ui-media“ノードを利用するとお手軽です。
例えば、先日のTALK “Raspberry Pi + Node-RED + ダッシュボード で室内と屋外のコンディションを可視化“で紹介したダッシュボードに、天気図を追加する場合を考えてみましょう。
※ 著作物を考慮し、天気図やURLはボカシを入れています。
まず、Nodejsのスクリプトを書いて、ラズパイ上でcronを使い、1時間に一度程度のサイクルで、最新の天気図をダウンロードします。
下図の例では、”request-promise“と”date-utils“を使用しています。
npm install --save request-promise
npm install date-utils
先日作成したフローに、下図のように”node-red-contrib-ui-media”ノードを追加します。
※ “node-red-contrib-ui-media”でダッシュボードにコンテンツを表示するためには、一度だけラズパイまたは”Node-RED”をリブートする必要があるようです。
“node-red-contrib-ui-media”のプロパティ画面では、写真や動画が保存されるパスを指定するのですがちょっとユニークです。
下図を例にすると、
“./.node-red/lib/ui-media/lib/weather/weathermap.jpg“というパスに天気図を保存するという設定になります。ですので、ダッシュボード上で、動的に表示するコンテンツを変化させたいのであれば、このパスに最新の天気図などを保存し直すといったアプローチになります。
< 開発環境から本番環境に完成したフローを移行する >
Tipsというより、むしろ”Node-RED“の標準機能ですが、”書き出し”と”読み込み”はとても役立つ機能です。
POOHの場合は、開発用のラズパイで動作確認を終えた”Node-RED”のフロー全体を”書き出し”機能でJSONファイルに保存します。
買い出したファイルはバックアップ用に保存するとともに、本番環境のラズパイに反映します。
“読み込み”機能で、”Node-RED”のフロー全体を本番用の”Node-RED”に展開すれば、フローは元の状態でリストアされます。
読み込んだ後は、”Node-RED”標準にはないノードがあれば追加し、”デプロイ”すれば即稼働状態にもっていけます。
|
|
|
ホームページ “THE POOH FILES”にも是非お立ち寄り下さい。
“Adobe Stock“でベストショットな写真素材を販売中です。是非ご覧下さい。