【M5StickC Plus】UIFlowのRemote機能で使用しているURIを取得する
タイトルにM5StickC Plusってつけてますが,多分どのM5シリーズでも一緒.
ひょんなことからインターネット越しにM5Stickを連携させたいということになって,少し調べてました. (※今回の要件はセキュリティ度外視)
で,UI-FlowのRemoteという機能を使うと簡単にできそうということが分かったんですが,少し引っ掛かったところがあったのでまとめました.
結論としては.
- Remote機能を使うとインターネット越しに(=同一ネットワーク外からでも)アクセスできる
- アクセス用のRESTはapi.m5stack.comに置かれており,
完全なURIはパケット解析しないと得られない?- ⇒追記:ブラウザの開発モードから通信キャプチャすると簡単に取得できるという情報を頂きました.感謝!
以下,ここに至るまでの顛末です.
UI-FlowのRemote機能について
様の記事が非常に分かりやすいです.大感謝!
Remote機能は同一ネットワークからしかアクセスできない?
ところがこのRemote機能の仕組みについて呟いたところ,
UIflow試食中。Remoteって機能使うと遠隔操作出来るって書いてあるけど、どういう仕組みなんだろう。
— LNLD (@shikky27) 2021年6月5日
m5stickcがどこかにセッション張り続けてロングポーリングみたいな事してんのかな。
そういうサーバーを自前で用意するつもりだったので、使えるならありがたい。
先ほどのエントリの著者である たなかまさゆき さんからコメントを頂きました.ありがとうございます.
esp32(M5StickC)自体がwebサーバになって、操作用のページを表示します
— たなかまさゆき (@tnkmasayuki) 2021年6月5日
なので同じネットワークにいないと操作できないですねhttps://t.co/aoUyD5Y96N
曰く,このRemote機能は同一ネットワークからしかアクセスできないとのこと.
なるほど,まぁそうですよね.
とはいえ一応確認のため,別ネットワークであるモバイル回線から試してみたのですが,,,
アクセスできてしまいました.
もしかすると仕様が変わったのかもしれません.少なくとも現時点(2021年6月6日)ではアクセスできるようです.
アクセス先のAPIのURIは?
そうなるとアクセス先のAPIがわかれば,当初の目的であるM5StickC同士の連携が実現できそうです.
が,どうにも記載は見つかりません.
というわけで,wireshark使ってパケット解析してみました.
で,得られたURIがコチラ.
http://api.m5stack.com/v1/394XXXX/call?func=_remote_LED(1)
※IDっぽいところはぼかしてますが8桁の16進数が入る模様.
_remote_LEDは今回UI-Flowで定義した関数名です.スイッチボタンだったので,引数の部分でOn/Offを切り替えられるんだと思われます.
このURIにGETを投げてみたところ,M5StickCを操作することができました.
(PUTとかじゃないんですね.)
追記:ブラウザの開発モードから通信キャプチャするともっと簡単
REST_URLの取得方法について,先ほどの たなかまさゆき さんより再度コメントを頂きました.本当にありがとうございます.
Chromeとか最近のは大抵可能だと思いますが、デベロッパツールからNetwork開いて、解析スタートのボタン押してから、ページをリロードすると再読み込みで利用したURL一覧が表示されます。ここでリクエストの内容とレスポンスの内容すべて確認可能です
— たなかまさゆき (@tnkmasayuki) 2021年6月6日
SSLでも中身見えるのでパケット解析より楽です pic.twitter.com/xQ2Ueb5DJK
試してみましたが,めちゃくちゃ便利でした.FireFoxでもChromeでも,ブラウザには大体この機能が備わっているかと思うので,ぜひ試してみてください!
おわりに
というわけで,M5StickのRemote機能を使うことで簡単に?M5Stick同士のインターネット越しの連携を実現できそうです.
なお,この機能で生成されるURIはHttpですし,上述のようにURIを叩けば実行できてしまうので,セキュリティ的にはかなりまずいと思われます.
M5シリーズはプロト用の運用が想定された製品なので,手軽さのためにこの辺りをそぎ落とすのは妥当な判断だと思います.ただし利用者はそのあたりをちゃんと認識したうえで使う必要がありますね.
それでは.