1日ひとつ、強くなる。content1日ひとつ、強くなる。websockets.このレクチャーでは、いくつか一般的に使われるノードの紹介と、既に以前のレクチャーで紹介したものの詳細については触れていなかったものを再度取り上げます。知られたMQTTプロトコルに基づいたサンプルから始めていきます。これによって、基本的な、しかしとても便利なメッセージ処理をするノードを、どのようにつなげていいかがわかるはずです。次に、メッセージを取り込んだり出力するための他の方法として、TCPやUDPやwebsocketといったプロトコルの扱い方もとりあげます。flow.このレクチャーが終わる頃には、Node-REDフローに用いられる基本的なノードの理解ができることでしょう。洗練された処理のためのフローが、如何に簡単につくれるかということも理解できるはずです。現実世界のイベントを取得して、それを処理し、返答を生成して、インターネット上の一般的なプロトコルを用いて、フローの外の世界と通信します。FRED.例によってFREDを使っていきます。Chageノードを使って、メッセージを変更する。topic.これから続く一連のサンプルは、MQTTノードを構築していきます。MQTTノードはMQTTブローカーからの入力を簡単に取得する方法を提供します。/subscribeシステムを持ち、sensorたちに更新をpublishさせ、そのsensorをsubscribeしているクライアントに、その情報を届ける仕組みです。MQTTはトピックモデルによって運用され、パブリッシャー(sensor)にトピックをたて、トピックをpublishし、パブリッシャー以外はそのトピックをsubscribeして、そのトピックへポストされたデータを非同期に受け取ります。Transport.Pub/Subシステムは、ゆるく連結した分散型のシステムをつなぐためにとてもいい方法です。このシステムは典型的なIoTで用いられるパターンにマッチしていて、デバイスやThingsがイベントを生成し、それを他のデバイスやThingsと共有するような場合に向いています。MQTTプロトコルは、非同期であることを除けば、軽量で、HTTPよりも負荷が低いです。これは、リソースが限られたデバイスにとっては、重要な利点です。MTQQは元々1990年代後半に開発され、それ以来様々なIoTにおいて使われてきました。MQTTはOASISとして2014年に標準化され、IoTで使用される規格としては標準的なものとなっています。Transportの略記です。msg.topic.MQTTノードを使うためには、Brokerにアクセスする必要があります。フリーのMQTTサーバーがいくつもあり、たとえばhttp://test.mosquitto.org/や、このレクチャーで使うwww.hivemq.comなどがあります。Brokerアドレスと、topicを使うことで、MQTTインプットノードを、そのトピックをサブスクライブし、そのトピックでpublishがされた際に、新しいメッセージを生成させることにしましょう。そのmessageはpublishされたデータに関する情報を含み、データはmsg.playloadに、MQTTブローカーのtopicはmsg.topicに含まれています。one.MQTTノードを使うために、MQTTブローカーであるhivemqを使います。他のどのMQTTブローカーを使うこともできます。自分でインストールしたサーバーを使うこともできます。here>/sensorまずはいつも通りMQTTインプットノードをドラッグ・アンド・ドロップでは位置して、設定画面からborkerのための情報を入力しましょう。大事なことは他の人とかぶらないtopic名を設定することです。この例ではnoderedlecture/sensorというトピックたて使用していますが、あなたはそれとは違う名前のトピックを建てるようにしてください。自分の名前/sensorとか、ですね。(訳注:よくわからないが、とにかくトピックと、サーバーだけ同じにしておけば、受信できる模様。ポートとかクライアントIDは異なっていても受信できる。node.MQTTメッセージをhivemqに送る方法はたくさんあります。上の2つのリンクは、公式が提供しているものでこれを使うこともできますし、自分でライブラリをつくってもいいでしょう。このサンプルでは、上記のリンクのうち、最初のもの、WebSokcetクライアントをつかっていくことにします。output.ここではJSON形式の文字列を送っているので、MQTTノードが受け取って、そして生成したメッセージをパースする必要があります。そのためにJSONノードを配置し、MQTTノードのアウトプットをこれに入力します。versa.Node-REDのJSONノードは、JSONを変換してJSオブジェクトに変換してくれますし、またその反対もできます。3.3).結線して、debugノードをつかってみましょう。ディプロイした後にHiveMQダッシュボードを使ってJSON文字列を送りましょう。するとdebug窓で確認できます。that.Outputの内容をより詳細にみてみると、msg.payloadはオブジェクトをもっていることがわかります。そのオブジェクトは、2つのフィールドを持ち、1つはanalyzeでもう一つはvalueで、それぞれそのフィールドに対応する値を持っています。レクチャー2でみたように、これらのフィールドにmsg.payload.analyzeでアクセスすることができます。outputs.JSONオブジェクトをもちいる利点の一つは、そのプロパティに簡単にアクセスできることです。そのために便利なのは、Switchノードです。このノードは、入力されたメッセージのプロパティの値によって、スイッチングし、その経路にメッセージを送ります。msg.payload.analyzeプロパティをチェックして、その値によって(tureかfalse)switchノードのいずれかのアウトプットにメッセージを送ります。3.4.switchノードをいつも通りドラッグ・アンド・ドロップして配置して、ダブルクリックして設定画面に入りましょう。msg.payload.analyzeプロパティを評価するように設定します。Outputに出力します。Outputから出力します。3.5.次の図では2つのdebugノードにswitchノードのアウトプットをつなぎました。switchノードに複数のアウトプットを設定した場合には、上から順番にアウトプットの番号がつけられます。Fig.3.5ではoutput1が一番上にあって、その下にあるのがoutput2です。3.6.さきほど作成したHiveMQを受け取るフローを少し修正してSwitchノードを使ってみましょう。Outputが有効になり、ここに入力されたメッセージが出力されます。“value”:10}を送った場合にはOutput2が有効になり、下のデバグノードがメッセージを受け取ります。デバグ窓でデバグメッセージにマウスを重ねると、どのデバグノードがメッセージを出力されたかを示してくれます。input.このノードを使えば、入力されたメッセージの値に基づいて、フローの異なる場所へメッセージを流していくことができます。Chageノードを使って、メッセージを変更する。properties.どんどん便利なノードを紹介していきましょう。今回はChangeノードです。これをつかえばmessageのpayloadを変更したり、新しいプロパティを追加することができます。あるプロパティを変更したり、削除したり、加えたりすることができます。msg.payload.note.次の例はさきほどから使用しているMQTTフローをそのまま使用、追加していきます。これは入力されたメッセージによってスイッチするものでしたが、さらにこれに新しいmessageプロパティであるmsg.payload.noteを追加することにしましょう。Outputに接続してください。このアウトプットには、msg.payload.analyzeがfalseのときにだけ、メッセージが届きますね。3.8.では設定していきましょう。analyzed”という文字列のものが追加されます。fires.次の例でも引き続き、さきほどのものを使っていきます。今回追加するのはRBEノードで、これを使うことで値が変更されたときだけ、メッセージを通すことができます。messageのpayloadを検査して、メッセージが変更されるまでブロックしたり(rbaモード)、メッセージの変更が特定の範囲の間にだけ機能するようにすることができます。rbaモードでは、数字に対しても文字列に対しても動作します。deadbandモードにおいては、数字にたいして動作し、その値の範囲設定は、最後に発火したときの値から、どれくらいの範囲なのかで指定することができます。3.10.下の図のようにつないでください。flows.コメントノードを使うと、複雑なものに対して説明がつけられるので便利です。3.11).changeノードを変更して、msg.payloadに対してmsg.payload.valueを与えるようにしましょう。することで、このノードのoutputを、インプットから受け取ったmsg.payload.valueの値に変更することになります。20%.値の変化が20%以上のときにだけ反応するように設定しましょう。20%以上の変更がない場合には、ブロックする、という設定にします。3.13.ではHiveMQのページにいってメッセージを送り、このフローをテストしてみましょう。最初に、送るメッセージのanalyzeプロパティの値をtrueにし、スイッチノードがOutput1にスイッチするようにしましょう。最初にvalue:6をおくると、rbeノードを通りません。次に、value:10を送ると、rbeノードは先程の6と今回の10の差を比較して、それが20%以上あれば、debugノードへと値を送ります。その値がdebug窓に表示されます。false.実世界の入力を、例えばセンサーといったデバイスから受け取って処理する場合には、インプットされたデータをスケーリングする機能はよく必要になります。Node-REDはscaleノードを提供し、これをサポートしています。仮に0〜10の値を0から255の値にしたいが、自分ではわざわざ分析をしたくはない、という状況があるとしましょう。今回は、analyzeプロパティがfalseの時に発火する、フローの下側の部分を扱います。3.14.次のように変更してください。コピペコマンドも普通に使えます。3.15.Rangeノードをダブルクリックして編集していきましょう。inputを0-10の範囲を0-255に対応するようにアウトプットします。range.スケールノードには3つのオプションがあります。デフォルトでは、与えられたマッピング範囲によってスケーリングをするのですが、その際に、与えられた範囲外の値も同じように処理をします。rangeからは決して外れません。レンジの中で折り返します。“value”:10}と新しいメッセージを、さきほどと同じトピックにポストしましょう。3.16.ではNode-REDウィンドウに戻って、フローの下側と関連付けられたdebugノードが発火し、msg.payload.valueプロパティが示されていますね。MQTTで10の値をパブリッシュしたわけですが、これがスケーリングされて255という値になっています。page.HiveMQのテストページを使ってMQTTトピックを発行する以外に、MQTTアウトプットノードを使う方法もあります。これはMQTTインプットノードとついになるもので、MQTTサービスを使う設定をし、そこで発行するトピックの設定もします。これによって今までHiveMQテストページで送信してきたようなJSON文字列のメッセージを送信することができます。shownやってみましょう。exercised.インジェクトノードの左側のボタンをおしてMQTTメッセージを送信し、テストしてみましょう。at:https://raw.githubusercontent.com/SenseTecnic/nrguideflows/master/lesson3/3-6_mqqtout.json訳注:細かい設定方法が書いてなかったので、自分が設定したものを画像でのせます。injectノードで文字列をフローに挿入します。アウトノードの設定です。サーバーを先程受信していたものと同じにしました。MQTTインプットは、アウトプットと同じにします。トピックも同じにします。ウェブソケットをNode-REDで使う上手く行かなかったので、パス。request.Websocketも便利なコミュニケーションのために使える機能で、Node-REDではwebsocketノードを使って実装できます。websockets.Websocketノードは、inputとoutputの二種類があり、ウェブソケットの入力をまったり、送信したりすることができます。1日ひとつ、強くなる。バージョンを管理する。node-redも入れる。(1)HomeAbout記事一覧1日ひとつ、強くなる。