-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_NodeRED
ちょっと触ることになったので。
Apache NiFiと同じ、flow-based programming(Apache NiFiの該当節を参照)ツール。
- エッジ側で動作させる事に主眼をおいて開発されている。
- デバイス側でも動作する(BLEや各種センサープロトコルに対応したプラグインが豊富)
- NiFiは、NiFiとMiNiFiに分かれているが、Node-REDは、分かれていない。
モノのインターネットを配線するための
Node-REDエディタ
ノードを参照。
サブ・プロジェクトを参照。
ローカルのPCやクラウド、Raspberry Pi上で動作させることが可能。
デスクトップPC上の開発環境でも動作する。
サーバとしても動作する。
Raspberry Piなどのデバイス(クライアント)上でも動作する。
Node-REDのダッシュボードUI
- 参考
- node-red-dashboard (node) - Node-RED
https://flows.nodered.org/node/node-red-dashboard
- node-red-dashboard (node) - Node-RED
Open APIドキュメントや関数ノードのソースなど、
様々なソースからNode-REDノードモジュールを生成するCLI
- 参考
- Node-REDのノード開発容易化ツール Node generator
https://www.slideshare.net/BMXUG/noderednode-generator
- Node-REDのノード開発容易化ツール Node generator
Node-REDインスタンスをリモートで管理できるCLI
- 参考
- Command-line Administration : Node-RED
https://nodered.org/docs/user-guide/node-red-admin - コマンドラインAdminツール : Node-RED日本ユーザ会
https://nodered.jp/docs/user-guide/node-red-admin
- Command-line Administration : Node-RED
システム間の接続インタフェース(API)を統合管理する技術
- 参考
- 日立、プログラミングツール「Node-RED」の連携を
容易に実現する技術開発 | マイナビニュース
https://news.mynavi.jp/article/20170809-a139/
- 日立、プログラミングツール「Node-RED」の連携を
- 参考
- Windowsで実行する : Node-RED日本ユーザ会
https://nodered.jp/docs/getting-started/windows
- Windowsで実行する : Node-RED日本ユーザ会
Docker環境(VM起動後の開発環境のセットアップを参照)を準備して、以下を行う。
-
Docker Build
-
Dockerfile
FROM nodered/node-red RUN mkdir -p $HOME/.node-red RUN cd $HOME/.node-red RUN npm install node-red-contrib-aedes
※ MQTTブローカを動かすため、追加インストールを行っている。
-
ビルド
>docker build -t nodered-sample:p1 .
-
-
Docker Compose
-
docker-compose.yml
version: '3.4' services: nodered_sample: image: nodered-sample:p1 ports: - "1880:1880" - "1883:1883"
-
起動
>docker-compose up
※ portsは、ホスト側:コンテナ側で、1880は、HTTP。1883は、MQTTブローカ。
-
起動したら、以下のURLにアクセスする。
フロー・エディタが起動する。
フロー・エディタでフローの定義が完了したら、デプロイ・ボタンを押下。
フローのインポート / エクスポート
- Ctrl + i で インポート
- Ctrl + e で エクスポート
主要なノードの説明
-
Injectノード
指定の間隔で日時などの文字列を生成 -
, etc.
-
Debugノード
Debug出力を行う。 -
, etc.
-
プログラミング
- switchノード
IF文に相当する。 - commentノード
commentを書く - functionノード
JavaScriptで処理を実装
- switchノード
-
文字列処理
-
changeノード
文字列を代入/置換/削除/移動する。 -
splitノード
文字列を分割する。 -
joinノード
splitで分割した文字列を結合する。 -
htmlノード
htmlから文字を抜く。 -
templateノード
template(html等)に文字を埋める。
-
-
通信クライアント系
-
http requestノード
HTTP/HTTPSクライアント -
emailノード
IMAP/POP3クライアント -
feedparseノード
RSSリーダー
-
-
random
ランダムな値を生成 -
bigtimer
タイマーイベントを発生 -
dashboard
ダッシュボード(HTML)のUI -
worldmap
地図(HTML)を出力するUI
(元 Wiki では見出しのみで本文が無い。)
-
HTTPは、フローエディタ(トップ・ページ)とAPI(サブ・ディレクトリ)で共用
-
以下はサンプルのフロー(IMP/EXPの手順で、インポート可能)
[ { "id": "f6f2187d.f17ca8", "type": "tab", "label": "Flow 1", "disabled": false, "info": "" }, { "id": "3e63d5c0.89476a", "type": "http in", "z": "f6f2187d.f17ca8", "name": "HTTP Endpoint", "url": "hoge/:param", "method": "get", "upload": false, "swaggerDoc": "", "x": 160, "y": 320, "wires": [ [ "3dcdaca5.9f0f64" ] ] }, { "id": "7027d3d1.6d81fc", "type": "debug", "z": "f6f2187d.f17ca8", "name": "Debug", "active": true, "tosidebar": true, "console": true, "tostatus": true, "complete": "payload", "targetType": "msg", "statusVal": "payload", "statusType": "auto", "x": 420, "y": 260, "wires": [] }, { "id": "4cd59e40.9521f", "type": "http response", "z": "f6f2187d.f17ca8", "name": "HTTP Response", "statusCode": "200", "headers": {}, "x": 500, "y": 340, "wires": [] }, { "id": "3dcdaca5.9f0f64", "type": "template", "z": "f6f2187d.f17ca8", "name": "page", "field": "payload", "fieldType": "msg", "format": "handlebars", "syntax": "mustache", "template": "<!DOCTYPE html>\n<html lang=”en”>\n<head>\n<title>Response Named Parameters</title>\n</head>\n<h1>Page found Named Parameters {{req.params.param}}</h1>\n</html>", "output": "str", "x": 330, "y": 340, "wires": [ [ "4cd59e40.9521f", "7027d3d1.6d81fc" ] ] } ] -
以下のようにアクセスして動作確認する。
(サブ・ディレクトリが、Web APIになる。)http://localhost:1880/hoge/hogehoge -
参考
- HTTPエンドポイントを作成 : Node-RED
https://cookbook.nodered.jp/http/create-an-http-endpoint - Node-Red Web Server -HTTP-IN and HTTP Response Nodes - Steves Node-Red Guide
https://stevesnoderedguide.com/http-in-http-response-nodes
- HTTPエンドポイントを作成 : Node-RED
MQTTブローカ
-
MQTTブローカには、
- node-red-contrib-mqtt-brokerを使用する。
- 受信したメッセージを使用するには「MQTT in」も必要になる。
- 別のMQTTブローカにメッセージを送信するには、MQTTクライアントを使用する。
-
以下はサンプルのフロー(IMP/EXPの手順で、インポート可能)
[ { "id": "f6f2187d.f17ca8", "type": "tab", "label": "Flow 1", "disabled": false, "info": "" }, { "id": "1d2a9951.8880c7", "type": "aedes broker", "z": "f6f2187d.f17ca8", "name": "", "mqtt_port": 1883, "mqtt_ws_port": "", "cert": "", "key": "", "certname": "", "keyname": "", "dburl": "", "usetls": false, "x": 240, "y": 100, "wires": [ [ "b9d42de9.5a91f" ] ] }, { "id": "b9d42de9.5a91f", "type": "debug", "z": "f6f2187d.f17ca8", "name": "", "active": true, "tosidebar": true, "console": true, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 450, "y": 100, "wires": [] }, { "id": "70b86e52.71106", "type": "mqtt in", "z": "f6f2187d.f17ca8", "name": "", "topic": "hoge", "qos": "2", "datatype": "auto", "broker": "e9b0ae32.61f46", "x": 210, "y": 160, "wires": [ [ "ba2f427b.97b3f" ] ] }, { "id": "ba2f427b.97b3f", "type": "debug", "z": "f6f2187d.f17ca8", "name": "", "active": true, "tosidebar": true, "console": true, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 460, "y": 160, "wires": [] }, { "id": "e9b0ae32.61f46", "type": "mqtt-broker", "name": "hoge", "broker": "localhost", "port": "1883", "clientid": "", "usetls": false, "compatmode": false, "keepalive": "60", "cleansession": true, "birthTopic": "", "birthQos": "0", "birthPayload": "", "closeTopic": "", "closeQos": "0", "closePayload": "", "willTopic": "", "willQos": "0", "willPayload": "" } ] -
MQTTクライアントを使用して、上記のMQTTブローカにメッセージを送信する。
MQTTクライアント
-
「MQTT out」ノードを使用する。
-
mosquitto_pubを使用する。
mosquitto_pub -h localhost -p 1883 -t message -m 'hoge' -d※ localhostの部分は、FQDN名やIPアドレスなどでもOK(当たり前だが
IoTデバイス上で実行させるフロー
Node.js + Expressの設定で行うことが出来る。
-
認証
- 従来は、httpAdminAuthでBasic認証をサポートしていたが、今は非推奨。
- 現在は、httpAdminAuthではなく、adminAuthを使用する。
-
<node-red>/user-authentication.jsにカスタムユーザ認証を追加できる。 - Passportで、OpenID/OAuthを追加できる。
-
カスタム・ミドルウエア
httpAdminMiddlewareを使用できる。
- /auth/tokenエンドポイントが、ROPCを実装している。
- ココで入手したaccess_tokenをAuthorization: Bearerに指定する。
ダッシュボードだけに適用する場合、
node-red-dashboard自体に設定がある。
- 参考
- Node-REDのダッシュボードだけにBasic認証をかけるメモ – 1ft-seabass.jp.MEMO
https://www.1ft-seabass.jp/memo/2020/02/29/node-red-dashboard-only-basic-authentication/
- Node-REDのダッシュボードだけにBasic認証をかけるメモ – 1ft-seabass.jp.MEMO
-
認証
- httpNodeAuthを使用する。
- httpAdminAuthと同じ仕組み。
-
CORS
httpNodeCorsを使用する。 -
カスタム・ミドルウエア
httpNodeMiddlewareを使用できる。 -
参考
- Node-REDのhttp inノードでBasic認証を有効にする - Qiita
https://qiita.com/takeyan/items/19b894197d30b65626c5 - Node-RED の http-in ノードに
Basic 認証をかける : まだプログラマーですが何か?
http://dotnsf.blog.jp/archives/1072144184.html
- Node-REDのhttp inノードでBasic認証を有効にする - Qiita
- httpStaticAuth
静的コンテンツに対する認証。
- Node-RED日本ユーザ会
-
Node-RED - Wikipedia
https://en.wikipedia.org/wiki/Node-RED -
Steves Node-Red Guide
https://stevesnoderedguide.com/ -
IoTアプリ開発をノンコーディングで!
Node-REDはこう活用しよう【デブサミ2019】 (1/2):CodeZine(コードジン)
https://codezine.jp/article/detail/11416 -
Node-REDがつなぐ技術と人 〜
Node-RED Con Tokyo 2019レポート | さくらのナレッジ
https://knowledge.sakura.ad.jp/22342/ -
書籍:Raspberry Pi 3でつくる IoTプログラミング
https://book.mynavi.jp/ec/products/detail/id=64776
-
Node-RED日本ユーザ会
https://nodered.jp/ -
Dockerで実行する : Node-RED日本ユーザ会
https://nodered.jp/docs/getting-started/docker
-
IoT関連の通信プロトコル - マイクロソフト系技術情報 Wikiの「MQTT」の該当節を参照。
-
1分でIoT環境を構築!Node-RED上でMQTTブローカを立ち上げる手順 - Qiita
https://qiita.com/zuhito/items/d8ac0f602e0f09b02eac -
MeshbluでオープンソースのIoTをはじめよう
Part5: RESTとMQTTのメッセージングとデータ保存 | masato's blog
http://masato.github.io/2015/07/17/meshblu-compose-curl-mqtt-test/
-
Node-RED事始め
https://qiita.com/joeartsea/items/93e8483a31292067c654 -
動かして理解するDockerでのNode-RED環境構築
https://qiita.com/KMiura95/items/b399be0358b003f4e53e -
目からウロコ!Node-REDの
-
Node-RED Advent Calendar
-
Node-REDが動作するコンテナをビルドして Kubernetes で実行するまでを解説
移行メモ
- 元 Wiki では
[[JavaScript]]が MS 側の同名ページを指す解決になるが、 本ページは開発基盤部会 Wiki 側のページであるため JavaScript にリンクした。- 元 Wiki では見出しそのものが他ページ・同ページ内へのリンクになっていた箇所 (「様々なノード」「サブ・プロジェクト」「MQTTブローカ」「MQTTクライアント」 「ダッシュボード」「Node-RED On Rasbian」「Node-RED」「MQTT」)は、 GitHub Wiki では見出しからアンカが生成されるため、 見出しをプレーン・テキストとし、リンクは直下の本文に置いた。
- 同名の見出し(「ローカル」「その他」「参考」「Node-RED」)が複数あり GitHub Wiki でアンカが衝突するため、括弧で文脈を補って一意にした。
- マイクロソフト系技術情報 Wiki(techinfoofmicrosofttech.osscons.jp)への URL リンクは、移行済みの IoT関連の通信プロトコル に張り替えた。
- PukiWiki のページ内アンカ(
#xxxxxxxx)は GitHub Wiki では再現できないため、 同一ページ内のアンカは見出しから生成されるアンカに張り替え、 他ページのアンカを指すリンクは「〜(ページ名の該当節を参照)」の形に置き換えた。
Tags: 移行, Node-RED, flow-based programming, IoT, MQTT, Node.js, Docker, ダッシュボード, Raspberry Pi
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。