CoAP Driver — 技術リファレンス
PlantPulse Edge の CoAP ドライバは Eclipse Californium 3.13.0 ライブラリをラップした Java 実装です。 低消費電力 IoT デバイス (RFC 7252) のリソース URI に GET / PUT でアクセスします。
ソース: plantpulse.driver.protocol.coap.*
| クラス | 責務 |
|---|---|
CoAPDriver | ProtocolDriver 実装 — connect/read(GET)/write(PUT)/close、resource 単位の CoapClient キャッシュ |
ライブラリ:
lib/californium-core-3.13.0.jarlib/element-connector-3.13.0.jar
動作フロー
[connect] CoapClient(baseUri) 생성 → setConnected(true)
↓
[read] resource path → resourceUri = baseUri + "/" + path
→ resourceClients.computeIfAbsent(uri, CoapClient::new)
→ CoapClient.get() (synchronous)
→ resp.isSuccess() ? resp.getResponseText() : ""
↓
[write] resourceClients.computeIfAbsent(uri, CoapClient::new)
→ CoapClient.put(value, MediaTypeRegistry.TEXT_PLAIN /* 0 */)
→ resp.isSuccess()
↓
[close] 모든 CoapClient.shutdown() + resourceClients.clear()
CoAP は UDP ベースのため connectionless — クライアントオブジェクトを生成した時点で「connected」とみなします。 実際のデバイス可用性は最初の read 時に確認されます。
オプション (BasicDriverSource.options)
このドライバにオプションはありません。 接続に使用する値は host と port のみです。
dtls · psk-identity · psk-key を指定しても効果はありませんドライバは接続 URI を常に coap:// として生成します。オプションに dtls=true を指定したり、
port を DTLS 標準ポートである 5684 に設定しても 平文 CoAP で送信されます — エラーも発生しない
ため、暗号化されていると誤解しやすい点に注意してください。
DTLS が必要なデバイスでは、デバイスの手前に DTLS 終端ゲートウェイを配置し、ゲートウェイの 平文側をこのドライバで読み取ってください。
リクエストタイムアウトも指定できません。Californium のデフォルト値がそのまま適用されます。
応答が遅いデバイスには、タイムアウトではなく収集周期(timecycle)を延ばして対応してください。
アドレス (resource path) 形式
| 形式 | 変換結果 |
|---|---|
/sensors/temperature | coap://host:5683/sensors/temperature |
sensors/temperature | coap://host:5683/sensors/temperature (先頭の / を自動補正) |
/.well-known/core | デバイスのリソースディスカバリ — 登録済みリソース一覧 (CoRE Link Format) |
resource 単位で CoapClient がキャッシュされ socket を再利用します。close() 時にすべて shutdown。
応答処理
| Californium 応答 | driver 処理 |
|---|---|
resp == null | read = ""、write = false |
resp.isSuccess() (2.xx) | read = resp.getResponseText()、write = true |
resp.getCode() エラー (4.xx / 5.xx) | warn log + read = ""、write = false |
CoAP の応答テキストは mediaType に関係なくそのまま String として返されます — デバイスが JSON で応答する場合は
呼び出し側 (PlantPulse の JsonExtract) でデコードします。CBOR 応答はテキストとして表示されるため、別途デコーダが必要です (現在は未対応)。
単体テスト
test/java/plantpulse/driver/protocol/coap/CoAPDriverTest.java — 13 メソッド:
- クラスロード + 初期状態
- メタ (isWriteSupported / isExternal / getDriverSource)
- 未接続時の read / write の安全性 (NPE なし)
- close() の安全性
baseUri()— 明示指定 / デフォルトポートresourceUri()— 先頭/の補正getDebugBaseUrl()—coap://host:port
ネットワーク呼び出しを行わないビルド分離テスト (./gradlew test グリーン)。