投稿

9月, 2021の投稿を表示しています

Node-REDで書き出しと読み込みをやってみる

イメージ
今回は書き出しと読み込み機能を見ていきます。 シンプルなフローであれば、その内容を紹介するのに一つ一つのノードのプロパティ画面のキャプチャを貼り付けていけばいいのですが、フローが複雑になるとすぐに限界が訪れそうです。書き出しと読み込み機能を使えばフローの内容を簡単に共有できます。 書き出し まずは書き出し機能を見ていきます。フローエディタに適当にノードを配置したら、画面右上のメニューで「 書き出し 」を選択します。 書き出す範囲(選択したフロー/現在のタブ/すべてのタブ)と書き出し先(クリップボード/ローカルフォルダ)を選択します。 クリップボードに書き出したものを貼り付けると以下のようにJSON形式で表現されています。これを読み込めば同じフローを別環境で再現できます。 [ { "id": "cad6f983ee9de5e2", "type": "tab", "label": "フロー 1", "disabled": false, "info": "" }, { "id": "1039ae098b363b1d", "type": "inject", "z": "cad6f983ee9de5e2", "name": "", "props": [ { "p": "payload" }, { "p": "number", "v": "777",

JSONata式を掘ってみる

debugノードの記事 でチラッと紹介した「 JSONata式 」をもう少し見てみます(「じぇいそなた」と読むんでしょうか)。JSONata式は「 JSONオブジェクトからデータを抽出するためのクエリ 」とのこと。JSON配列から特定の条件を満たすオブジェクトを取り出すみたいなシチュエーションはよくあると思いますが、JSONata式を使うと「for文でループ回して〜プロパティの値を比較して〜」みたいなことをやらなくても済むのでコードがスッキリしそうです。 今回は、リファレンスの中から便利そうだと思った機能をいくつかピックアップします。全機能を知るには リファレンス を参照してください。 クエリ対象のJSONオブジェクト injectノードでmsg.payloadに以下のようなJSONオブジェクトを格納しておきます。これに対していろいろなクエリを適用して結果を取得してみます。 { "FirstName": "Fred", "Surname": "Smith", "Age": 28, "Address": { "Street": "Hursley Park", "City": "Winchester", "Postcode": "SO21 2JN" }, "Phone": [ { "type": "home", "number": "0203 544 1234" }, { "type": "office", "number": "01962 001234" }, {

injectノードを使う

イメージ
前回 に引き続き、 ゴミサンプル で使ったノードの動きを見ていきます。今回は inject ノードです。injectノードを利用すると手動でフローを起動できます。ついでにmsgオブジェクトのプロパティに値を設定することもできます。公式ドキュメントは こちら 。 injectノードのプロパティ フローエディタでinjectノードをダブルクリックしてプロパティを確認します。msgオブジェクト配下のプロパティにいろいろな値を設定してみます。選択肢はこんな感じ。 flow. フローレベルの コンテキスト global. グローバルレベルの コンテキスト 文字列 文字列を指定できます 数字 数字を指定できます 真偽 true/falseを指定できます JSON JSONオブジェクトを指定できます Buffer バイナリ値を指定できます IoT系だとこういうInputも必要なのかもしれません 日時 現在時刻を指定できます 値は UNIXTIME形式 です JSONata式 Debugノードの記事 でもでてきたJSONata式、JSONに対してクエリを書いて値を抽出して指定できそうです 環境変数 環境変数 の値を指定できます msg. msgオブジェクト内のプロパティの値を指定できます プロパティ間の値のコピーができるということですかね flow.とglobal.は利用するのに準備がいりそうなので、今の段階ではおいといて、他の選択肢を一通り指定してみました。 debugノードでmsgオブジェクト全体を出力するようにすると、ログには以下のように出力されます。 { _msgid: '496f3dcab49c367e', payload: 'Hello World!', number: 777, boolean: true, json: { key: 'value' }, buffer: <Buffer 30 31 30 31 30 31>, datetime: 1631801070247, env: '/Users/wataru', msgid: '

debugノードを使う

イメージ
前回の記事 で使った debug ノードの動きをもう少し見てみたいと思います。debugノードはその名の通り、デバッグに使います。ログを出力してフローが期待通り動いているか確認できます。公式ドキュメントは こちら 。 debugノードのプロパティ フローエディタでdebugノードをダブルクリックしてプロパティを確認します。出力対象のデータは「 対象 」で指定します。選択肢は以下の通りです。 msgオブジェクト配下のプロパティ 前回の記事 みたいに、msgオブジェクト配下の特定プロパティをピンポイントで出力します msgオブジェクト全体 msgオブジェクト全体を出力します。どんなプロパティがあるかわからないときに中身を全部出力する場合に使えそうですが、余計な情報も出力されてしまうデメリットもあります JSONata式 「 JSONata式 」という名前は初めて聞いたのですが、JSONオブジェクトからデータを抽出するためのクエリだそうです 公式サイト を見たところ、結構いろいろなことができそうです。これはこれで深そうなので、別の機会にもう少し深く掘ってみたいと思います 出力先の選択肢は以下のとおりです。 デバッグウィンドウ Node−RED画面上のデバッグウィンドウに出力します デバッグウィンドウ上のログにマウスオーバーすると、そのログを出力したノードの枠線がハイライトされます。debugノードがたくさんあるときにどこで出力したログか識別するのに便利そうです システムコンソール Node-REDを起動したコンソール(いわゆる黒い画面)上に出力します 15 Sep 23:41:24 - [info] [debug:3d75809c46e7737f] { _msgid: '820edd68e4b23359', payload: 'Hello World!', topic: '' } ノードステータス(32文字) フローエディタ上でノードのすぐ下に出力します 他のオプションと異なり、出力する内容を別途指定できるので、ノードのステータスを端的に表現する用途で使えそうです その他のプロパティは各ノード共通のプロパティのようです。ノード名称やノードの説明、見た目を変更できます。 d

Node-RED事始め

イメージ
はじめに 最近 Node-RED を触り始めました。「 ローコードプログラミングツール 」と呼ばれるもので、黒い画面を触らなくてもプログラミングができるのがウリです。個人的にはこの手のツールは学習コストが高いだけ、と敬遠しがちでしたが、実際に触ってみると考え方がとてもシンプルでとっつきやすい上に、自分でノードを開発してnpm上で公開できるということで大きな可能性を感じました。 軽く触ってみた感じ、プロトタイピングに向いたツールのようですが、異常系もスッキリと実装できるので、それなりに規模の大きなアプリケーションの実装にも耐えられるのでは、と期待しています。今回は、Hello World的なデバッグログを出力するだけのゴミサンプルを作ってみます。 前提条件 MacOS上で作業することを前提とします。Node-REDのバージョンは執筆時点で最新版のver.2.0.6です。 nvmのインストール Node-REDのインストール方法はいろいろありますが、今回はnvm+Node.jsの上にインストールしていきます。いきなりNode.jsをインストールするとNode.jsのバージョン切り替えが面倒になるのでバージョン管理ツール「 nvm 」を通じてインストールします。というわけで、まずはnvmをインストールします。nvmのインストール方法は 公式情報の手順 に従います。ちなみに、以下の例で行頭の「$」はプロンプトというものです。よくわからずコピペする場合は省いてください。 $ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash Node.jsのインストール 続いてnvmを使ってNode.jsの環境を整えます。Node.jsの最新バージョンを調べてそれをインストールします。以下の例では、Node.jsのv16.9.1をインストールしています。最後に有効なNode.jsとnpmのバージョンを確認します。 $ nvm ls-remote $ nvm install v16.9.1 $ nvm alias default v16.9.1 $ node --version v16.9.1 $ npm --version 7.21.1 Node-REDのインストール