Zum Hauptinhalt springen

CoAP Driver — Technische Referenz

Der CoAP-Treiber von PlantPulse Edge ist eine Java-Implementierung, die die Bibliothek Eclipse Californium 3.13.0 kapselt. Er greift per GET / PUT auf die Ressourcen-URIs von Low-Power-IoT-Geräten (RFC 7252) zu.

Quelle: plantpulse.driver.protocol.coap.*

KlasseZuständigkeit
CoAPDriverProtocolDriver-Implementierung — connect/read(GET)/write(PUT)/close, CoapClient-Cache je Resource

Bibliotheken:

  • lib/californium-core-3.13.0.jar
  • lib/element-connector-3.13.0.jar

Ablauf

[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 setzt auf UDP auf und ist damit connectionless — bereits das Erzeugen des Client-Objekts gilt als „connected". Die tatsächliche Verfügbarkeit des Geräts zeigt sich erst beim ersten Read.


Optionen (BasicDriverSource.options)

Dieser Treiber besitzt keine Optionen. Für die Verbindung werden ausschließlich host und port verwendet.

dtls · psk-identity · psk-key bleiben wirkungslos

Der Treiber bildet die Verbindungs-URI immer als coap://. Auch wenn Sie dtls=true in den Optionen setzen oder port auf den DTLS-Standardport 5684 legen, erfolgt die Kommunikation im Klartext-CoAP — ohne Fehlermeldung, sodass leicht der Eindruck einer Verschlüsselung entsteht.

Für Geräte, die DTLS erfordern, setzen Sie ein DTLS-terminierendes Gateway vor das Gerät und lesen Sie die Klartext-Seite des Gateways mit diesem Treiber.

Auch ein Request-Timeout lässt sich nicht vorgeben; es gelten die Standardwerte von Californium. Bei Geräten mit langsamer Antwort erhöhen Sie statt eines Timeouts das Erfassungsintervall (timecycle).


Adressformat (resource path)

FormatErgebnis der Umwandlung
/sensors/temperaturecoap://host:5683/sensors/temperature
sensors/temperaturecoap://host:5683/sensors/temperature (führendes / wird automatisch ergänzt)
/.well-known/coreResource Discovery des Geräts — Liste der registrierten Ressourcen (CoRE Link Format)

Pro Resource wird ein CoapClient zwischengespeichert, sodass der Socket wiederverwendet wird. Bei close() werden alle heruntergefahren.


Antwortverarbeitung

Californium-AntwortVerarbeitung im Treiber
resp == nullread = "", write = false
resp.isSuccess() (2.xx)read = resp.getResponseText(), write = true
resp.getCode()-Fehler (4.xx / 5.xx)warn log + read = "", write = false

Der CoAP-Antworttext wird unabhängig vom mediaType unverändert als String zurückgegeben — antwortet das Gerät mit JSON, erfolgt die Dekodierung auf der aufrufenden Seite (JsonExtract von PlantPulse). CBOR-Antworten werden als Text dargestellt und benötigen einen eigenen Decoder (derzeit nicht unterstützt).


Unit-Tests

test/java/plantpulse/driver/protocol/coap/CoAPDriverTest.java — 13 Methoden:

  • Klassenladen + Initialzustand
  • Meta (isWriteSupported / isExternal / getDriverSource)
  • read / write ohne Verbindung sicher (kein NPE)
  • close() sicher
  • baseUri() — expliziter / Default-Port
  • resourceUri() — Korrektur des führenden /
  • getDebugBaseUrl()coap://host:port

Build-isolierte Tests ohne Netzwerkaufrufe (./gradlew test grün).


Referenzen