メインコンテンツまでスキップ

CoAP ドライバ

PlantPulse Edge の CoAP ドライバは Eclipse Californium 3.13.0 ライブラリをラップした Java 実装です。 低電力 IoT デバイス (RFC 7252) のリソース URI に GET / PUT でアクセスします。

ソース: plantpulse.driver.protocol.coap.*

クラス責任
CoAPDriverProtocolDriver 実装 — connect/read(GET)/write(PUT)/close、リソースごとの CoapClient キャッシュ

ライブラリ:

  • lib/californium-core-3.13.0.jar
  • lib/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/temperaturecoap://host:5683/sensors/temperature
sensors/temperaturecoap://host:5683/sensors/temperature (先頭の / を自動補正)
/.well-known/coreデバイスのリソースディスカバリ — 登録済みリソース一覧 (CoRE Link Format)

リソースごとに CoapClient がキャッシュされ socket 再利用。close() 時にすべて shutdown。


応答処理​

Californium 応答driver 処理
resp == nullread = ""、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() — 明示 / デフォルト port
  • resourceUri() — 先頭の / 補正
  • getDebugBaseUrl() — coap://host:port

ネットワーク呼び出しなしのビルド分離テスト (./gradlew test グリーン)。


参考​