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.*
| Klasse | Zuständigkeit |
|---|---|
CoAPDriver | ProtocolDriver-Implementierung — connect/read(GET)/write(PUT)/close, CoapClient-Cache je Resource |
Bibliotheken:
lib/californium-core-3.13.0.jarlib/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 wirkungslosDer 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)
| Format | Ergebnis der Umwandlung |
|---|---|
/sensors/temperature | coap://host:5683/sensors/temperature |
sensors/temperature | coap://host:5683/sensors/temperature (führendes / wird automatisch ergänzt) |
/.well-known/core | Resource 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-Antwort | Verarbeitung im Treiber |
|---|---|
resp == null | read = "", 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-PortresourceUri()— Korrektur des führenden/getDebugBaseUrl()—coap://host:port
Build-isolierte Tests ohne Netzwerkaufrufe (./gradlew test grün).