さくらのモノプラットフォームのデータをNode-REDで取り出す方法


さくらのモノプラットフォームを使用してIoTの通信試験をしてみたりしているのですが、
プラットフォーム側で受信したデータを簡単に取り出す方法がわからないという話を聞きましたので、自分がやってみた方法を簡単にまとめてみます。

使用するもの

M5stack
開発用PC
モノプラットフォーム開発キット(申し込むと提供してもらえるそうです)

開発環境

Arduino IDE
Node-RED環境

実際の手順

今回はpayloadの取り出しがメインになりますので、Arduino IDEとM5stackの使用ができることを前提に説明していきます。

ハードウェアのファーム

M5stackのファームウェアについてはサンプルスケッチをそのまま使用します。
サンプルスケッチを書き込んでブートさせた後にAボタンを押すとデータ送信をします。
このように、M5stackの画面とモノプラットフォームのコンソールでデータが送信できていることを確認できます。

受信用のNode-RED

次にNode-RED側の準備を行います。
安価なVPSを用意してもいいのですが、今回はローカルでやることにします。
Node-REDの環境を用意する必要がある人はこちらを参考に用意してください(Node-REDのインストールだけで大丈夫です)。

実際のフローはこのような感じになります。

処理の流れから説明していきます。
まずはwebソケットの受信用のノードを用意します。
ノードの中の設定は、種類を待ち受け、パスにはモノプラットフォームのコントロールパネルで発行されたものをコピペします。

wss://api.sakura....というものが発行されますので、パスを表す「/」もつけるようにしてください。

次にNode-REDで扱いやすいようにJSONに変換します。これはJSONノードを接続するだけで簡単に行えます。
動作はJSON文字列とオブジェクト間の相互変換を選択しておいてください(おそらくデフォルトです)。

webソケットでデータを受信できるようになっているのですが、webソケットの死活監視のためのkeep alive情
keep alive情報は

{
  "type": "keepalive",
  "timestamp": "2022-03-31T12:38:21.039Z"
}

のようなJSONで入ってきます。今回はこの情報は使用しませんので、JSONオブジェクトの中にkeep aliveという情報がある場合は、はじくようにします。
switchノードを用意して、プロパティにmsg.pauload.typeを指定します。
条件は != keepaliveにしてください。

これで必要な情報だけが次のノードに流れていくようになりました。

流れてきた情報から実際に必要な情報(payload)を取り出します。
ここではfunctionノードの中にJavascriptを書いてパースする必要がありますが、Node-REDですので最低限の記述で済みます。
functionノードの中の記述はこのようになります。

var value = msg.payload.payload[0].value
msg.payload = {
    value
}
return msg;

これだけでpayloadのデータが取り出せます。

確認用のdebugノードを用意します。
後はノードをつなげてデプロイします。
これでpayloadのデータが取り出せるようになりました。

感想とappendix

サンプルスケッチとNode-REDを使用することで比較的簡単にLTE通信の試験をすることができます。
なので概念実証までは一気にできるのかなと感じます。
ファイルの送信等もできるようになったみたいですので、近いうちに試してみたいと思います。
実際にセンシングしたデータをどのようにpayloadに詰め込んで(encode)、クラウド側で使用できるようにするのか(decode)なども要望があれば書いてみます。

参考情報

M5stackを利用してさくらのモノプラットフォームとhacobuneを使ってみました
LINEボットのローコード開発環境をローカルPC上に構築する方法
公式ドキュメント
公式github