.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

ちょっと触ることになったので。

  • IBM英国Hursley研究所のメンバーを中心に開発
  • OSSであり、Node.jsが動く環境であればどこでも動かせる。

特徴

Apache NiFiと同じ、flow-based programmingツール。

  • エッジ側で動作させる事に主眼をおいて開発されている。
  • デバイス側でも動作する(BLEや各種センサープロトコルに対応したプラグインが豊富)
  • NiFiは、NiFiMiNiFiに分かれているが、Node-REDは、分かれていない。

機能

モノのインターネットを配線するための

ビジュアル・ツール

Node-REDエディタ

様々なノード

サブ・プロジェクト

実行場所

ローカルのPCやクラウド、Raspberry Pi上で動作させることが可能。

ローカル

デスクトップPC上の開発環境でも動作する。

サーバー

サーバとしても動作する。

デバイス(クライアント)

Raspberry Piなどのデバイス(クライアント)上でも動作する。

詳細

サブ・プロジェクト

Dashboard

Node-REDのダッシュボードUI

Node generator

Open APIドキュメントや関数ノードのソースなど、
様々なソースからNode-REDノードモジュールを生成するCLI

Command Line Tool

Node-REDインスタンスをリモートで管理できるCLI

Flow Connection Gateway

システム間の接続インタフェース(API)を統合管理する技術

インストール

ローカル

Node.jsのインストール後にnpmでインストールする。

コンテナ

Docker環境を準備して、以下を行う。

  • 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にアクセスする。

http://localhost:1880/

フロー・エディタが起動する。

実行

フロー・エディタでフローの定義が完了したら、デプロイ・ボタンを押下。

IMP/EXP

フローのインポート / エクスポート

  • Ctrl + i で インポート
  • Ctrl + e で エクスポート

ノード

主要なノードの説明

入力グループ

  • Injectノード
    指定の間隔で日時などの文字列を生成
  • , etc.

出力グループ

  • Debugノード
    Debug出力を行う。
  • , etc.

機能グループ

  • プログラミング
  • switchノード
    IF文に相当する。
  • commentノード
    commentを書く
  • functionノード
    JavaScriptで処理を実装
  • 文字列処理
  • 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

パターン

HTTPクライアント

HTTPリスナ

  • HTTPは、フローエディタ(トップ・ページ)とAPI(サブ・ディレクトリ)で共用
  • 以下はサンプルのフロー(コチラの手順で、インポート可能)
    [
        {
            "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

MQTTブローカ

  • MQTTブローカには、
    • node-red-contrib-mqtt-brokerを使用する。
    • 受信したメッセージを使用するには「MQTT in」も必要になる。
    • 別のMQTTブローカにメッセージを送信するには、MQTTクライアントを使用する。
  • 以下はサンプルのフロー(コチラの手順で、インポート可能)
    [
        {
            "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 out」ノードを使用する。
  • mosquitto_pubを使用する。
    mosquitto_pub -h localhost -p 1883 -t message -m 'hoge' -d
    ※ localhostの部分は、FQDN名やIPアドレスなどでもOK(当たり前だが

Node-RED On Rasbian

IoTデバイス上で実行させるフロー

セキュリティ

HTTPSの有効化

Node.js + Expressの設定で行うことが出来る。

エディタと管理API

  • 認証
    • 従来は、httpAdminAuth?でBasic認証をサポートしていたが、今は非推奨。
    • 現在は、httpAdminAuth?ではなく、adminAuthを使用する。
    • <node-red>/user-authentication.jsにカスタムユーザ認証を追加できる。
    • Passportで、OpenID/OAuthを追加できる。
  • カスタム・ミドルウエア
    httpAdminMiddleware?を使用できる。

管理APIの認可

  • /auth/tokenエンドポイントが、ROPCを実装している。
  • ココで入手したaccess_tokenをAuthorization: Bearerに指定する。

ダッシュボード

ダッシュボードだけに適用する場合、
node-red-dashboard自体に設定がある。

HTTP Inノード

  • 認証
    • httpNodeAuth?を使用する。
    • httpAdminAuth?と同じ仕組み。
  • CROS
    httpNodeCors?を使用する。
  • カスタム・ミドルウエア
    httpNodeMiddleware?を使用できる。

その他

  • httpStaticAuth?
    静的コンテンツに対する認証。

参考

参考

Node-RED

https://nodered.org/

MQTT

Qiita

  • 目からウロコ!Node-REDの

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-05-09 (日) 00:08:17 (137d)