CoAP ドライバ
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、リソースごとの 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)を増やして対応してください。
アドレス (リソースパス) 形式
| 形式 | 変換結果 |
|---|---|
/sensors/temperature | coap://host:5683/sensors/temperature |
sensors/temperature | coap://host:5683/sensors/temperature (先頭の / を自動補正) |
/.well-known/core | デバイスのリソースディスカバリ — 登録済みリソース一覧 (CoRE Link Format) |
リソースごとに 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()— 明示 / デフォルト portresourceUri()— 先頭の/補正getDebugBaseUrl()—coap://host:port
ネットワーク呼び出しなしのビルド分離テスト (./gradlew test グリーン)。