Node-REDのCreating your first node を読むと自分でnodeを定義できるので慣れてくるとNode-REDの可能性がいろいろ見えてきます。Mashery やW2O2 のESBのような使い方ができます。以前開発で使っていたDataSpider Servista を利用してセンサーデータハッカソン も開催されたようです。Node-REDはNode.jsで書けるのでアイデア次第でいろいろ使えそうです。
nodeの作り方 前回 Dockerホストにカスタムのnodeを追加するディレクトリを/opt/nodes
に作成し、settings.jsのnodesDirに指定しました。このディレクトリにjsとhtmlファイルを作成します。
js: nodeのロジックを記述
html: nodeの設定を記述
lower-caseのサンプル Creating your first node にあるlower-caseのサンプルを実装してみます。
jsファイルにロジックを記述します。
/opt/nodes/99-lower-case.js module .exports = function (RED ) { function LowerCaseNode (config ) { RED.nodes.createNode(this ,config); var node = this ; this .on('input' , function (msg ) { msg.payload = msg.payload.toLowerCase(); node.send(msg); }); } RED.nodes.registerType("lower-case" ,LowerCaseNode); }
htmlファイルにnodeの設定やアイコンの指定を記述します。
/opt/nodes/99-lower-case.html <script type ="text/javascript" > RED.nodes.registerType('lower-case' ,{ category: 'function' , color: '#a6bbcf' , defaults: { name: {value :"" } }, inputs:1, outputs:1, icon: "file.png" , label: function ( ) { return this .name||"lower-case" ; } }); </script > <script type ="text/x-red" data-template-name ="lower-case" > <div class ="form-row" > <label for ="node-input-name" > <i class ="icon-tag" > </i > Name</label > <input type ="text" id ="node-input-name" placeholder ="Name" > </div > </script > <script type ="text/x-red" data-help-name ="lower-case" > <p > A simple node that converts the message payloads into all lower-case characters</p > </script >
Node-REDの画面 jsとhtmlを作成してからDockerコンテナを起動します。
$ docker run --rm \ --name node-red \ -p 1880:1880 \ -v /opt/nodes:/data/nodes \ node-red
Node-REDの画面を開くとfunctionのカテゴリにlower-caseのnodeが追加されました。injectとdebugのnodeを前後につなげます。injectのpayloadには大文字でHELLOと入力しました。deploy後にinject nodeの左のボタンを押すとフローが実行されます。debugにはpayloadの大文字のHELLOが小文字のhelloになって出力されました。