WebSocket クライアント
外部 streaming サーバー (ws / wss) の endpoint に対してゲートウェイが クライアントとして outbound 接続 し、 push されるメッセージをリアルタイムで受信するモードです。
| 状況 | どのモードを使うか |
|---|---|
| 外部 IT システムが REST POST で値を送信してくる場合 | HTTP プッシュ |
| 外部 streaming サーバーが WebSocket で値を流してくる場合 | WebSocket クライアント (このページ) |
| 社内 PLC の値を直接読み取る場合 | Modbus / OPC-UA など |
登録フォームの入力値
| 入力欄 | 何を入力するか | 例 |
|---|---|---|
| IP アドレス | WebSocket サーバーのホスト | 192.168.10.99, stream.example.com |
| ポート | WebSocket サーバーのポート (ws=80, wss=443 が標準) | 8765, 443 |
| PATH | endpoint のパス (既定 /) | /stream/v1 |
| TLS | wss を使用するかどうか | false (ws) / true (wss) |
| SUBSCRIBE MESSAGE | 接続直後に一度だけ送信するメッセージ (オプション) | {"op":"subscribe","topic":"line1.tempC"} |
| 収集周期 | キャッシュされた値をゲートウェイが読み取る周期 (ms) | 1000 |
実際の接続 URL: <scheme>://<host>:<port><PATH> (例: ws://192.168.10.99:8765/stream/v1)
タグの PLC アドレス表記 — 4-mode JSON
サーバーが送信するメッセージが JSON の場合、MQTT / Apache Kafka と同じ 4-mode デコーダで値を抽出します。
サーバーが次のように push するとします:
{"tempC": 25.7, "humid": 40.2, "running": true, "meta":{"unit":"degC"}}
| モード | タグの PLC アドレス | 取得される値 |
|---|---|---|
| KEY (top-level) | tempC | 25.7 |
| KEY | humid | 40.2 |
| KEY | running | true |
| PATH (JSON Pointer) | :$.meta.unit | degC |
| RAW | _raw_ または :_raw_ (または空欄) | メッセージ全体 |
| SCALAR | (メッセージが JSON でない場合) _raw_ | メッセージそのまま |
WebSocket は単一チャネルなので topic 部分がありません — : の前半を空にするか、そのまま key のみを記述すればよいです。
JSON でない場合や、メッセージ全体をそのまま受け取りたい場合は _raw_ または空欄を使用します。
よく使われるケース
| ケース | 方法 |
|---|---|
| クラウド streaming broker (リアルタイム相場、為替、天気など) | サーバーが push する JSON キーをそのままタグに登録 |
| ROS 2 / rosbridge_server | rosbridge の WebSocket に接続 → topic メッセージを受信 |
| 社内独自の streaming ゲートウェイ | 通常は平文 ws 8080 / 8765 — tls=false |
| 外部セキュア SaaS (証明書が必要) | wss 443 — tls=true |
| サーバーが subscribe ハンドシェイクを要求する | SUBSCRIBE MESSAGE に取り決めた payload を入力 |
よくある問題と対処
| 症状 | 原因 | 対処 |
|---|---|---|
| 値が入ってこない | サーバーがメッセージを push していない | wscat -c ws://<host>:<port><path> で直接受信し、コンソールに行が出力されるか確認 |
| 値が入ってこない | subscribe メッセージ未設定 (サーバーが要求している場合) | サーバーのマニュアルを確認し SUBSCRIBE MESSAGE を登録 |
[WS] connect 실패: timeout | ファイアウォール / ポート / DNS | ポートが閉じていないか、telnet / nc で TCP 接続が可能か確認 |
[WS] connect 실패: handshake | path / TLS 設定の誤り | URL <scheme>://<host>:<port><path> を直接検証 |
| TLS 証明書エラー | 自己署名 (self-signed) | 本番では正式な証明書の使用を推奨。暫定対応時はシステム管理者に cacerts への追加を依頼 |
| JSON キーごとの値が空になる | メッセージ形式が JSON でない | まず _raw_ で受信して形式を確認 |