はじめに
FacebookでNode-RED MCU EditionのWebSocketノードが動かないというメッセージをもらい、調査開始〜対応完了までの経緯をまとめておきます。
調査
Node-RED MCU Editionの書籍を執筆した時点で、Secure通信(HTTPS/MQTTS)は未対応でした。
その後、HTTPS/MQTTSに対応し、補足書として執筆しました。
@mshioji 氏が対応の経緯をまとめています。
当初は同じ手順で動作することを期待しましたが、残念ながらWebSocketはSecure通信に未対応と判明しました。
GitHubのdiscussionsで議論を始めました。
Secure対応
discussionsの中でWebSocketのSecure対応が遅れている理由を教えていただきましたが、調査を進めるとSecure対応が可能ということが分かりました。
Moddable SDK側の変更が必要ですが、Node-RED MCU EditionからWebSocketのSecure通信が可能(Node-RED MCU Edition側のmasterブランチは反映済)になりました。
Moddable SDK側の変更箇所はたった1行だけです。
(60行目)
config = device.network.wss;
↓
config = {...(options?.wss ?? device.network.wss)};
2024年5月29日追記
2024年5月20日にModdable SDKのmasterブランチに反映されました。
WebSocketノードでSecure通信を行う手順
HTTPS/MQTTSと同じ手順で、WebSocketノードでSecure通信が可能になりました。
「inject」ノード、「WebSocket out」ノード、「debug」ノードをフローエディタに配置します。
「WebSocket out」ノードを編集し、URLにWebSocketのURLを入力します。
TLS設定を有効にします。
Node-RED MCUの「Build」を実行し、「xsbug」のエラー画面でCA証明書の種類(CA109の部分)を確認します。
「WebSocket out」ノードのTLS設定の編集画面で、CA証明書に
$MODDABLE/modules/crypt/data-pem
ディレクトリのPEMファイルを指定します。
もう一度、Node-RED MCUの「Build」を実行するとWebSocketのSecure通信が成功します。