待っているだけだと時間の無駄なので受信した後のデータ処理を考えていた。処理と言ってもカンマ区切で1つの文字列になって入って来るのを分割する方法を。しかし、これがネットに例が出ていないので困った。分割で検索すると、確かに一連の文字列が分割されるが同じノードに出力されてしまうものばかり。
同じノードに出力されるとその下流のinfluxdb outではmeasurementが1つしか設定できないから全部同じところに値が入ってしまって具合が悪い。どうしても別のノードに出力させないといけない。
と、考えに考えてできたのが下記。
まず最初にはinjectノードでダミーのデータを送って分割してみた。
これはできた後だけれど、ここまでくるのにだいぶ時間がかかった。
ちゃんと異なるノードに分割されて出ているのがわかる。
これがinjectノードから送っている文字列。(数字をカンマ区切でいくつも送っている。)
まず文字列をカンマで分割。
もともとカンマ区切だけれどもカンマは区切文字でなくて単なる文字の1つと認識されているので正式に区切る。
区切ると1つ1つの文字(列)は出口が1つなので次々と下流のノードへ向かって出て行くだけ。
Splitから次々と出てきた文字(列)は一見数字に見えるが実は文字であって数字でないのでこれを計算のできる数字に変換する。変換は区切られた1個1個に対して行われる。
Splitでせっかく区切ったのだけれど、また1つの塊になるようにくっつける。くっつけると言っても、全く1つのものにするのではなくて配列にする。なぜなら、配列にしておいた方が個別より扱い易いから。
そしてここがメインのfunctionノード。
配列になっているのでその何番目かを指定して値を取出している。1つのfunctionで6つのうち1個だけ取り出すのでfunctionは6個必要になる。番号は0〜5。
注意しないといけないのは、msg.payloadをまず配列の変数に入れる事。その変数に[番号]を指定する事で1つ取り出せる。もう1つ大切なのはfunctionから出せるのは数字でも文字列でもないそうで、メッセージにそれを入れて出さないとエラーになる。
前回、数字で出力しようとしてエラーが出て、あっ文字列でないと...と思ったらそれは間違いで、「メッセージ」の形になっていると言うのが正しいとの事だった。
ここまで来たところで、実際のデータ受信モードに変更。
Injectionの代わりにmqttノードを設置。
出力側にinfluxdb outを設置。
全体像はこうなる。
しかし、Node-REDはコードを書かなくて良いからやるものなのだが、実際にはJavascriptを知らないとできない事もけっこう多いとわかった。changeとfunctionの中は、あれはコードとも言えない位にちょっとしたコードだけれど、知らないので調べるのにけっこう時間がかかる。もう少し経つときっとAIがこんな事したいと言っただけで勝手に書いてくれる時代になるとは思う。早くそうなって欲しい。
最新の画像もっと見る
最近の「マレーシアでニャー2019」カテゴリーもっと見る
最近の記事
カテゴリー
- 日本でニャー2024(308)
- 猫の治療(34)
- 猫の引越(17)
- 癌になる(23)
- 日本でニャー2023(333)
- 日本でニャー2022(98)
- マレーシアでニャー2022(244)
- マレーシアでニャー2021(355)
- マレーシアでニャー2020(277)
- マレーシアでニャー2019(280)
- マレーシアでニャー2018(238)
- マレーシアでニャー2017(241)
- マレーシアでニャー(321)
- 長いようで短い5年目マレーシア(5)
- どうにか4年目マレーシア(157)
- 3年目に突入マレーシア(358)
- 2年目のマレーシア(428)
- まさか、マレーシア!(409)
- 英語やるぞ!(140)
- いい歳して大学へ(13)
- 台湾-非観光的(78)
- 備忘録バリとインドネシア(24)
- Vespa? Yes, but LML !(218)
- カンガルーじゃないKangoo(108)
- Photo Photo(117)
- 日本脱出(140)
- 美食満腹(104)
- 映画って !(292)
- いろいろ雑記帖(394)
- これってスゴイ!(92)
- Puppy で Go!(20)
- ABCのAはArduinoのA(68)
バックナンバー
人気記事