CoAP Shell 筆記
1. 概述
CoAP (Constrained Application Protocol)?是一種專為物聯網?(IoT)?中資源受限的節點和網絡設計的?RESTful?Web?傳輸協議。CoAP Shell?是一個基于命令行的交互式工具,用于與支持?CoAP?的服務器進行交互。
2. 主要功能
-
協議支持:
- 支持?coap:?和?coaps:?協議(分別對應?UDP?和?DTLS?傳輸)。
- 提供?DTLS?會話管理,確保數據傳輸的安全性。
-
CoAP 方法:
- 支持標準的?CoAP?方法:
- GET:?獲取資源
- PUT:?更新資源
- POST:?創建資源
- DELETE:?刪除資源
- 支持標準的?CoAP?方法:
-
高級功能:
- 資源觀察 (Observing):?允許客戶端訂閱資源的變化,服務器會在資源發生變化時通知客戶端。
- 資源發現 (Discovery):?允許客戶端發現服務器上的可用資源,并支持基于?href,?ct,?rt,?obs?等參數的過濾。
- 消息交換模式:
- 同步模式:?客戶端發送請求后等待服務器響應。
- 異步模式 (--async):?客戶端發送請求后不等待服務器響應,繼續執行其他操作。
- 消息類型:
- 可確認消息 (Confirmable):?需要服務器確認的可靠消息。
- 不可確認消息 (Non-Confirmable):?不需要服務器確認的消息。
-
用戶友好性:
- TAB 自動補全:?支持命令和參數的自動補全,提高使用效率。
- 詳細幫助文檔:?輸入?
help
?可查看所有可用命令及其使用說明。
-
安全性:
- 支持可插拔的密鑰/信任存儲和憑證管理,確保與服務器通信的安全性。
-
集成與擴展:
- 基于?Spring Shell,?Californium (Cf)?和?Scandium (Sc)?項目構建。
- 作為?SpringBoot?應用打包成單個可執行的?JAR?文件,可在任何?Java?8+?環境中運行。
-
IKEA TR?DFRI 網關支持:
- 提供對?IKEA?TR?DFRI?智能照明系統的基本支持,包括:
- 注冊新賬戶并生成預共享密鑰?(PSK)。
- 列出連接的設備及其狀態。
- 控制設備開關,例如打開或關閉燈泡。
- 使用?CoAP?的?PUT?方法發送?JSON?負載來控制設備屬性,例如設置?5850?屬性為?1?打開燈泡,設置為?0?關閉燈泡。
- 提供對?IKEA?TR?DFRI?智能照明系統的基本支持,包括:
3. 使用指南
3.1 快速啟動
1.獲取 CoAP Shell:
- 下載預構建的?coap-shell.jar?文件,或按照下文說明自行構建。
2.啟動 CoAP Shell:
java -jar ./coap-shell-1.1.1.jar
- 啟動后,會出現類似以下的提示符:
_____ ___ ___ ______ ____/ ___/__ / _ | / _ \ / __/ / ___ / / / / /__/ _ \/ __ |/ ___/ _\ \/ _ \/ -_) / / \___/\___/_/ |_/_/ /___/_//_/\__/_/_/ CoAP Shell (v1.1.1) For assistance hit TAB or type "help". server-unknown:>
3.連接到 CoAP 服務器:
server-unknown:>connect coap://californium.eclipse.org
available
coap://californium.eclipse.org/:>
- 常見的?CoAP?服務器地址示例:
coap://californium.eclipse.org/
coap://coap.me
3.2 常用命令
-
資源發現:
coap://californium.eclipse.org/:>discover --query href=/*
- 該命令會列出服務器上所有可用資源,并顯示其路徑、類型、內容類型、接口、大小和可觀察性等信息。
-
獲取資源:
coap://californium.eclipse.org/:>get /multi-format --accept application/xml
- 該命令獲取指定路徑的資源,并指定接受的內容類型為?
application/xml
。
- 該命令獲取指定路徑的資源,并指定接受的內容類型為?
-
控制 IKEA TR?DFRI 設備:
1.生成預共享密鑰 (PSK):
server-unknown:>ikea gateway key --ip 192.168.178.151 --identity myIkeaGatewayIdentity --security-code <Gateway Code Label>
- 替換?
<Gateway Code Label>
?為網關?背面的安全碼。 - 該命令會返回生成的?
IDENTITY
?和?PRE_SHARED_KEY
,需要妥善保存。
連接到 IKEA 網關:
server-unknown:>connect coaps://192.168.178.151:5684 --identity myIkeaGatewayIdentity --secret X5xyYM41qFS7vN10 available coaps://192.168.178.151:5684:>
- 替換?
192.168.178.151
?為網關的?IP?地址。
列出連接的設備:
coaps://192.168.178.151:5684:>ikea device list
- 該命令會列出所有連接的設備及其狀態,例如燈泡的開關狀態。
控制設備開關:
- 打開燈泡:
coaps://192.168.178.151:5684:>ikea turn on --instance 65539
- 關閉燈泡:
coaps://192.168.178.151:5684:>ikea turn off --instance 65539
- 替換?
65539
?為目標設備的實例?ID。
使用 PUT 方法控制設備屬性:
- 打開燈泡:
coaps://192.168.178.151:5684:>put //15001/65539 --payload '{"3311":[{"5850":1}]}'
- 關閉燈泡:
coaps://192.168.178.151:5684:>put //15001/65539 --payload '{"3311":[{"5850":0}]}'
- 這里的?
//15001/65539
?是設備的?URI?模板,15001
?是設備對象?ID,65539
?是設備實例?ID。
- 替換?
4. 注意事項
- DTLS 會話過期:?如果出現?
org.eclipse.californium.elements.EndpointMismatchException
?錯誤,說明?DTLS?會話已過期,需要重新連接。 - 日志調試:?啟動?CoAP?Shell?時,可以使用?
--logging.level
?參數來設置日志級別,例如:java -jar ./target/coap-shell-1.1.1-SNAPSHOT.jar --logging.level.org.eclipse.californium=DEBUG
- 這對于調試?CoAP?請求消息和?DTLS?交互非常有用。
5. 總結
CoAP?Shell?是一個功能強大的工具,簡化了與?CoAP?服務器的交互過程。它適用于開發、測試和調試物聯網應用,特別是那些基于?CoAP?協議的設備和服務。