Contents
- MSM-emulatorを用いたNode-REDのプログラミング演習
- 第1ステップ
- 自習1:基本操作
- 自習2:データ受信と確認
- 自習3:データ選択
- 自習4:データの表示
- 自習5:単位の追加、打刻
- 自習6:計算
- 自習7:データの保管
- 第2ステップ
- 自習8:計測間隔
- 自習9:データ流量制限(データの間引き)
- 自習10:データ前処理
- 自習11:統計処理
- 自習12:異常値検出
- 第3ステップ
- 自習13:基準となる信号の発生
- 自習14:複数MSMのデータの結合
- 自習15:ファイルの受信
- 自習16:外部プログラムの起動
- 第4ステップ
- 自習17:オープンソースからのデータ取り
- 自習18:自動メールの発信
- 第5ステップ
- 自習19:ON/OFF操作
- 自習20:PWM操作
- 自習21:文字列送信
- 番外編:出前講座用フロー(自習とは関係ありません)
MSM-emulatorを用いたNode-REDのプログラミング演習
このページでは、MSM-emulator(模擬マルチセンサモジュール)を用いて、Node-REDフローのプログラミングを自習する方法を説明します。
✔ 下記の手順でサーバーに接続することによって、MSM(Multi-Sensor Module)の実物からのデータと同じフォーマットで送信されるデータを受信することができます。この模擬データを使って、Node-REDのプログラミングを自習してください。
模擬対象のオンボードセンサは、BME688(環境), BMX160(9軸モーション), および、ADS1015(アナログ信号入力)の3種類です。前者の2センサは実測データを繰り返し送信します。最後のセンサ(ADC)は、アナログ出力のセンサを接続したことを想定して、プログラム上で擬似データを送信しています。
MSMに搭載しているセンサの仕様については、下記ページをご覧ください。
✔ ご自身で自習用に用いるパソコンをご準備ください。そのパソコンの動作条件は①インターネットに接続可能、②Node-REDがインストール済み、の2点です。
Node-REDとはGUI形式でプログラミングできるミドルウエアです。”Scratch“や”ブループリント“などと同じビジュアル スクリプティング システムです。パソコンへのインストール方法は以下のリンク先をご確認ください。インストールに関しては、ご自身の責任において実行してください。
インストールに際して生じたトラブルに関しては、責任を負いませんのでご承知ください。
■ 動作環境
・インターネット接続
・Node-REDをインストール済み
■ Node-REDインストール方法
✔ MSM-emulatorと実際のMSM本体との関係を下図にしまします。
MSM-emulatorを使う場合とMSMを使う場合で、受け手の入り口のノードだけを変えるだけで以降のNode-REDのフローは同じにできます。
第1ステップ
自習1:基本操作
① ご自身のPCにインストールしたNode-REDに、パレットマネージャを使ってdashboardノードを追加してください。
② injectノード, debugノードを使って、フローを作成(配線)し、デバッグ・サイドバーに”Hello World!”を表示してください。
③上記②作成したフローを書き出してください。flow.jsonという名のファイルがダウンロードされることを確認してください。
④参考フロー flow001.json を読み込み、動作確認してください。
<必読ページ>
Node-REDの基本所作(起動、終了、文字表示、フローの書出し/読込み)
<参考フロー:flow001.json>
[{"id":"aa535a7e8c2f6b96","type":"tab","label":"自習1","disabled":false,"info":"","env":[]},{"id":"b9ef4f78558754d6","type":"inject","z":"aa535a7e8c2f6b96","name":"文字列表示","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"Hello World!","payloadType":"str","x":100,"y":80,"wires":[["108a010b867bc777"]]},{"id":"108a010b867bc777","type":"debug","z":"aa535a7e8c2f6b96","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":240,"y":80,"wires":[]}]
自習2:データ受信と確認
データ受信用にmqtt inノードを配置し、ADS1015のデータを受信し、debugノードで受信内容を確認してください。
mqttの受信のためには、ユーザーIDとパスワードが必要です。別途連絡されているユーザーIDとパスワードを設定してください。
ポート番号は、8101です。
<参考ページ>
<フロー回答例>
[{"id":"ec9f343cc9c3e254","type":"tab","label":"自習2","disabled":false,"info":"","env":[]},{"id":"bfdbafa0dd76f96d","type":"mqtt in","z":"ec9f343cc9c3e254","name":"","topic":"ads1015","qos":"2","datatype":"auto-detect","broker":"f24fa540a6c3e4ef","nl":false,"rap":true,"rh":0,"inputs":0,"x":120,"y":60,"wires":[["89a5e5d9ccba991c"]]},{"id":"89a5e5d9ccba991c","type":"debug","z":"ec9f343cc9c3e254","name":"ads1015","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":260,"y":60,"wires":[]},{"id":"f24fa540a6c3e4ef","type":"mqtt-broker","name":"","broker":"34.168.229.56","port":"8101","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}]
自習3:データ選択
MSM emulatorのADS1015の出力を受信し、ADC0のデータだけを取り出し、debug サイドバーに表示させてください。
同様に ADC1, ADC2, ADC3のそれぞれのデータを取り出し、個別に、debugサイドバーに表示させてください。
<参考ページ>
R-CPSで使うNode-REDの基本(データの受信、送信、記録、打刻、表示等)
■ ヒント:changeノードを使って、対象のデータだけを抽出してみてください。
<フロー回答例>
[{"id":"5ede42e038e1b507","type":"tab","label":"自習3","disabled":false,"info":"","env":[]},{"id":"d710384e4fa09bf0","type":"mqtt in","z":"5ede42e038e1b507","name":"","topic":"ads1015","qos":"2","datatype":"auto-detect","broker":"f24fa540a6c3e4ef","nl":false,"rap":true,"rh":0,"inputs":0,"x":100,"y":120,"wires":[["62b77c4084263a9a","6ec1962997fd3d3a","4f68ada54a76a36c","a60edc9fc8a66d93"]]},{"id":"8a72e326c92eddb9","type":"debug","z":"5ede42e038e1b507","name":"ADC0","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":370,"y":60,"wires":[]},{"id":"62b77c4084263a9a","type":"change","z":"5ede42e038e1b507","name":"ADC0","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.ADC0.val","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":250,"y":60,"wires":[["8a72e326c92eddb9"]]},{"id":"6ec1962997fd3d3a","type":"change","z":"5ede42e038e1b507","name":"ADC1","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.ADC1.val","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":250,"y":100,"wires":[["d307045a122c4978"]]},{"id":"d307045a122c4978","type":"debug","z":"5ede42e038e1b507","name":"ADC1","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":370,"y":100,"wires":[]},{"id":"4f68ada54a76a36c","type":"change","z":"5ede42e038e1b507","name":"ADC2","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.ADC2.val","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":250,"y":140,"wires":[["41c2510c790a0975"]]},{"id":"41c2510c790a0975","type":"debug","z":"5ede42e038e1b507","name":"ADC2","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":370,"y":140,"wires":[]},{"id":"a60edc9fc8a66d93","type":"change","z":"5ede42e038e1b507","name":"ADC3","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.ADC3.val","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":250,"y":180,"wires":[["331cdb9950496a89"]]},{"id":"331cdb9950496a89","type":"debug","z":"5ede42e038e1b507","name":"ADC3","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":370,"y":180,"wires":[]},{"id":"f24fa540a6c3e4ef","type":"mqtt-broker","name":"","broker":"34.168.229.56","port":"8101","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}]
自習4:データの表示
上記で取り出したデータ(例えばADC0)をダッシュボードにゲージグラフと折れ線グラフに描画してください。
<参考ページ>
ダッシュボードでのグラフ作成(ゲージグラフ、折れ線グラフ)
■ ヒント:dashboardのgaugeノードとchartノードを使ってグラフを描いてみてください。
<フロー回答例>
[{"id":"7fa6e9e37ad21ae4","type":"tab","label":"自習4","disabled":false,"info":"","env":[]},{"id":"e9186f4aa8f783e2","type":"mqtt in","z":"7fa6e9e37ad21ae4","name":"","topic":"ads1015","qos":"2","datatype":"auto-detect","broker":"f24fa540a6c3e4ef","nl":false,"rap":true,"rh":0,"inputs":0,"x":100,"y":220,"wires":[["40d4529b6bf7bca8","8f556ec72d2127d8","3f358c99c56d5df3","cac3a4cd058368ee"]]},{"id":"40d4529b6bf7bca8","type":"change","z":"7fa6e9e37ad21ae4","name":"ADC0","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.ADC0.val","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":250,"y":80,"wires":[["419185ad0074d5f1","1cadb1f6477f9de8"]]},{"id":"419185ad0074d5f1","type":"ui_gauge","z":"7fa6e9e37ad21ae4","name":"ADC0","group":"d1b813d365d8fec9","order":1,"width":"4","height":"4","gtype":"gage","title":"gauge","label":"units","format":"{{value}}","min":0,"max":"1100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","diff":false,"className":"","x":390,"y":60,"wires":[]},{"id":"1cadb1f6477f9de8","type":"ui_chart","z":"7fa6e9e37ad21ae4","name":"ADC0","group":"d1b813d365d8fec9","order":6,"width":6,"height":"4","label":"chart","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"1100","removeOlder":1,"removeOlderPoints":"100","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":390,"y":100,"wires":[[]]},{"id":"cb46bd373e5d3681","type":"comment","z":"7fa6e9e37ad21ae4","name":"ADC0","info":"","x":250,"y":40,"wires":[]},{"id":"8f556ec72d2127d8","type":"change","z":"7fa6e9e37ad21ae4","name":"ADC1","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.ADC1.val","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":250,"y":180,"wires":[["3f9ab4ed2a7509e0","fd8a017e15c256b2"]]},{"id":"3f9ab4ed2a7509e0","type":"ui_gauge","z":"7fa6e9e37ad21ae4","name":"ADC1","group":"9be6ea75086ccb16","order":1,"width":"4","height":"4","gtype":"gage","title":"gauge","label":"units","format":"{{value}}","min":0,"max":"1100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","diff":false,"className":"","x":390,"y":160,"wires":[]},{"id":"fd8a017e15c256b2","type":"ui_chart","z":"7fa6e9e37ad21ae4","name":"ADC1","group":"9be6ea75086ccb16","order":6,"width":6,"height":"4","label":"chart","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"1100","removeOlder":1,"removeOlderPoints":"100","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":390,"y":200,"wires":[[]]},{"id":"bed9fc178d9cf267","type":"comment","z":"7fa6e9e37ad21ae4","name":"ADC1","info":"","x":250,"y":140,"wires":[]},{"id":"3f358c99c56d5df3","type":"change","z":"7fa6e9e37ad21ae4","name":"ADC2","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.ADC2.val","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":250,"y":280,"wires":[["913181d260d073c2","24c329a33bc8b321"]]},{"id":"913181d260d073c2","type":"ui_gauge","z":"7fa6e9e37ad21ae4","name":"ADC2","group":"11d2c395da2181bd","order":1,"width":"4","height":"4","gtype":"gage","title":"gauge","label":"units","format":"{{value}}","min":0,"max":"1100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","diff":false,"className":"","x":390,"y":260,"wires":[]},{"id":"24c329a33bc8b321","type":"ui_chart","z":"7fa6e9e37ad21ae4","name":"ADC2","group":"11d2c395da2181bd","order":6,"width":6,"height":"4","label":"chart","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"1100","removeOlder":1,"removeOlderPoints":"100","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":390,"y":300,"wires":[[]]},{"id":"57c0df5c73eaaa54","type":"comment","z":"7fa6e9e37ad21ae4","name":"ADC2","info":"","x":250,"y":240,"wires":[]},{"id":"daa606944deeafa3","type":"ui_gauge","z":"7fa6e9e37ad21ae4","name":"ADC3","group":"ef331f4a8ac842ec","order":1,"width":"4","height":"4","gtype":"gage","title":"gauge","label":"units","format":"{{value}}","min":0,"max":"1100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","diff":false,"className":"","x":390,"y":360,"wires":[]},{"id":"cac3a4cd058368ee","type":"change","z":"7fa6e9e37ad21ae4","name":"ADC2","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.ADC3.val","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":250,"y":380,"wires":[["daa606944deeafa3","bf0a8ca3bffe2a9a"]]},{"id":"bf0a8ca3bffe2a9a","type":"ui_chart","z":"7fa6e9e37ad21ae4","name":"ADC3","group":"ef331f4a8ac842ec","order":6,"width":6,"height":"4","label":"chart","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"1100","removeOlder":1,"removeOlderPoints":"100","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":390,"y":400,"wires":[[]]},{"id":"8fd6009602c8d625","type":"comment","z":"7fa6e9e37ad21ae4","name":"ADC3","info":"","x":250,"y":340,"wires":[]},{"id":"093d78a6f0f4b506","type":"ui_button","z":"7fa6e9e37ad21ae4","name":"Clear","group":"d1b813d365d8fec9","order":6,"width":"2","height":"1","passthru":false,"label":"Clear","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"[]","payloadType":"json","topic":"topic","topicType":"msg","x":230,"y":460,"wires":[["1cadb1f6477f9de8","fd8a017e15c256b2","24c329a33bc8b321","bf0a8ca3bffe2a9a"]]},{"id":"49df4e89ce2ec2da","type":"ui_spacer","z":"7fa6e9e37ad21ae4","name":"spacer","group":"d1b813d365d8fec9","order":2,"width":2,"height":1},{"id":"72cd80508e857912","type":"ui_spacer","z":"7fa6e9e37ad21ae4","name":"spacer","group":"d1b813d365d8fec9","order":3,"width":2,"height":1},{"id":"a8dc3e1a9b496b89","type":"ui_spacer","z":"7fa6e9e37ad21ae4","name":"spacer","group":"d1b813d365d8fec9","order":4,"width":2,"height":1},{"id":"815186ed669816df","type":"ui_spacer","z":"7fa6e9e37ad21ae4","name":"spacer","group":"d1b813d365d8fec9","order":5,"width":2,"height":1},{"id":"f24fa540a6c3e4ef","type":"mqtt-broker","name":"","broker":"34.168.229.56","port":"8101","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"d1b813d365d8fec9","type":"ui_group","name":"ADC0","tab":"89c7e44f.e8f878","order":1,"disp":true,"width":"6","collapse":false,"className":""},{"id":"9be6ea75086ccb16","type":"ui_group","name":"ADC1","tab":"89c7e44f.e8f878","order":2,"disp":true,"width":"6","collapse":false,"className":""},{"id":"11d2c395da2181bd","type":"ui_group","name":"ADC2","tab":"89c7e44f.e8f878","order":3,"disp":true,"width":"6","collapse":false,"className":""},{"id":"ef331f4a8ac842ec","type":"ui_group","name":"ADC3","tab":"89c7e44f.e8f878","order":4,"disp":true,"width":"6","collapse":false,"className":""},{"id":"89c7e44f.e8f878","type":"ui_tab","name":"ADS1015","icon":"dashboard","order":1,"disabled":false,"hidden":false}]
自習5:単位の追加、打刻
データ受信ノードから取り込んだデータに単位を追加し、打刻(時刻の追加)して下さい。そして、debugノードで、追加前後のデータの違いを確認してください。打刻(時刻の追加)のためには、Date/Time Formatter ノードが必要になります。パレットへの追加が未だの場合は、事前に参考ページを参照してパレットに追加しておいてください。
<参考ページ>
■ ヒント:単位は以下の様な値を入れてみてください。
温度(temp):deg、湿度(humid):%、気圧(press):hPa、空気清浄度(gas):IAQ(Index of Air Quality)
<フロー回答例>
[{"id":"e76bc016ccc80f7e","type":"tab","label":"自習5","disabled":false,"info":"","env":[]},{"id":"8374e22cfa047354","type":"mqtt in","z":"e76bc016ccc80f7e","name":"","topic":"bme688","qos":"2","datatype":"auto-detect","broker":"f24fa540a6c3e4ef","nl":false,"rap":true,"rh":0,"inputs":0,"x":80,"y":80,"wires":[["156d586ebc128a08","a86de5ecd3f74337"]]},{"id":"9e25979d4212111c","type":"change","z":"e76bc016ccc80f7e","name":"単位追加","rules":[{"t":"set","p":"payload.temp.unit","pt":"msg","to":"deg","tot":"str"},{"t":"set","p":"payload.humid.unit","pt":"msg","to":"%","tot":"str"},{"t":"set","p":"payload.press.unit","pt":"msg","to":"hPa","tot":"str"},{"t":"set","p":"payload.gas.unit","pt":"msg","to":"IAQ","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":340,"y":80,"wires":[["d3346b93633d499b"]]},{"id":"d3346b93633d499b","type":"debug","z":"e76bc016ccc80f7e","name":"単位/時刻有","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":490,"y":80,"wires":[]},{"id":"156d586ebc128a08","type":"moment","z":"e76bc016ccc80f7e","name":"打刻","topic":"","input":"","inputType":"date","inTz":"Asia/Tokyo","adjAmount":0,"adjType":"days","adjDir":"add","format":"YYYY-MM-DDTHH:mm:ss.SSSZ","locale":"ja-JP","output":"payload.datetime","outputType":"msg","outTz":"Asia/Tokyo","x":210,"y":80,"wires":[["9e25979d4212111c"]]},{"id":"a86de5ecd3f74337","type":"debug","z":"e76bc016ccc80f7e","name":"単位/時刻無","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":230,"y":120,"wires":[]},{"id":"f24fa540a6c3e4ef","type":"mqtt-broker","name":"","broker":"34.168.229.56","port":"8101","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}]
自習6:計算
読み込んだデータ(例えばADC0の値)に一時式(y=ax+b)を使って値を変換して、debugウインドウで値が変換されていることを確認してください
※yは変換後の値、xは変換前(取り込んだデータ)a, b は任意の定数
<参考ページ>
■ヒント:a=-1、b=1100 としてみましょう。結果を自習4で作った折れ線グラフに描かせてみるとどうなるでしょう。
<フロー回答例>
[{"id":"5c567e2efc46f329","type":"tab","label":"自習6","disabled":false,"info":"","env":[]},{"id":"cce11ffa56a8f342","type":"mqtt in","z":"5c567e2efc46f329","name":"","topic":"ads1015","qos":"2","datatype":"auto-detect","broker":"f24fa540a6c3e4ef","nl":false,"rap":true,"rh":0,"inputs":0,"x":80,"y":80,"wires":[["8bf6333c4b0a5969"]]},{"id":"437e548374a9e52a","type":"debug","z":"5c567e2efc46f329","name":"処理後","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":510,"y":40,"wires":[]},{"id":"3fcbfdd9ff0848ad","type":"change","z":"5c567e2efc46f329","name":"y=ax+b","rules":[{"t":"set","p":"payload","pt":"msg","to":"-1*payload+1100","tot":"jsonata"},{"t":"set","p":"topic","pt":"msg","to":"y","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":360,"y":60,"wires":[["437e548374a9e52a","9496fac5b3a52998"]]},{"id":"df6d64df9eb64bba","type":"debug","z":"5c567e2efc46f329","name":"元データ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":360,"y":100,"wires":[]},{"id":"8bf6333c4b0a5969","type":"change","z":"5c567e2efc46f329","name":"ADC0.val","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.ADC0.val","tot":"msg"},{"t":"set","p":"topic","pt":"msg","to":"x","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":220,"y":80,"wires":[["3fcbfdd9ff0848ad","df6d64df9eb64bba","9496fac5b3a52998"]]},{"id":"9496fac5b3a52998","type":"ui_chart","z":"5c567e2efc46f329","name":"ADC0","group":"d9cb8a532bb4b7d1","order":6,"width":"12","height":"4","label":"y=ax+b","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"1100","removeOlder":1,"removeOlderPoints":"100","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#ff0000","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":510,"y":80,"wires":[[]]},{"id":"16a22b24874ba537","type":"ui_button","z":"5c567e2efc46f329","name":"Clear","group":"d9cb8a532bb4b7d1","order":6,"width":"2","height":"1","passthru":false,"label":"Clear","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"[]","payloadType":"json","topic":"topic","topicType":"msg","x":390,"y":140,"wires":[["9496fac5b3a52998"]]},{"id":"f24fa540a6c3e4ef","type":"mqtt-broker","name":"","broker":"34.168.229.56","port":"8101","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"d9cb8a532bb4b7d1","type":"ui_group","name":"ADC0","tab":"1b1b9c1cf266b6fa","order":1,"disp":true,"width":"12","collapse":false,"className":""},{"id":"1b1b9c1cf266b6fa","type":"ui_tab","name":"自習6","icon":"dashboard","disabled":false,"hidden":false}]
自習7:データの保管
データの保存先フォルダーとファイル名を指定し、ファイル形式はCSVとして、フローのON/OFF切り替え(gateノード)を使って、任意のタイミングでファイルが保存できることを確認してください。フローのON/OFF切替に、gateノードが必要になります。参考HPを見てパレットに追加しておいてください。gateノードの使い方も記載があります。
<参考HP>
<フロー回答例>
[{"id":"15409e2dac79779e","type":"tab","label":"自習7","disabled":false,"info":"","env":[]},{"id":"2bfc3e46cb867628","type":"debug","z":"15409e2dac79779e","name":"bme688","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":540,"y":60,"wires":[]},{"id":"10d2164081092855","type":"mqtt in","z":"15409e2dac79779e","name":"","topic":"bme688","qos":"2","datatype":"auto-detect","broker":"f24fa540a6c3e4ef","nl":false,"rap":true,"rh":0,"inputs":0,"x":120,"y":40,"wires":[["50713589054225fb"]]},{"id":"50713589054225fb","type":"gate","z":"15409e2dac79779e","name":"","controlTopic":"control","defaultState":"closed","openCmd":"open","closeCmd":"close","toggleCmd":"toggle","defaultCmd":"default","statusCmd":"status","persist":false,"storeName":"memory","x":270,"y":60,"wires":[["8d4de959bcb7ed33"]]},{"id":"079ed2870da31e95","type":"inject","z":"15409e2dac79779e","name":"保存ON/OFF","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"control","payload":"toggle","payloadType":"str","x":110,"y":100,"wires":[["50713589054225fb"]]},{"id":"d235ed22e2d04c24","type":"csv","z":"15409e2dac79779e","name":"","sep":",","hdrin":"","hdrout":"once","multi":"one","ret":"\\n","temp":"sensor,datetime,temp,humid,press,gas","skip":"0","strings":true,"include_empty_strings":"","include_null_values":"","x":410,"y":140,"wires":[["d6a2a9337576036c"]]},{"id":"d6a2a9337576036c","type":"file","z":"15409e2dac79779e","name":"ファイル保存","filename":"C:\\Users\\hayak\\data\\BME688.csv","filenameType":"str","appendNewline":false,"createDir":true,"overwriteFile":"false","encoding":"none","x":560,"y":140,"wires":[[]]},{"id":"8d4de959bcb7ed33","type":"moment","z":"15409e2dac79779e","name":"打刻","topic":"","input":"","inputType":"date","inTz":"Asia/Tokyo","adjAmount":0,"adjType":"days","adjDir":"add","format":"YYYY-MM-DDTHH:mm:ss.SSSZ","locale":"ja-JP","output":"payload.datetime","outputType":"msg","outTz":"Asia/Tokyo","x":390,"y":60,"wires":[["2bfc3e46cb867628","89f24924e33b5234"]]},{"id":"89f24924e33b5234","type":"change","z":"15409e2dac79779e","name":"変換","rules":[{"t":"set","p":"payload.temp","pt":"msg","to":"payload.temp.val","tot":"msg"},{"t":"set","p":"payload.humid","pt":"msg","to":"payload.humid.val","tot":"msg"},{"t":"set","p":"payload.press","pt":"msg","to":"payload.press.val","tot":"msg"},{"t":"set","p":"payload.gas","pt":"msg","to":"payload.gas.val","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":290,"y":140,"wires":[["d235ed22e2d04c24"]]},{"id":"39c2a718e0a00b46","type":"comment","z":"15409e2dac79779e","name":"変更必要:ファイル名とパス","info":"","x":520,"y":180,"wires":[]},{"id":"f24fa540a6c3e4ef","type":"mqtt-broker","name":"","broker":"34.168.229.56","port":"8101","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}]
第2ステップ
自習8:計測間隔
MSM-emulator(BMX160, BME688)からのデータを受信し、スカラー量(BME688環境データ)とベクトル量(BMX160運動データ)の違いをdebugノードを使って確認してください。また、BMX160のオブジェクト形式データを確認してください。
<参考ページ>
<フロー回答例>
[{"id":"9105a5f923ec23da","type":"tab","label":"自習8","disabled":false,"info":"","env":[]},{"id":"536a32cbf6298d14","type":"mqtt in","z":"9105a5f923ec23da","name":"","topic":"bme688","qos":"2","datatype":"auto-detect","broker":"f24fa540a6c3e4ef","nl":false,"rap":true,"rh":0,"inputs":0,"x":140,"y":80,"wires":[["8198b9b57e0c5375"]]},{"id":"8198b9b57e0c5375","type":"debug","z":"9105a5f923ec23da","name":"bme688","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":280,"y":80,"wires":[]},{"id":"95eea7398d72dcea","type":"mqtt in","z":"9105a5f923ec23da","name":"","topic":"bmx160","qos":"2","datatype":"auto-detect","broker":"f24fa540a6c3e4ef","nl":false,"rap":true,"rh":0,"inputs":0,"x":130,"y":160,"wires":[["d7011496679e4f87"]]},{"id":"d7011496679e4f87","type":"debug","z":"9105a5f923ec23da","name":"bmx160","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":280,"y":160,"wires":[]},{"id":"f24fa540a6c3e4ef","type":"mqtt-broker","name":"","broker":"34.168.229.56","port":"8101","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}]
自習9:データ流量制限(データの間引き)
自習4で作成したダッシュボード表示へ送るデータを4回につき1回に制限してください。
<参考ページ>
■ ヒント:delayノードの流量制限は、最小時間単位が秒でかつ整数しか設定できません。ADS1015のデータは、900ms毎に送られてきます。すなわち、1/900[回/ms]です。delayノードの表現に直すと、1/900ms[回/ms]=10/9000[回/ms]=10/9[回/秒]となります。
流量が1/4ということは、900ms×4=3600msに1回ということですから、1/3600[回/ms]=10/36[回/秒]となります。
<フロー回答例>
[{"id":"b994a6ca9dec2aab","type":"tab","label":"自習9","disabled":false,"info":"","env":[]},{"id":"8e3d97f424fb9446","type":"mqtt in","z":"b994a6ca9dec2aab","name":"","topic":"ads1015","qos":"2","datatype":"auto-detect","broker":"f24fa540a6c3e4ef","nl":false,"rap":true,"rh":0,"inputs":0,"x":80,"y":220,"wires":[["9cce28658aabfc63","e8f0c54730510f79","6e98187f5058ae03","ed3fc9919c1875a9"]]},{"id":"265c13e037a55408","type":"change","z":"b994a6ca9dec2aab","name":"ADC0","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.ADC0.val","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":80,"wires":[["b54bbe8af01652ac","0e01087250b3d17a"]]},{"id":"b54bbe8af01652ac","type":"ui_gauge","z":"b994a6ca9dec2aab","name":"ADC0","group":"f094e509caf53339","order":1,"width":"4","height":"4","gtype":"gage","title":"gauge","label":"units","format":"{{value}}","min":0,"max":"1100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","diff":false,"className":"","x":530,"y":60,"wires":[]},{"id":"0e01087250b3d17a","type":"ui_chart","z":"b994a6ca9dec2aab","name":"ADC0","group":"f094e509caf53339","order":6,"width":6,"height":"4","label":"chart","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"1100","removeOlder":1,"removeOlderPoints":"100","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":530,"y":100,"wires":[[]]},{"id":"b42391efc0622ee8","type":"comment","z":"b994a6ca9dec2aab","name":"ADC0","info":"","x":250,"y":40,"wires":[]},{"id":"5e4cc4168906214d","type":"change","z":"b994a6ca9dec2aab","name":"ADC1","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.ADC1.val","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":180,"wires":[["d8660679fb95a4b9","41fcf672e8ea4984"]]},{"id":"d8660679fb95a4b9","type":"ui_gauge","z":"b994a6ca9dec2aab","name":"ADC1","group":"b230f3e199d24fe3","order":1,"width":"4","height":"4","gtype":"gage","title":"gauge","label":"units","format":"{{value}}","min":0,"max":"1100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","diff":false,"className":"","x":530,"y":160,"wires":[]},{"id":"41fcf672e8ea4984","type":"ui_chart","z":"b994a6ca9dec2aab","name":"ADC1","group":"b230f3e199d24fe3","order":6,"width":6,"height":"4","label":"chart","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"1100","removeOlder":1,"removeOlderPoints":"100","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":530,"y":200,"wires":[[]]},{"id":"ba885c8bf8c94163","type":"comment","z":"b994a6ca9dec2aab","name":"ADC1","info":"","x":250,"y":140,"wires":[]},{"id":"349f1535b3929a4b","type":"change","z":"b994a6ca9dec2aab","name":"ADC2","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.ADC2.val","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":280,"wires":[["39c2018d1e65bd7a","54430497f6240156"]]},{"id":"39c2018d1e65bd7a","type":"ui_gauge","z":"b994a6ca9dec2aab","name":"ADC2","group":"44da153330465d19","order":1,"width":"4","height":"4","gtype":"gage","title":"gauge","label":"units","format":"{{value}}","min":0,"max":"1100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","diff":false,"className":"","x":530,"y":260,"wires":[]},{"id":"54430497f6240156","type":"ui_chart","z":"b994a6ca9dec2aab","name":"ADC2","group":"44da153330465d19","order":6,"width":6,"height":"4","label":"chart","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"1100","removeOlder":1,"removeOlderPoints":"100","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":530,"y":300,"wires":[[]]},{"id":"7e5a02d4fb5b3cc5","type":"comment","z":"b994a6ca9dec2aab","name":"ADC2","info":"","x":250,"y":240,"wires":[]},{"id":"ef3dc2c0e2a53a77","type":"ui_gauge","z":"b994a6ca9dec2aab","name":"ADC3","group":"febcb6ef14f677f9","order":1,"width":"4","height":"4","gtype":"gage","title":"gauge","label":"units","format":"{{value}}","min":0,"max":"1100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","diff":false,"className":"","x":530,"y":360,"wires":[]},{"id":"f480f3e5197b77dd","type":"change","z":"b994a6ca9dec2aab","name":"ADC2","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.ADC3.val","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":380,"wires":[["ef3dc2c0e2a53a77","c281387d480af88c"]]},{"id":"c281387d480af88c","type":"ui_chart","z":"b994a6ca9dec2aab","name":"ADC3","group":"febcb6ef14f677f9","order":6,"width":6,"height":"4","label":"chart","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"1100","removeOlder":1,"removeOlderPoints":"100","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":530,"y":400,"wires":[[]]},{"id":"3ff3d14084507948","type":"comment","z":"b994a6ca9dec2aab","name":"ADC3","info":"","x":250,"y":340,"wires":[]},{"id":"8545f3cb6816c66a","type":"ui_button","z":"b994a6ca9dec2aab","name":"Clear","group":"860fb0ed3a6c5bf7","order":6,"width":"2","height":"1","passthru":false,"label":"Clear","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"[]","payloadType":"json","topic":"topic","topicType":"msg","x":370,"y":460,"wires":[["0e01087250b3d17a","41fcf672e8ea4984","54430497f6240156","c281387d480af88c"]]},{"id":"9cce28658aabfc63","type":"delay","z":"b994a6ca9dec2aab","name":"流量制限","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"9","nbRateUnits":"10","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"allowrate":true,"outputs":1,"x":260,"y":80,"wires":[["265c13e037a55408"]]},{"id":"e8f0c54730510f79","type":"delay","z":"b994a6ca9dec2aab","name":"流量制限","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"9","nbRateUnits":"10","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"allowrate":true,"outputs":1,"x":260,"y":180,"wires":[["5e4cc4168906214d"]]},{"id":"6e98187f5058ae03","type":"delay","z":"b994a6ca9dec2aab","name":"流量制限","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"9","nbRateUnits":"10","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"allowrate":true,"outputs":1,"x":260,"y":280,"wires":[["349f1535b3929a4b"]]},{"id":"ed3fc9919c1875a9","type":"delay","z":"b994a6ca9dec2aab","name":"流量制限","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"9","nbRateUnits":"10","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"allowrate":true,"outputs":1,"x":260,"y":380,"wires":[["f480f3e5197b77dd"]]},{"id":"80f3883764caae2c","type":"ui_switch","z":"b994a6ca9dec2aab","name":"","label":"流量制限","tooltip":"","group":"860fb0ed3a6c5bf7","order":1,"width":"3","height":"1","passthru":true,"decouple":"false","topic":"payload","topicType":"msg","style":"","onvalue":"3600","onvalueType":"num","onicon":"","oncolor":"","offvalue":"900","offvalueType":"num","officon":"","offcolor":"","animate":false,"className":"","x":80,"y":420,"wires":[["064b0d96db76258f"]]},{"id":"064b0d96db76258f","type":"change","z":"b994a6ca9dec2aab","name":"変換","rules":[{"t":"set","p":"rate","pt":"msg","to":"payload","tot":"msg"},{"t":"delete","p":"payload","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":90,"y":300,"wires":[["9cce28658aabfc63","e8f0c54730510f79","6e98187f5058ae03","ed3fc9919c1875a9"]]},{"id":"b2463f6dd53473a1","type":"comment","z":"b994a6ca9dec2aab","name":"ダッシュボードのswitchノードを使って、流量を変えています。ダッシュボードに切り替えて、switchノードをスライドさせてみてください。","info":"","x":490,"y":520,"wires":[]},{"id":"09686ea47a333a5b","type":"ui_spacer","z":"b994a6ca9dec2aab","name":"spacer","group":"d1b813d365d8fec9","order":2,"width":2,"height":1},{"id":"3c4d4f0617da90cc","type":"ui_spacer","z":"b994a6ca9dec2aab","name":"spacer","group":"d1b813d365d8fec9","order":3,"width":2,"height":1},{"id":"530ad6470c5903b4","type":"ui_spacer","z":"b994a6ca9dec2aab","name":"spacer","group":"d1b813d365d8fec9","order":4,"width":2,"height":1},{"id":"6c701fd556ecdeb3","type":"ui_spacer","z":"b994a6ca9dec2aab","name":"spacer","group":"d1b813d365d8fec9","order":5,"width":2,"height":1},{"id":"f24fa540a6c3e4ef","type":"mqtt-broker","name":"","broker":"34.168.229.56","port":"8101","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"f094e509caf53339","type":"ui_group","name":"ADC0","tab":"ee0cb63fc5d795e1","order":1,"disp":true,"width":"6","collapse":false,"className":""},{"id":"b230f3e199d24fe3","type":"ui_group","name":"ADC1","tab":"ee0cb63fc5d795e1","order":2,"disp":true,"width":"6","collapse":false,"className":""},{"id":"44da153330465d19","type":"ui_group","name":"ADC2","tab":"ee0cb63fc5d795e1","order":3,"disp":true,"width":"6","collapse":false,"className":""},{"id":"febcb6ef14f677f9","type":"ui_group","name":"ADC3","tab":"ee0cb63fc5d795e1","order":4,"disp":true,"width":"6","collapse":false,"className":""},{"id":"860fb0ed3a6c5bf7","type":"ui_group","name":"操作","tab":"ee0cb63fc5d795e1","order":5,"disp":true,"width":"6","collapse":false,"className":""},{"id":"d1b813d365d8fec9","type":"ui_group","name":"ADC0","tab":"89c7e44f.e8f878","order":1,"disp":true,"width":"6","collapse":false,"className":""},{"id":"ee0cb63fc5d795e1","type":"ui_tab","name":"自習9","icon":"dashboard","disabled":false,"hidden":false},{"id":"89c7e44f.e8f878","type":"ui_tab","name":"ADS1015","icon":"dashboard","order":1,"disabled":false,"hidden":false}]
自習10:データ前処理
1) MSM-emulttorからトピック”defective-bmx160″を受信し、加速度X軸の値(acc[0])を表示する折れ線グラフをダッシュボード上に作製してください。このトピックの加速度データは、計測として正しく測れていないデータ(欠損値を含む)が含まれています。どのようなデータが含まれているかをダッシュボードで確認してください。
2) その後、それらのデータを削除する処理を追加して、折れ線グラフを確認してください。
<参考ページ>
ダッシュボードでのグラフ作成(ゲージグラフ、折れ線グラフ)
■ヒント:
・正しく測れていないデータは、みれば明らかに分かります。
・正しく測れていないデータを今回は削除しますが、前置ホールドする方法もあります。
<フロー回答例>
[{"id":"d01f94415e602038","type":"tab","label":"自習10","disabled":false,"info":"","env":[]},{"id":"96e2f03b34846ba2","type":"mqtt in","z":"d01f94415e602038","name":"","topic":"defective_bmx160","qos":"2","datatype":"auto-detect","broker":"f24fa540a6c3e4ef","nl":false,"rap":true,"rh":0,"inputs":0,"x":130,"y":80,"wires":[["84b367dc9392140f","7463a1afb71d4343"]]},{"id":"2436081da5a07247","type":"ui_chart","z":"d01f94415e602038","name":"acc","group":"4e36160dd21127d2","order":0,"width":"12","height":"6","label":"acc X-axis","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"-15","ymax":"15","removeOlder":1,"removeOlderPoints":"1000","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#ff0000","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":590,"y":80,"wires":[[]]},{"id":"84b367dc9392140f","type":"change","z":"d01f94415e602038","name":"acc-x","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.acc.val[0]","tot":"msg"},{"t":"set","p":"topic","pt":"msg","to":"Original","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":310,"y":80,"wires":[["2436081da5a07247"]]},{"id":"5eaea052aae82dd5","type":"ui_button","z":"d01f94415e602038","name":"Clear Chart","group":"4e36160dd21127d2","order":0,"width":"2","height":"1","passthru":false,"label":"Clear","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"[]","payloadType":"json","topic":"topic","topicType":"msg","x":450,"y":40,"wires":[["2436081da5a07247"]]},{"id":"7463a1afb71d4343","type":"switch","z":"d01f94415e602038","name":"通過範囲","property":"payload.acc.val[0]","propertyType":"msg","rules":[{"t":"btwn","v":"-15","vt":"num","v2":"15","v2t":"num"}],"checkall":"true","repair":false,"outputs":1,"x":320,"y":120,"wires":[["57afc552bd28fd85"]]},{"id":"57afc552bd28fd85","type":"change","z":"d01f94415e602038","name":"acc-x","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.acc.val[0]","tot":"msg"},{"t":"set","p":"topic","pt":"msg","to":"削除版","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":450,"y":120,"wires":[["2436081da5a07247"]]},{"id":"f24fa540a6c3e4ef","type":"mqtt-broker","name":"","broker":"34.168.229.56","port":"8101","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"4e36160dd21127d2","type":"ui_group","name":"acc","tab":"4e2bc8be32d9aca8","order":1,"disp":true,"width":"12","collapse":false,"className":""},{"id":"4e2bc8be32d9aca8","type":"ui_tab","name":"自習10","icon":"dashboard","disabled":false,"hidden":false}]
自習11:統計処理
自習10で前処理をした加速度X軸の値(acc[0])の測定テータに対し、5回毎にメディアンフィルタを適用して、その結果を前処理後のデータと比較できるように折れ線グラフにして、メディアンフィルタ前後を比較してみてください。
メディアンフィルタの作成に、calculatorノードが必要になります。パレットへの追加が未だの場合、まず、こちら(calculatorノードの追加)からパレットに追加してください。
<参考HP>
<フロー回答例>
[{"id":"83684ced481188cd","type":"tab","label":"自習11","disabled":false,"info":"","env":[]},{"id":"73cabe4d.88cf4","type":"function","z":"83684ced481188cd","name":"配列操作","func":"if ( !context.array ) {\n context.array = new Array (5);\n context.array.fill(0);\n }\ncontext.array.shift();\ncontext.array.push(msg.payload);\nmsg.payload.length = context.array.length;\nmsg.payload = context.array;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":620,"y":80,"wires":[["8c6eac0.cce4b58"]]},{"id":"8c6eac0.cce4b58","type":"calculator","z":"83684ced481188cd","name":"","inputMsgField":"payload","outputMsgField":"payload","operation":"sorta","constant":"","round":false,"decimals":0,"x":460,"y":140,"wires":[["684cb333.ea936c"]]},{"id":"62dc0f47.01a79","type":"change","z":"83684ced481188cd","name":"データ抽出","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.acc.val[0]","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":470,"y":80,"wires":[["73cabe4d.88cf4"]]},{"id":"684cb333.ea936c","type":"change","z":"83684ced481188cd","name":"メディアン","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload[2]","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":630,"y":140,"wires":[["74a9e1ae.33632","f4684ba9c93fb1e5"]]},{"id":"74a9e1ae.33632","type":"debug","z":"83684ced481188cd","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":790,"y":120,"wires":[]},{"id":"c54188ab182a054a","type":"mqtt in","z":"83684ced481188cd","name":"","topic":"defective_bmx160","qos":"2","datatype":"auto-detect","broker":"f24fa540a6c3e4ef","nl":false,"rap":true,"rh":0,"inputs":0,"x":130,"y":80,"wires":[["d3d8e7e593910797"]]},{"id":"d3d8e7e593910797","type":"switch","z":"83684ced481188cd","name":"通過範囲","property":"payload.acc.val[0]","propertyType":"msg","rules":[{"t":"btwn","v":"-15","vt":"num","v2":"15","v2t":"num"}],"checkall":"true","repair":false,"outputs":1,"x":300,"y":80,"wires":[["62dc0f47.01a79","5a1e294c97ac222d"]]},{"id":"aa4e052ac509f0cf","type":"ui_chart","z":"83684ced481188cd","name":"acc","group":"31d7a2bf19e91ea4","order":0,"width":"12","height":"6","label":"acc X-axis","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"-15","ymax":"15","removeOlder":1,"removeOlderPoints":"1000","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#ff0000","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":610,"y":200,"wires":[[]]},{"id":"32683ac05c1767c0","type":"ui_button","z":"83684ced481188cd","name":"Clear Chart","group":"31d7a2bf19e91ea4","order":0,"width":"2","height":"1","passthru":false,"label":"Clear","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"[]","payloadType":"json","topic":"topic","topicType":"msg","x":470,"y":300,"wires":[["aa4e052ac509f0cf"]]},{"id":"f4684ba9c93fb1e5","type":"change","z":"83684ced481188cd","name":"acc-x","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.acc.val[0]","tot":"msg"},{"t":"set","p":"topic","pt":"msg","to":"Median Filter","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":450,"y":200,"wires":[["aa4e052ac509f0cf"]]},{"id":"5a1e294c97ac222d","type":"change","z":"83684ced481188cd","name":"acc-x","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.acc.val[0]","tot":"msg"},{"t":"set","p":"topic","pt":"msg","to":"削除版","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":410,"y":240,"wires":[["aa4e052ac509f0cf"]]},{"id":"f24fa540a6c3e4ef","type":"mqtt-broker","name":"","broker":"34.168.229.56","port":"8101","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"31d7a2bf19e91ea4","type":"ui_group","name":"メディアンフィルタ","tab":"574d334f42d08961","order":1,"disp":true,"width":"12","collapse":false,"className":""},{"id":"574d334f42d08961","type":"ui_tab","name":"自習11","icon":"dashboard","disabled":false,"hidden":false}]
自習12:異常値検出
自習11のメディアンフィルタの出力の加速度X軸に閾値(±5)を設定し、その閾値を超えた(上回る/下回る)時に、ダッシュボードのシグナルが青から赤へ変わるようにフローを作成してください。
シグナルの作成に必要なLEDノードをパレットに追加する必要があります。追加が未だの場合は、こちら(LEDノードの追加)からあらかじめ追加してください。
<参考HP>
LEDノードの追加:ノード追加の説明の後に、LEDノードの簡単な使用方法の説明があります。
■ ヒント:データと閾値の比較に、switchノードを使用してみてください。
<フロー回答例>
[{"id":"eaf66cb00c207ffa","type":"tab","label":"自習12","disabled":false,"info":"","env":[]},{"id":"e401c23a85fc786a","type":"ui_button","z":"eaf66cb00c207ffa","name":"Clear Chart","group":"9422512cc5bce964","order":4,"width":2,"height":1,"passthru":false,"label":"Clear","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"[]","payloadType":"json","topic":"topic","topicType":"msg","x":450,"y":280,"wires":[["341cd375574091d2"]]},{"id":"341cd375574091d2","type":"ui_chart","z":"eaf66cb00c207ffa","name":"acc","group":"9422512cc5bce964","order":6,"width":12,"height":6,"label":"acc X-axis","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"-15","ymax":"15","removeOlder":1,"removeOlderPoints":"1000","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#ff0000","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":590,"y":220,"wires":[[]]},{"id":"5ba85a3749e73744","type":"change","z":"eaf66cb00c207ffa","name":"acc-x","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.acc.val[0]","tot":"msg"},{"t":"set","p":"topic","pt":"msg","to":"Median Filter","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":430,"y":180,"wires":[["341cd375574091d2","293d86cd7b93c6cf"]]},{"id":"fde57807465a07d4","type":"change","z":"eaf66cb00c207ffa","name":"acc-x","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.acc.val[0]","tot":"msg"},{"t":"set","p":"topic","pt":"msg","to":"削除版","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":220,"wires":[["341cd375574091d2"]]},{"id":"fb262bf4f91638f2","type":"change","z":"eaf66cb00c207ffa","name":"メディアン","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload[2]","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":120,"wires":[["6516b01e79bb9ac7","5ba85a3749e73744"]]},{"id":"df314477d5d97a01","type":"switch","z":"eaf66cb00c207ffa","name":"通過範囲","property":"payload.acc.val[0]","propertyType":"msg","rules":[{"t":"btwn","v":"-15","vt":"num","v2":"15","v2t":"num"}],"checkall":"true","repair":false,"outputs":1,"x":280,"y":60,"wires":[["eae11ed9a135423e","fde57807465a07d4"]]},{"id":"7c238baebcda4ae0","type":"calculator","z":"eaf66cb00c207ffa","name":"","inputMsgField":"payload","outputMsgField":"payload","operation":"sorta","constant":"","round":false,"decimals":0,"x":440,"y":120,"wires":[["fb262bf4f91638f2"]]},{"id":"6516b01e79bb9ac7","type":"debug","z":"eaf66cb00c207ffa","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":770,"y":100,"wires":[]},{"id":"76bad3ef236a255e","type":"mqtt in","z":"eaf66cb00c207ffa","name":"","topic":"defective_bmx160","qos":"2","datatype":"auto-detect","broker":"f24fa540a6c3e4ef","nl":false,"rap":true,"rh":0,"inputs":0,"x":110,"y":60,"wires":[["df314477d5d97a01"]]},{"id":"eae11ed9a135423e","type":"change","z":"eaf66cb00c207ffa","name":"データ抽出","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.acc.val[0]","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":450,"y":60,"wires":[["e1a50173f701f8bb"]]},{"id":"e1a50173f701f8bb","type":"function","z":"eaf66cb00c207ffa","name":"配列操作","func":"if ( !context.array ) {\n context.array = new Array (5);\n context.array.fill(0);\n}\ncontext.array.shift();\ncontext.array.push(msg.payload);\nmsg.payload.length = context.array.length;\nmsg.payload = context.array;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":600,"y":60,"wires":[["7c238baebcda4ae0"]]},{"id":"293d86cd7b93c6cf","type":"link out","z":"eaf66cb00c207ffa","name":"Median-Filter-output","mode":"link","links":["9bc41fe24dc1d6d0"],"x":555,"y":180,"wires":[]},{"id":"9bc41fe24dc1d6d0","type":"link in","z":"eaf66cb00c207ffa","name":"link in 1","links":["293d86cd7b93c6cf"],"x":85,"y":380,"wires":[["9453c3475e43b671","2e3d9696a70b6ff7"]]},{"id":"140eb65b6a9cec0f","type":"comment","z":"eaf66cb00c207ffa","name":"自習11のメディアンフィルタ出力","info":"","x":720,"y":180,"wires":[]},{"id":"8bee56931aa3a462","type":"comment","z":"eaf66cb00c207ffa","name":"以下、自習12で追加分","info":"","x":140,"y":320,"wires":[]},{"id":"9453c3475e43b671","type":"switch","z":"eaf66cb00c207ffa","name":"値検査","property":"payload","propertyType":"msg","rules":[{"t":"btwn","v":"-5","vt":"num","v2":"5","v2t":"num"},{"t":"gt","v":"5","vt":"num"},{"t":"lt","v":"-5","vt":"num"}],"checkall":"true","repair":false,"outputs":3,"x":170,"y":380,"wires":[["a55f0bb78b5342c4"],["48ae9a0d56bddce7"],["48ae9a0d56bddce7"]]},{"id":"a55f0bb78b5342c4","type":"change","z":"eaf66cb00c207ffa","name":"範囲内","rules":[{"t":"set","p":"payload","pt":"msg","to":"範囲内","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":290,"y":360,"wires":[["c6c11ee68ada3239"]]},{"id":"48ae9a0d56bddce7","type":"change","z":"eaf66cb00c207ffa","name":"範囲外","rules":[{"t":"set","p":"payload","pt":"msg","to":"範囲外","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":290,"y":400,"wires":[["c6c11ee68ada3239"]]},{"id":"c6c11ee68ada3239","type":"ui_led","z":"eaf66cb00c207ffa","order":1,"group":"9422512cc5bce964","width":2,"height":2,"label":"","labelPlacement":"left","labelAlignment":"left","colorForValue":[{"color":"#ff0000","value":"範囲外","valueType":"str"},{"color":"#008000","value":"範囲内","valueType":"str"}],"allowColorForValueInMessage":false,"shape":"square","showGlow":true,"name":"","x":410,"y":360,"wires":[]},{"id":"2e3d9696a70b6ff7","type":"ui_text","z":"eaf66cb00c207ffa","group":"9422512cc5bce964","order":2,"width":2,"height":2,"name":"","label":"acc-Xaxis","format":"{{msg.payload}}","layout":"col-center","className":"","x":180,"y":440,"wires":[]},{"id":"87a34d269fcbc45b","type":"ui_spacer","z":"eaf66cb00c207ffa","name":"spacer","group":"9422512cc5bce964","order":3,"width":6,"height":1},{"id":"10866ed5647f5c17","type":"ui_spacer","z":"eaf66cb00c207ffa","name":"spacer","group":"9422512cc5bce964","order":5,"width":8,"height":1},{"id":"9422512cc5bce964","type":"ui_group","name":"値のチェック","tab":"211889a5d0cf7ad4","order":1,"disp":true,"width":"12","collapse":false,"className":""},{"id":"f24fa540a6c3e4ef","type":"mqtt-broker","name":"","broker":"34.168.229.56","port":"8101","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"211889a5d0cf7ad4","type":"ui_tab","name":"自習12","icon":"dashboard","disabled":false,"hidden":false}]
余力があれば、このフローを改造して、メディアンフィルタの加速度X軸出力が-5以下の場合は、オレンジになるようにしてみてください。
第3ステップ
自習13:基準となる信号の発生
100ms間隔で、200msの間1を出力し800ms間0を出力する周期1秒の信号発生フローを作成して、ダッシュボードでグラフ化してください。
<参考HP>
ヒント:こちらのページにinjectノードを使った1秒毎にカウントアップするカウンタの作り方が書かれています。これを応用してみてください。
<フロー回答例>
[{"id":"e976cc840160f753","type":"tab","label":"自習13","disabled":false,"info":"","env":[]},{"id":"ec4c4e80215e96d5","type":"inject","z":"e976cc840160f753","name":"100ms","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"0.1","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":120,"y":80,"wires":[["08d815dc7a65b015"]]},{"id":"08d815dc7a65b015","type":"function","z":"e976cc840160f753","name":"count","func":"// もしまだカウンタが存在していなければ0に初期化\nvar count = context.get('count') || 0;\nmsg.payload = count;\ncount += 1;\nif (count >= 10){\n count = 0;\n}\ncontext.set('count', count);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":250,"y":80,"wires":[["b2fee77fd51dd9d6"]]},{"id":"b2fee77fd51dd9d6","type":"switch","z":"e976cc840160f753","name":"","property":"payload","propertyType":"msg","rules":[{"t":"lt","v":"2","vt":"num"},{"t":"gte","v":"2","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":370,"y":80,"wires":[["1a7df1d83618d479"],["74ddcb331156af33"]]},{"id":"1a7df1d83618d479","type":"change","z":"e976cc840160f753","name":"set 1","rules":[{"t":"set","p":"payload","pt":"msg","to":"1","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":60,"wires":[["f3ec9b6aeb5a655f"]]},{"id":"74ddcb331156af33","type":"change","z":"e976cc840160f753","name":"set 0","rules":[{"t":"set","p":"payload","pt":"msg","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":100,"wires":[["f3ec9b6aeb5a655f"]]},{"id":"f3ec9b6aeb5a655f","type":"ui_chart","z":"e976cc840160f753","name":"","group":"062350e09ada80c7","order":0,"width":"12","height":"6","label":"基準信号","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"1","removeOlder":"10","removeOlderPoints":"100","removeOlderUnit":"1","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":620,"y":80,"wires":[[]]},{"id":"3af3101f17420998","type":"ui_button","z":"e976cc840160f753","name":"Clear Chart","group":"062350e09ada80c7","order":4,"width":2,"height":1,"passthru":false,"label":"Clear","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"[]","payloadType":"json","topic":"topic","topicType":"msg","x":470,"y":140,"wires":[["f3ec9b6aeb5a655f"]]},{"id":"062350e09ada80c7","type":"ui_group","name":"基準信号","tab":"cea8196b0c16556c","order":1,"disp":true,"width":"12","collapse":false,"className":""},{"id":"cea8196b0c16556c","type":"ui_tab","name":"自習13","icon":"dashboard","disabled":false,"hidden":false}]
自習14:複数MSMのデータの結合
MSM-emulator(ADS1015),MSM-emulator(ADS1015-2)からデータを同時に受信し、自習13で作成した基準信号の立ち上がり(0から1へ遷移)のタイミングでデータを結合するフローを作成し、debugノードで確認してください。
ADS1015-2のMQTTのトピックスは、”ads1015-2″です。
<参考HP>
<フロー回答例>
[{"id":"4d878e4e210ebb2c","type":"tab","label":"自習14","disabled":false,"info":"","env":[]},{"id":"0d6ccdb7e8a1f79f","type":"mqtt in","z":"4d878e4e210ebb2c","name":"","topic":"ads1015","qos":"2","datatype":"auto-detect","broker":"f24fa540a6c3e4ef","nl":false,"rap":true,"rh":0,"inputs":0,"x":140,"y":100,"wires":[["01e0725b857a8322","93843303114cd7e2"]]},{"id":"d2f9f378dcef474e","type":"mqtt in","z":"4d878e4e210ebb2c","name":"","topic":"ads1015_2","qos":"2","datatype":"auto-detect","broker":"f24fa540a6c3e4ef","nl":false,"rap":true,"rh":0,"inputs":0,"x":140,"y":240,"wires":[["c2261b77c4f955fd","acdfc418ab9e02b1"]]},{"id":"01e0725b857a8322","type":"trigger","z":"4d878e4e210ebb2c","name":"","op1":"1","op2":"0","op1type":"val","op2type":"val","duration":"250","extend":"false","overrideDelay":"false","units":"ms","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":300,"y":140,"wires":[[]]},{"id":"c2261b77c4f955fd","type":"trigger","z":"4d878e4e210ebb2c","name":"","op1":"1","op2":"0","op1type":"val","op2type":"val","duration":"250","extend":"false","overrideDelay":"false","units":"ms","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":300,"y":280,"wires":[[]]},{"id":"93843303114cd7e2","type":"change","z":"4d878e4e210ebb2c","name":"","rules":[{"t":"set","p":"ads1015_1","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":310,"y":100,"wires":[[]]},{"id":"acdfc418ab9e02b1","type":"change","z":"4d878e4e210ebb2c","name":"","rules":[{"t":"set","p":"ads1015_2","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":310,"y":240,"wires":[[]]},{"id":"7c744c8929573b62","type":"switch","z":"4d878e4e210ebb2c","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":390,"y":400,"wires":[["5530b2ba3b710922"]]},{"id":"2e837af44a057b1e","type":"function","z":"4d878e4e210ebb2c","name":"count","func":"// もしまだカウンタが存在していなければ0に初期化\nvar count = context.get('count') || 0;\nmsg.payload = count;\ncount += 1;\nif (count >= 10){\n count = 0;\n}\ncontext.set('count', count);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":270,"y":400,"wires":[["7c744c8929573b62"]]},{"id":"fab6d9afa7225f0f","type":"inject","z":"4d878e4e210ebb2c","name":"100ms","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"0.1","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":140,"y":400,"wires":[["2e837af44a057b1e"]]},{"id":"01cd2ea6a9cba6f3","type":"debug","z":"4d878e4e210ebb2c","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":630,"y":400,"wires":[]},{"id":"5530b2ba3b710922","type":"function","z":"4d878e4e210ebb2c","name":"merge","func":"let message = {};\nmessage.ads1015_1 = flow.get(\"ads1015_1\");\nmessage.ads1015_2 = flow.get(\"ads1015_2\");\nmsg.payload = message;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":510,"y":400,"wires":[["01cd2ea6a9cba6f3"]]},{"id":"f24fa540a6c3e4ef","type":"mqtt-broker","name":"","broker":"34.168.229.56","port":"8101","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}]
自習15:ファイルの受信
Node-REDのhttp requestノードを使い、MSM-emulatorに接続し、ファイル名(sample01.txt, sample02.txt, sample03.csv)をJSON形式で送信してください。MSM-meulatorからhttp requestノードの出力ノードに結果のメッセージが送り返されてきます。その中のmsg.req.bodyをwrite fileノードを使ってファイルに書き込んでください。また、その時のmsg.statusCodeをdebugノードでモニタしてください。
http requestのURL記載:http://(IP アドレス):1880/filename
メソッド:POST
ファイル名のJSON形式の例:{“filename”:”sample01.txt”}
sample02.txtは、バイナリファイルをテキストファイルに変換したファイルです。次の自習16で使用しますので、消さずに残しておいてください。
また、Linux系のOSの方は、sample02.txtの代わりにsample04.txtを受信して下さい。
<参考HP>
データの保存と読み込み
ファイルの送受信
<フロー回答例>
[{"id":"7037f283f2ea2854","type":"tab","label":"自習15","disabled":false,"info":"","env":[]},{"id":"72713edb1550e874","type":"inject","z":"7037f283f2ea2854","name":"sample01.txt","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"filename\":\"sample01.txt\"}","payloadType":"json","x":110,"y":60,"wires":[["119196419ac25920","5529be21ce961d2e"]]},{"id":"6ce55fa3dd76faed","type":"debug","z":"7037f283f2ea2854","name":"statusCode","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"statusCode","targetType":"msg","statusVal":"","statusType":"auto","x":870,"y":100,"wires":[]},{"id":"98caa31492096ea6","type":"change","z":"7037f283f2ea2854","name":"req.body","rules":[{"t":"set","p":"payload","pt":"msg","to":"req.body","tot":"msg"},{"t":"set","p":"filename","pt":"msg","to":"filename","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":460,"y":100,"wires":[["5efc2cab74bccbed"]]},{"id":"5efc2cab74bccbed","type":"template","z":"7037f283f2ea2854","name":"filename","field":"filename","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"c:\\Users\\hayak\\Documents\\test\\{{filename}}","output":"str","x":600,"y":100,"wires":[["b19bb662c9d40a60"]]},{"id":"b19bb662c9d40a60","type":"file","z":"7037f283f2ea2854","name":"書込","filename":"filename","filenameType":"msg","appendNewline":false,"createDir":true,"overwriteFile":"false","encoding":"none","x":730,"y":100,"wires":[["6ce55fa3dd76faed"]]},{"id":"119196419ac25920","type":"change","z":"7037f283f2ea2854","name":"filename","rules":[{"t":"set","p":"filename","pt":"flow","to":"payload.filename","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":320,"y":140,"wires":[[]]},{"id":"5529be21ce961d2e","type":"http request","z":"7037f283f2ea2854","name":"filename","method":"POST","ret":"txt","paytoqs":"ignore","url":"http://34.168.229.56:1880/filename","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":320,"y":100,"wires":[["98caa31492096ea6"]]},{"id":"c5980c2c28d3d112","type":"inject","z":"7037f283f2ea2854","name":"sample02.txt","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"filename\":\"sample02.txt\"}","payloadType":"json","x":110,"y":120,"wires":[["119196419ac25920","5529be21ce961d2e"]]},{"id":"73f13f05f2fd40c0","type":"inject","z":"7037f283f2ea2854","name":"sample03.csv","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"filename\":\"sample03.csv\"}","payloadType":"json","x":110,"y":180,"wires":[["5529be21ce961d2e","119196419ac25920"]]},{"id":"94baebfaa3df95f4","type":"inject","z":"7037f283f2ea2854","name":"sample04.txt","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"filename\":\"sample04.txt\"}","payloadType":"json","x":110,"y":240,"wires":[["5529be21ce961d2e","119196419ac25920"]]},{"id":"b270958cf50f9de3","type":"comment","z":"7037f283f2ea2854","name":"sample04.txtは、Unix用のsample02.txtです。","info":"","x":260,"y":280,"wires":[]},{"id":"ede68d8ce9bb7067","type":"comment","z":"7037f283f2ea2854","name":"変更必要箇所(要クリック)","info":"filenameという名前のテンプレートノードの\n中のディレクトリ名は各自の環境に合わせて\n変更してください。","x":600,"y":60,"wires":[]}]
自習16:外部プログラムの起動
自習15で取得したファイル(Windowsの方:sample02.txt, Linux系の方:sample04.txt)をバイナリファイルに直すフローをexecノードを使って作成してください。変換後のファイルは、イメージのバイナリファイルです。イメージファイルの中身を確認してください。
◆変換コマンド
Windows: certutil -f -decode (ディレクトリ\)sample02.txt (ディレクトリ\)R-CPS_Opening_Picture.png
Linux系:uudecode -o (ディレクトリ/)R-CPS_Opening_Picture.png (ディレクトリ/)sample04.txt
<参考HP>
コマンドの実行や別プログラムの起動
バイナリファイルとテキストファイルの変換コマンド(uuencode/uudecode)の導入
Windows10の標準コマンドでuuencode/uudecodeみたいに変換する方法
<フロー回答例>
[{"id":"17f33fbb1f0cc965","type":"tab","label":"自習16","disabled":false,"info":"","env":[]},{"id":"5bc8ef63e8c9c3a3","type":"inject","z":"17f33fbb1f0cc965","name":"変換実行","props":[{"p":"directory","v":"C:\\Users\\hayak\\Documents\\test\\","vt":"str"},{"p":"infile","v":"sample02.txt","vt":"str"},{"p":"outfile","v":"R-CPS_Opening_Picture.png","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":140,"y":120,"wires":[["f808441c3439570f"]]},{"id":"a067349b19a81880","type":"exec","z":"17f33fbb1f0cc965","command":"certutil -f -decode","addpay":"payload","append":"","useSpawn":"false","timer":"","winHide":false,"oldrc":false,"name":"","x":450,"y":120,"wires":[[],["26cdf5de5f0a8006"],["26cdf5de5f0a8006"]]},{"id":"f808441c3439570f","type":"template","z":"17f33fbb1f0cc965","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{{directory}}{{infile}} {{directory}}{{outfile}}","output":"str","x":280,"y":120,"wires":[["a067349b19a81880"]]},{"id":"26cdf5de5f0a8006","type":"debug","z":"17f33fbb1f0cc965","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":630,"y":120,"wires":[]},{"id":"40072b2a250636cd","type":"comment","z":"17f33fbb1f0cc965","name":"Windows(要クリック)","info":"injectノード内のmsg.directoryの記述を\n各自の環境に合わせて変更してください。","x":150,"y":60,"wires":[]},{"id":"33ce99c11267d7b2","type":"debug","z":"17f33fbb1f0cc965","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":570,"y":260,"wires":[]},{"id":"d3956f5e7e50aa0c","type":"exec","z":"17f33fbb1f0cc965","command":"uudecode -o /home/hayakawa/Documents/test/R-CPS_Opening_Picture.png /home/hayakawa/Documents/test/sample04.txt","addpay":"","append":"","useSpawn":"false","timer":"","winHide":false,"oldrc":false,"name":"uudecode","x":420,"y":260,"wires":[[],["33ce99c11267d7b2"],["33ce99c11267d7b2"]]},{"id":"fdf408b58431b0cd","type":"inject","z":"17f33fbb1f0cc965","name":"変換実行","props":[{"p":"infile","v":"sample04.txt","vt":"str"},{"p":"outfile","v":"R-CPS_Opening_Picture.png","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":140,"y":260,"wires":[["15b5e377abb5cb2f"]]},{"id":"82c5f57d1fb52994","type":"comment","z":"17f33fbb1f0cc965","name":"Unix系(要クリック)","info":"templateノード内のディレクトリ名を各自の\n環境に合わせて変更してください。","x":140,"y":220,"wires":[]},{"id":"15b5e377abb5cb2f","type":"template","z":"17f33fbb1f0cc965","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"-o /home/hayakawa/Documents/test/{{outfile}} /home/hayakawa/Documents/test/{{infile}}","output":"str","x":280,"y":260,"wires":[["d3956f5e7e50aa0c"]]}]
第4ステップ
自習17:オープンソースからのデータ取り
気象庁が提供する滋賀県の天気予報を下記APIにhttpノードのGETメソッドでアクセスして取得してください。
滋賀県の天気の予報概要と滋賀県北部と南部の今日、明日、明後日の天気予報をダッシュボードに表示してください。
<気象庁の天気予報のAPI>
滋賀県の地域コード:250000
1) 天気予報の概要
https://www.jma.go.jp/bosai/forecast/data/overview_forecast/地域コード.json
2) 明後日までの天気予報
https://www.jma.go.jp/bosai/forecast/data/forecast/地域コード.json
■ ヒント:上記APIにhttpノードでアクセスすると、天気予報のJSONデータが送り返されてきますので、debugノードでオブジェクトを確認して、必要なデータを抜き出して、ダッシュボードのtextノードで表示してください。
<フロー回答例>
[{"id":"b17d4f2a010a6ad0","type":"tab","label":"自習17","disabled":false,"info":"","env":[]},{"id":"791fdc40300a1544","type":"inject","z":"b17d4f2a010a6ad0","name":"地域コード","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"250000","payloadType":"num","x":140,"y":160,"wires":[["273f7c93021e899a","eea602235afed568"]]},{"id":"273f7c93021e899a","type":"template","z":"b17d4f2a010a6ad0","name":"","field":"url","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"https://www.jma.go.jp/bosai/forecast/data/overview_forecast/{{payload}}.json","output":"str","x":300,"y":100,"wires":[["d729c50baa8b1955"]]},{"id":"49d4a6697f1161d4","type":"debug","z":"b17d4f2a010a6ad0","name":"debug 14","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":680,"y":200,"wires":[]},{"id":"d729c50baa8b1955","type":"http request","z":"b17d4f2a010a6ad0","name":"","method":"GET","ret":"obj","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":450,"y":100,"wires":[["778ab9922f99ae75","5cba0b77442eef2c","3b335cbbc60f7950","e866685abaa10c46","49d4a6697f1161d4"]]},{"id":"778ab9922f99ae75","type":"ui_text","z":"b17d4f2a010a6ad0","group":"929389633b524206","order":0,"width":"4","height":"1","name":"","label":"発表者","format":"{{msg.payload.publishingOffice}}","layout":"row-spread","className":"","x":670,"y":40,"wires":[]},{"id":"5cba0b77442eef2c","type":"ui_text","z":"b17d4f2a010a6ad0","group":"929389633b524206","order":0,"width":"6","height":"1","name":"","label":"報告日時","format":"{{msg.payload.reportDatetime}}","layout":"row-spread","className":"","x":680,"y":80,"wires":[]},{"id":"3b335cbbc60f7950","type":"ui_text","z":"b17d4f2a010a6ad0","group":"929389633b524206","order":0,"width":"4","height":"1","name":"","label":"対象地域","format":"{{msg.payload.targetArea}}","layout":"row-spread","className":"","x":680,"y":120,"wires":[]},{"id":"e866685abaa10c46","type":"ui_text","z":"b17d4f2a010a6ad0","group":"929389633b524206","order":0,"width":"6","height":"4","name":"","label":"予報概要","format":"{{msg.payload.text}}","layout":"col-center","className":"","x":680,"y":160,"wires":[]},{"id":"406958b614c827d4","type":"ui_button","z":"b17d4f2a010a6ad0","name":"","group":"929389633b524206","order":4,"width":"2","height":"1","passthru":false,"label":"天気予報","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"250000","payloadType":"num","topic":"topic","topicType":"msg","x":140,"y":220,"wires":[["eea602235afed568","273f7c93021e899a"]]},{"id":"eea602235afed568","type":"template","z":"b17d4f2a010a6ad0","name":"","field":"url","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"https://www.jma.go.jp/bosai/forecast/data/forecast/{{payload}}.json","output":"str","x":300,"y":280,"wires":[["d2ef22f91bb3e423"]]},{"id":"d2ef22f91bb3e423","type":"http request","z":"b17d4f2a010a6ad0","name":"","method":"GET","ret":"obj","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":450,"y":280,"wires":[["49d4a6697f1161d4","c685b04d1988ce75","9045d6cfe63980c2","ce938050e1f993de","ba596d1427c54bb0","a08185cbd437d61e","f54a4aeff58d618a","49c55d7a4ee3cc42","3510b54fe2e5a473","17aecbcbe2769f68","60a3a8e933897d18"]]},{"id":"c685b04d1988ce75","type":"ui_text","z":"b17d4f2a010a6ad0","group":"dd86f759b98a5a77","order":0,"width":"12","height":"1","name":"","label":"発表者","format":"{{msg.payload[0].publishingOffice}}","layout":"row-spread","className":"","x":670,"y":260,"wires":[]},{"id":"9045d6cfe63980c2","type":"ui_text","z":"b17d4f2a010a6ad0","group":"dd86f759b98a5a77","order":0,"width":"12","height":"1","name":"","label":"報告日時","format":"{{msg.payload[0].reportDatetime}}","layout":"row-spread","className":"","x":680,"y":300,"wires":[]},{"id":"ce938050e1f993de","type":"ui_text","z":"b17d4f2a010a6ad0","group":"dd86f759b98a5a77","order":0,"width":"12","height":"1","name":"","label":"対象地域","format":"滋賀県 {{msg.payload[0].timeSeries[0].areas[0].area.name}}","layout":"row-left","className":"","x":680,"y":360,"wires":[]},{"id":"20715aab26810b57","type":"ui_text","z":"b17d4f2a010a6ad0","group":"dd86f759b98a5a77","order":0,"width":"4","height":"1","name":"","label":"{{msg.topic}}の天気","format":"{{msg.payload[0].timeSeries[0].areas[0].weathers[0]}}","layout":"col-center","className":"","x":790,"y":400,"wires":[]},{"id":"ba596d1427c54bb0","type":"moment","z":"b17d4f2a010a6ad0","name":"今日","topic":"","input":"payload[0].timeSeries[0].timeDefines[0]","inputType":"msg","inTz":"Asia/Tokyo","adjAmount":0,"adjType":"days","adjDir":"add","format":"YYYY/MM/DD","locale":"ja-JP","output":"topic","outputType":"msg","outTz":"Asia/Tokyo","x":670,"y":400,"wires":[["20715aab26810b57"]]},{"id":"a08185cbd437d61e","type":"moment","z":"b17d4f2a010a6ad0","name":"明日","topic":"","input":"payload[0].timeSeries[0].timeDefines[1]","inputType":"msg","inTz":"Asia/Tokyo","adjAmount":0,"adjType":"days","adjDir":"add","format":"YYYY/MM/DD","locale":"ja-JP","output":"topic","outputType":"msg","outTz":"Asia/Tokyo","x":670,"y":440,"wires":[["f30570b816f315e2"]]},{"id":"f30570b816f315e2","type":"ui_text","z":"b17d4f2a010a6ad0","group":"dd86f759b98a5a77","order":0,"width":"4","height":"1","name":"","label":"{{msg.topic}}の天気","format":"{{msg.payload[0].timeSeries[0].areas[0].weathers[1]}}","layout":"col-center","className":"","x":790,"y":440,"wires":[]},{"id":"f54a4aeff58d618a","type":"moment","z":"b17d4f2a010a6ad0","name":"明後日","topic":"","input":"payload[0].timeSeries[0].timeDefines[2]","inputType":"msg","inTz":"Asia/Tokyo","adjAmount":0,"adjType":"days","adjDir":"add","format":"YYYY/MM/DD","locale":"ja-JP","output":"topic","outputType":"msg","outTz":"Asia/Tokyo","x":670,"y":480,"wires":[["cdc59921d39514d7"]]},{"id":"cdc59921d39514d7","type":"ui_text","z":"b17d4f2a010a6ad0","group":"dd86f759b98a5a77","order":0,"width":"4","height":"1","name":"","label":"{{msg.topic}}の天気","format":"{{msg.payload[0].timeSeries[0].areas[0].weathers[2]}}","layout":"col-center","className":"","x":790,"y":480,"wires":[]},{"id":"49c55d7a4ee3cc42","type":"ui_text","z":"b17d4f2a010a6ad0","group":"dd86f759b98a5a77","order":0,"width":"12","height":"1","name":"","label":"対象地域","format":"滋賀県 {{msg.payload[0].timeSeries[0].areas[1].area.name}}","layout":"row-left","className":"","x":680,"y":540,"wires":[]},{"id":"3510b54fe2e5a473","type":"moment","z":"b17d4f2a010a6ad0","name":"今日","topic":"","input":"payload[0].timeSeries[0].timeDefines[0]","inputType":"msg","inTz":"Asia/Tokyo","adjAmount":0,"adjType":"days","adjDir":"add","format":"YYYY/MM/DD","locale":"ja-JP","output":"topic","outputType":"msg","outTz":"Asia/Tokyo","x":670,"y":580,"wires":[["753e82264152c5cc"]]},{"id":"753e82264152c5cc","type":"ui_text","z":"b17d4f2a010a6ad0","group":"dd86f759b98a5a77","order":0,"width":"4","height":"1","name":"","label":"{{msg.topic}}の天気","format":"{{msg.payload[0].timeSeries[0].areas[1].weathers[0]}}","layout":"col-center","className":"","x":790,"y":580,"wires":[]},{"id":"17aecbcbe2769f68","type":"moment","z":"b17d4f2a010a6ad0","name":"明日","topic":"","input":"payload[0].timeSeries[0].timeDefines[1]","inputType":"msg","inTz":"Asia/Tokyo","adjAmount":0,"adjType":"days","adjDir":"add","format":"YYYY/MM/DD","locale":"ja-JP","output":"topic","outputType":"msg","outTz":"Asia/Tokyo","x":670,"y":620,"wires":[["2db0992c3944824b"]]},{"id":"2db0992c3944824b","type":"ui_text","z":"b17d4f2a010a6ad0","group":"dd86f759b98a5a77","order":0,"width":"4","height":"1","name":"","label":"{{msg.topic}}の天気","format":"{{msg.payload[0].timeSeries[0].areas[1].weathers[1]}}","layout":"col-center","className":"","x":790,"y":620,"wires":[]},{"id":"60a3a8e933897d18","type":"moment","z":"b17d4f2a010a6ad0","name":"明後日","topic":"","input":"payload[0].timeSeries[0].timeDefines[2]","inputType":"msg","inTz":"Asia/Tokyo","adjAmount":0,"adjType":"days","adjDir":"add","format":"YYYY/MM/DD","locale":"ja-JP","output":"topic","outputType":"msg","outTz":"Asia/Tokyo","x":670,"y":660,"wires":[["94be62efdce91127"]]},{"id":"94be62efdce91127","type":"ui_text","z":"b17d4f2a010a6ad0","group":"dd86f759b98a5a77","order":0,"width":"4","height":"1","name":"","label":"{{msg.topic}}の天気","format":"{{msg.payload[0].timeSeries[0].areas[1].weathers[2]}}","layout":"col-center","className":"","x":790,"y":660,"wires":[]},{"id":"929389633b524206","type":"ui_group","name":"予報概要","tab":"d7292cb383092ef9","order":1,"disp":true,"width":"6","collapse":false,"className":""},{"id":"dd86f759b98a5a77","type":"ui_group","name":"予報詳細","tab":"d7292cb383092ef9","order":2,"disp":true,"width":"12","collapse":false,"className":""},{"id":"d7292cb383092ef9","type":"ui_tab","name":"自習17","icon":"dashboard","disabled":false,"hidden":false}]
自習18:自動メールの発信
LINEノードをインストールし、injectノードを押したら現在の時刻を、LINEにメッセージを送るフローを作成してください(LINEをお持ちでなければ、gmailなどその他のメールでも可)
Line-notifyノードをあらかじめパレットに追加しておく必要があります。追加が未だの方は、こちら(Line-Notifyノードの追加)から追加してください。emailを使用される方は、こちら(emailノードの追加)からemailノードを追加しておいてください。
<参考HP>
Node-REDからLine-Notifyを送信
Node-REDからGmailを送信
<フロー回答例>
[{"id":"c941f9ccc19451fc","type":"tab","label":"自習18","disabled":false,"info":""},{"id":"d0f16bf41119d8ab","type":"e-mail","z":"c941f9ccc19451fc","server":"smtp.gmail.com","port":"465","authtype":"BASIC","secure":true,"tls":true,"name":"","dname":"gmail","x":670,"y":100,"wires":[]},{"id":"62c67d904759a141","type":"change","z":"c941f9ccc19451fc","name":"message","rules":[{"t":"set","p":"topic","pt":"msg","to":"日時情報","tot":"str"},{"t":"set","p":"to","pt":"msg","to":"送信先メールアドレス","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":520,"y":100,"wires":[["e31463d5c90a5292","d0f16bf41119d8ab","b2ebfb7b52bc7213"]]},{"id":"033b9ee1127d1267","type":"template","z":"c941f9ccc19451fc","name":"主文","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"現在は、{{payload}} です。","output":"str","x":390,"y":100,"wires":[["62c67d904759a141"]]},{"id":"3a2be62a466ce6e6","type":"inject","z":"c941f9ccc19451fc","name":"送信","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":130,"y":100,"wires":[["17b6a3e0a4698f0c"]]},{"id":"e31463d5c90a5292","type":"debug","z":"c941f9ccc19451fc","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":690,"y":60,"wires":[]},{"id":"b2ebfb7b52bc7213","type":"line-notify","z":"c941f9ccc19451fc","name":"","message":"","contentType":"message","imageThumbnail":"","imageUrl":"","sticker":"default","stickerPackageId":"1","stickerId":"1","silent":false,"creds":"4df1d228e21012dd","x":680,"y":140,"wires":[[]]},{"id":"17b6a3e0a4698f0c","type":"moment","z":"c941f9ccc19451fc","name":"時刻変換","topic":"","input":"payload","inputType":"msg","inTz":"Asia/Tokyo","adjAmount":0,"adjType":"days","adjDir":"add","format":"YYYY年MM月DD日 HH時mm分ss秒","locale":"ja-JP","output":"payload","outputType":"msg","outTz":"Asia/Tokyo","x":260,"y":100,"wires":[["033b9ee1127d1267"]]},{"id":"fe47ed86b7efe7e3","type":"comment","z":"c941f9ccc19451fc","name":"gmail(要クリック)","info":"messageの名前のchangeノードに送信先の\nメールアドレスを設定して下さい。\nまた、emailノードにユーザーIDとアプリ\nパスワードの入力して下さい。","x":880,"y":100,"wires":[]},{"id":"8ca652527224265b","type":"comment","z":"c941f9ccc19451fc","name":"LINE(要クリック)","info":"LINEノードにトークンの名前とアクセス\nトークンを設定してください。","x":870,"y":140,"wires":[]},{"id":"942ff390b0b8d13d","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"a85d2a87ae7e72de","order":5,"width":3,"height":1},{"id":"70eef2b94579bbd2","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"a85d2a87ae7e72de","order":6,"width":5,"height":1},{"id":"25d18e6735d95213","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"a85d2a87ae7e72de","order":7,"width":11,"height":1},{"id":"5212e223d31362e2","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"604d21cfd58f9fba","order":4,"width":3,"height":1},{"id":"f5999356ced83681","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"604d21cfd58f9fba","order":5,"width":3,"height":1},{"id":"227d8954e2dccc8d","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"604d21cfd58f9fba","order":6,"width":3,"height":1},{"id":"71aad9b9386e217d","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"604d21cfd58f9fba","order":9,"width":3,"height":1},{"id":"d93fdfcd386fc6c0","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"604d21cfd58f9fba","order":10,"width":3,"height":1},{"id":"b2838924518b2e09","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"604d21cfd58f9fba","order":11,"width":3,"height":1},{"id":"38409b91881c4340","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"604d21cfd58f9fba","order":13,"width":3,"height":1},{"id":"55f9e76c4088ee4d","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"604d21cfd58f9fba","order":14,"width":3,"height":1},{"id":"d2f42f9907619e33","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"604d21cfd58f9fba","order":15,"width":3,"height":1},{"id":"520f8da96a56c661","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"1369c23387cccc33","order":2,"width":11,"height":1},{"id":"5d7d48ce906bef78","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"1369c23387cccc33","order":3,"width":11,"height":1},{"id":"20d98505943a4f81","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"1369c23387cccc33","order":4,"width":11,"height":1},{"id":"8ff52efbef7da2e1","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"c6ec9637fe071bd0","order":4,"width":3,"height":1},{"id":"fb6977c34ab9b768","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"c6ec9637fe071bd0","order":5,"width":3,"height":1},{"id":"e41f96ed4a0709ce","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"c6ec9637fe071bd0","order":6,"width":3,"height":1},{"id":"b922735923a6e73e","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"c6ec9637fe071bd0","order":9,"width":3,"height":1},{"id":"6c94beda83c67c49","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"c6ec9637fe071bd0","order":10,"width":3,"height":1},{"id":"d66ba67f66fe41fa","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"c6ec9637fe071bd0","order":11,"width":3,"height":1},{"id":"22dc5992845f2ae6","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"c6ec9637fe071bd0","order":13,"width":3,"height":1},{"id":"9080f9b6680c3960","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"c6ec9637fe071bd0","order":14,"width":3,"height":1},{"id":"7fb98ca4379c6c2c","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"c6ec9637fe071bd0","order":15,"width":3,"height":1},{"id":"acb3120d72c932b9","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"3f7d1a19c4553938","order":5,"width":3,"height":1},{"id":"0855d33c1cbc3bab","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"3f7d1a19c4553938","order":6,"width":5,"height":1},{"id":"e33f56e4c6c05f04","type":"ui_spacer","z":"c941f9ccc19451fc","name":"spacer","group":"3f7d1a19c4553938","order":7,"width":11,"height":1},{"id":"4df1d228e21012dd","type":"linetoken","name":"from Node-RED test"},{"id":"a85d2a87ae7e72de","type":"ui_group","name":"酸素濃度 No3水槽","tab":"08cbdfaab57a9c4e","order":3,"disp":true,"width":"15","collapse":true,"className":""},{"id":"604d21cfd58f9fba","type":"ui_group","name":"酵素濃度 No4水槽","tab":"08cbdfaab57a9c4e","order":3,"disp":true,"width":"15","collapse":true,"className":""},{"id":"1369c23387cccc33","type":"ui_group","name":"CO2","tab":"08cbdfaab57a9c4e","order":4,"disp":true,"width":"15","collapse":true,"className":""},{"id":"c6ec9637fe071bd0","type":"ui_group","name":"酵素濃度 No1水槽","tab":"08cbdfaab57a9c4e","order":4,"disp":true,"width":"15","collapse":true,"className":""},{"id":"3f7d1a19c4553938","type":"ui_group","name":"酵素濃度 No2水槽","tab":"08cbdfaab57a9c4e","order":5,"disp":true,"width":"15","collapse":true,"className":""},{"id":"08cbdfaab57a9c4e","type":"ui_tab","name":"R-MSM 酸素","icon":"dashboard","order":3,"disabled":false,"hidden":false}]
第5ステップ
MSM本体を実際に使って行いますので別途案内します。
自習19:ON/OFF操作
MSM上のMSC23008に対してON/OFF信号を送る操作を行うダッシュボードボタン(スライドスイッチ)を扱えるようにフローを作成してください
自習20:PWM操作
PWM(Pulse Width Modulation)のデューティー比を、ダッシュボードのスライダーを使って操作するフローを作成してください。
アナログ電圧出力については、別途。
自習21:文字列送信
ダッシュボードに、3行の文字列を入力でき、その文字列をMSMへ送信するフローを作成してください
番外編:出前講座用フロー(自習とは関係ありません)
出前講座でR-MSMの温度センサのデータをダッシュボードに表示するフローです。
[{"id":"8d169c7126021641","type":"tab","label":"温度表示","disabled":false,"info":"","env":[]},{"id":"8e6cf0dc7153743d","type":"serial in","z":"8d169c7126021641","name":"","serial":"06babfe86cb3b9b7","x":90,"y":100,"wires":[["6ee4d18617b0a56c"]]},{"id":"14e753a7e6b33077","type":"debug","z":"8d169c7126021641","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":520,"y":60,"wires":[]},{"id":"6ee4d18617b0a56c","type":"json","z":"8d169c7126021641","name":"","property":"payload","action":"","pretty":false,"x":210,"y":100,"wires":[["e75d1aa986bb973d"]]},{"id":"e75d1aa986bb973d","type":"change","z":"8d169c7126021641","name":"温度抽出","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.temp.val - 10","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":340,"y":100,"wires":[["14e753a7e6b33077","acecdda4a96e7b16","96c8efcf07d29235"]]},{"id":"acecdda4a96e7b16","type":"ui_gauge","z":"8d169c7126021641","name":"温度計","group":"387b899e89ad1967","order":1,"width":4,"height":4,"gtype":"gage","title":"温度計","label":"℃","format":"{{value | number:2}}","min":0,"max":"40","colors":["#00ffff","#ff8000","#ca3838"],"seg1":"","seg2":"","diff":false,"className":"","x":510,"y":100,"wires":[]},{"id":"96c8efcf07d29235","type":"ui_chart","z":"8d169c7126021641","name":"温度推移(℃)","group":"387b899e89ad1967","order":2,"width":12,"height":4,"label":"温度推移","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"-10","ymax":"40","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":530,"y":140,"wires":[[]]},{"id":"06babfe86cb3b9b7","type":"serial-port","serialport":"COM7","serialbaud":"1000000","databits":"8","parity":"none","stopbits":"1","waitfor":"","dtr":"none","rts":"none","cts":"none","dsr":"none","newline":"\\n","bin":"false","out":"char","addchar":"","responsetimeout":"10000"},{"id":"387b899e89ad1967","type":"ui_group","name":"温度表示","tab":"87692de01013813d","order":1,"disp":true,"width":"16","collapse":false,"className":""},{"id":"87692de01013813d","type":"ui_tab","name":"R-MSM","icon":"dashboard","disabled":false,"hidden":false}]
気温が判定値より高くなったらアラームとしてLEDを赤くするという処理のフローです。
[{"id":"e7e774233375da69","type":"switch","z":"69f976b45311e984","name":"判定","property":"payload","propertyType":"msg","rules":[{"t":"gte","v":"limit","vt":"flow"},{"t":"lt","v":"limit","vt":"flow"}],"checkall":"true","repair":false,"outputs":2,"x":290,"y":240,"wires":[["06cfe3eacdf6083c"],["4d806829f408a147"]]},{"id":"06cfe3eacdf6083c","type":"change","z":"69f976b45311e984","name":"Over","rules":[{"t":"set","p":"payload","pt":"msg","to":"false","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":410,"y":220,"wires":[["4ff7891343e5d6c2"]]},{"id":"4d806829f408a147","type":"change","z":"69f976b45311e984","name":"In","rules":[{"t":"set","p":"payload","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":410,"y":260,"wires":[["4ff7891343e5d6c2"]]},{"id":"4ff7891343e5d6c2","type":"ui_led","z":"69f976b45311e984","order":3,"group":"387b899e89ad1967","width":"3","height":2,"label":"判定","labelPlacement":"left","labelAlignment":"left","colorForValue":[{"color":"#ff0000","value":"false","valueType":"bool"},{"color":"#008000","value":"true","valueType":"bool"}],"allowColorForValueInMessage":false,"shape":"circle","showGlow":true,"name":"判定","x":530,"y":240,"wires":[]},{"id":"387b899e89ad1967","type":"ui_group","name":"温度表示","tab":"87692de01013813d","order":1,"disp":true,"width":"16","collapse":false,"className":""},{"id":"87692de01013813d","type":"ui_tab","name":"R-MSM","icon":"dashboard","disabled":false,"hidden":false}]