CoAP-Treiber
Der CoAP-Treiber von PlantPulse Edge ist eine Java-Implementierung, die die Eclipse Californium 3.13.0-Bibliothek umschließt. Er greift über GET / PUT auf Ressourcen-URIs von energiesparenden IoT-Geräten (RFC 7252) zu.
Quelle: plantpulse.driver.protocol.coap.*
| Klasse | Verantwortung |
|---|---|
CoAPDriver | ProtocolDriver-Implementierung — connect/read(GET)/write(PUT)/close, CoapClient-Cache pro Ressource |
Bibliothek:
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 basiert auf UDP und ist daher connectionless — allein durch die Erzeugung des Client-Objekts gilt die Verbindung als "connected". Die tatsächliche Verfügbarkeit des Geräts wird erst beim ersten read überprüft.
Optionen (BasicDriverSource.options)
Dieser Treiber hat keine Optionen. Für die Verbindung werden ausschließlich host und port verwendet.
dtls · psk-identity · psk-key haben keinerlei WirkungDer Treiber bildet die Verbindungs-URI immer als coap://. Selbst wenn Sie dtls=true in den Optionen setzen oder
den Port auf 5684, den DTLS-Standardport, festlegen, erfolgt die Kommunikation im Klartext per CoAP — es wird auch
kein Fehler ausgegeben, sodass leicht der Eindruck entsteht, die Verbindung sei verschlüsselt.
Für Geräte, die DTLS benötigen, platzieren Sie ein DTLS-Terminierungsgateway vor dem Gerät und lesen Sie dessen Klartext-Seite mit diesem Treiber.
Auch ein Anforderungs-Timeout ist nicht konfigurierbar. Der Californium-Standardwert wird unverändert angewendet.
Bei Geräten, die langsam antworten, erhöhen Sie stattdessen die Erfassungsperiode (timecycle) anstelle des Timeouts.
Adressformat (resource path)
| Format | Umwandlungsergebnis |
|---|---|
/sensors/temperature | coap://host:5683/sensors/temperature |
sensors/temperature | coap://host:5683/sensors/temperature (führendes / wird automatisch korrigiert) |
/.well-known/core | Ressourcen-Discovery des Geräts — Liste der registrierten Ressourcen (CoRE Link Format) |
Pro Ressource wird CoapClient gecacht, sodass Sockets wiederverwendet werden. Bei close() werden alle geschlossen.
Antwortverarbeitung
| Californium-Antwort | Treiberbehandlung |
|---|---|
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 Antworttext von CoAP wird unabhängig vom mediaType unverändert als String zurückgegeben — wenn das Gerät mit JSON antwortet,
erfolgt die Dekodierung auf der Aufruferseite (der JsonExtract von PlantPulse). CBOR-Antworten werden als Text angezeigt, daher ist ein separater Dekoder erforderlich (derzeit nicht unterstützt).
Unit-Tests
test/java/plantpulse/driver/protocol/coap/CoAPDriverTest.java — 13 Methoden:
- Klassenladen + Anfangszustand
- Metadaten (isWriteSupported / isExternal / getDriverSource)
- Sicherheit bei read / write ohne Verbindung (kein NPE)
- Sicherheit bei close()
baseUri()— expliziter / Standard-PortresourceUri()— Korrektur des führenden/getDebugBaseUrl()—coap://host:port
Build-isolierte Tests ohne Netzwerkaufrufe (./gradlew test grün).