Skip to content

DNET_NodeRED

nishi_74322014 edited this page Sep 11, 2026 · 1 revision

Node-RED

概要

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

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

特徴

Apache NiFiと同じ、flow-based programming(Apache NiFiの該当節を参照)ツール。

  • エッジ側で動作させる事に主眼をおいて開発されている。
  • デバイス側でも動作する(BLEや各種センサープロトコルに対応したプラグインが豊富)
  • NiFiは、NiFiとMiNiFiに分かれているが、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環境(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にアクセスする。

http://localhost:1880/

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

実行

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

IMP/EXP

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

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

ノード

主要なノードの説明

入力グループ

出力グループ

機能グループ

  • プログラミング

    • 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クライアント

(元 Wiki では見出しのみで本文が無い。)

HTTPリスナ

  • 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
    
  • 参考

MQTTブローカ

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クライアント

  • 「MQTT out」ノードを使用する。

  • mosquitto_pubを使用する。

    mosquitto_pub -h localhost -p 1883 -t message -m 'hoge' -d
    

    ※ localhostの部分は、FQDN名やIPアドレスなどでもOK(当たり前だが

Node-RED On Rasbian

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に指定する。

ダッシュボード

Dashboard

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

HTTP Inノード

その他(セキュリティ)

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

参考(セキュリティ)

参考

Node-RED(公式)

https://nodered.org/

MQTT

Qiita

移行メモ

  • 元 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

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally