WindowsのNode-REDに、「MQTT→SQL Serverへinsert」させる (全3回:第3回 MQTTメッセージ→SQL Serverへinsertのフローを作成)

製造業向けIoT担当です。

製造業界隈によくある環境(Windows&SQL Server)で、MQTTメッセージ→SQL Serverへinsertの動作確認ができるまでをセットアップしてみます。

最後は、実際のNode-REDを使って、MQTTメッセージの送信/受信、受信したデータのデータベース登録を行います。

 

まとめ(手順サマリ)

第1回 Node-REDのサービス化

1.PackageManagementのインストール(パッケージ管理環境を整えます。その1)
2.Chocolateyのインストール(パッケージ管理環境を整えます。その2)
3.nssmのインストール(サービス化ツール)
4.Node-REDのインストール
5.nssmで、Node-REDのサービス化

第2回 MQTTメッセージブローカーの設定

1.Erlangのインストール(RabbitMQの動作用)
2.RabbitMQのインストール(メッセージミドルウェア)とMQTTブローカ追加

第3回 MQTTメッセージ→SQL Serverへinsertのフローを作成(今回)

1.Node-REDのパレットに、MSSQLノードを追加
2.フローを作成

 

1.Node-REDのパレットに、MSSQLノードを追加

右上の「≡」マークをクリック、「パレットの管理」を選択します。

「ノードの追加」タブで、「node-red-contrib-mssql」を検索します。

同名の候補を見つけ、「ノードを追加」をクリックして、完了したら「閉じる」で、元の画面戻ります。

(上記の図は、追加済みです。)

左ペインの「ストレージ」に、「MSSQL」ノードが追加されています。

2. フローを作成

ステップバイステップで、進めてみます。

2.1.  MQTTメッセージの受け取り

入力から、「inject」をフローにドラック&ドロップします。

ドロップしたノードをダブルクリックして、ノードの設定を行います。

ペイロードに「文字列」を選択し、任意の文字列を入力。「設備からメッセージ(デバッグ)」としておきます。

他は、何も入力せず、「完了」をクリックします。

次は、出力の「mqtt」をドラック&ドロップします。先ほどのinjectノードの右隣りがいいでしょう。

ドロップしたノードをダブルクリックして、ノードの設定を行います。

サーバの右にある鉛筆マークで、mqttサーバの指定を行います。

mqtt-brakerノードの設定が開くので、設定します。

RabbitMQのmqttプラグインの追加だけの行っているため、セキュリティタブの「ユーザ」「パスワード」は、何も入力しません。

接続タブの下記以外、すべて、デフォルト、または、未入力にします。

サーバ:「localhost」、ポート:「1883」

入力したら、「完了」(下図は「更新」になっています)をクリックして、mqtt out ノードの編集画面に戻ります。

mqtt out ノード編集に戻り、下記を入力して、「完了」をクリックします。

トピック:「for_demo」

QoS:2 (QoS2=正確に1回)

injectノードとmqtt outノードを繋げます。

接続部にマウスが乗ると色が変わるので、変わったところでクリックしたまま、繋げ先の接続部にドラッグします。

これで、送信部品が出来上がりました。

次は、受信部品を作ってみます。

(自分で、自分にmqtt送信する仕掛けになります。)

入力の「mqtt」をドラック&ドロップします。ドロップしたノードをダブルクリックして、ノードの設定を行います。

サーバ欄とQoS欄は、デフォルトで、先ほどのmqtt out ノードの設定になります。

トピックをmqtt out ノードと同じ(「for_demo」)にして、「完了」をクリックします。

受信できたか確認するため、デバッグ部品を繋げます。

出力の「debug」をドラック&ドロップします。mqtt outノードの結果を表示するので、mqtt outノードの右隣りに置きます。

並べたら、ノードを繋げて完了です。

右上の「デプロイ」があるので、クリックするか、「変更したフロー」を選択します。

上中央に、デプロイの成功メッセージが表示されます。

右のペインの「デバッグ」タブを開いて、デバッグメッセージを表示する準備を行います。

初めに用意したinjectノードの左端のボタンをクリックすると、送信・受信が確認できます。

injectのペイロードは、mqtt通信を通して、debugノードで表示されることを確認できます。

(事前準備)SQL Serverにデモ用テーブルを登録します。

ココでは、以下のテーブルを登録しました。

下記は、適宜、実施する環境で変更ください。

データベース:<データベース名>

テーブル名:W999_WORK_MQTTDATA

CREATE TABLE <データベース名>.dbo.W999_WORK_MQTTDATA

(

Topic      nvarchar(255)    NOT NULL

, Payload    nvarchar(1000)   NOT NULL

, Timestamp  datetime2        NOT NULL

, CONSTRAINT PK_W999_WORK_MQTTDATA

PRIMARY KEY CLUSTERED (Topic, Timestamp)

);

2.2. 受け取ったメッセージのINSERT文の作成

「機能」の「functon」をフローにドラッグ&ドロップします。

ドラッグしたノードをダブルクリックします。

名前:insert

コード:以下を張り付けてください。

d = new Date(),

dformat = [d.getMonth()+1,

d.getDate(),

d.getFullYear()].join(‘/’)+’ ‘+

[d.getHours(),

d.getMinutes(),

d.getSeconds()].join(‘:’);

 

pld =       “INSERT INTO [dbo].[W999_WORK_MQTTDATA] ”

pld = pld + “(Topic, Payload, Timestamp) ”

pld = pld + “VALUES (‘” + msg.topic + “‘, ‘” + msg.payload + “‘, ‘” + dformat + “‘)”

 

msg.topic = ”

msg.payload = pld

return msg;

 

他は、変更せず、完了します。

 

先に作っておいたMQTT受信ノードと結合します。

 

気になる方は、今作ったfunctionノードにデバッグノードを繋げてもいいです。

デプロイして、injectノードのボタンを押すと、デバッグにINSERT文が出力されます。

 

↓こうなります。

2.3. INSERTの実行

SQL Serverに接続して、先ほどのINSERTを実行します。

ストレージから、MSSQLノードを選択して、フローにドラッグ&ドロップします。

配置したMSSQLをダブルクリックして、設定画面を表示します。

Connectionの右にある鉛筆マークボタンで、DBへの接続設定を行ってください。

設定が完了したら、右上にある「追加(下記の図は更新)」ボタンを押下ください。

Name:任意の名称

Server:接続先サーバ

Username:接続するDBへのユーザ名

Password:接続するDBへのユーザパスワード

Domain:(今回は、設定しません。)

Database:接続するデータベース名

 

元のMSSQLノードの設定画面に戻ります。

Connectionに、先に設定した接続情報の名称が選択できるので、ConnectionとNameを設定したら、「完了」してください。

最後に、フローのINSERT文を設定した「function」ノードと今作ったMSSQLノードを接続します。

フローの全体は、↓のようになります。

再び、右上にある「デプロイ」を押下して、このフローを動作反映させます。

初めに用意したinjectノードの左端のボタンをクリックすると、送信・受信が確認できます。

データベースに登録されたことが確認ください。

(下記は、A5:SQL Mk-2(https://a5m2.mmatsubara.com/)で参照しました。)

 

3回にわたって、「MQTT→SQL Serverへinsert」させるまでの環境を作成しました。

 

例えば、工場の事務所のノートPCを利用することで、エッジコンピューティングの実証実験が行えると思います。

 

【参考】
第1回 Node-REDのサービス化
第2回 MQTTメッセージブローカーの設定
第3回 MQTTメッセージ→SQL Serverへinsertのフローを作成

 

ホームページ http://www.ois-yokohama.co.jp

facebook   https://www.facebook.com/orientalinformationservice/

WindowsのNode-REDに、「MQTT→SQL Serverへinsert」させる (全3回:第3回 MQTTメッセージ→SQL Serverへinsertのフローを作成)” に対して2件のコメントがあります。

コメントは受け付けていません。