參考: http://www.ithingsboard.com/docs/user-guide/rpc/
-
設備單方面發送數據到 thingsBoard 平台
設備將屬性上傳至 thingsBoard:
v1/devices/me/attributes
設備將遙測數據上傳至 thingsBoard:
v1/devices/me/telemetry
thingsBoard 可以在規則鏈中配置,將設備上傳的數據發送到 kafka 。
-
遠程 RPC (分為兩種)
一種是服務器端(后端)發送給設備數據,設備不用做出回應。
這種情況下,服務端需要以 http(s) 的格式發送 RPC 請求給 thingsBoard,並指明需要進行連接的設備 id 號。
http(s)://host:port/api/plugins/rpc/oneway/{deviceId}
該請求的參數必須具備以下格式:
{ "method": "", "params": { } } 必填參數: method - 表示json字符串格式的方法名 params - 表示json字符串格式的對象參數列表
對應的,設備需要先訂閱主題 v1/devices/me/rpc/request/+ ,表明自己可以接收來自 thingsBoard 的請求。
訂閱該主題后,如果有來自服務端發送的請求到 thingsBoard 上,那么 thingsBoard 會向設備發送一條命令,具備以下格式:
v1/devices/me/rpc/request/$request_id
$request_id 表示請求的整型標識符。
還一種是服務器端(后端)發送給設備數據,設備需要做出回應的。
服務端發送的請求地址變為(只是將 oneway 改成了 twoway):http(s)://host:port/api/plugins/rpc/twoway/{deviceId}
在服務端發送到 thingsBoard,thingsBoard 發送到設備的過程與上述一樣,只不過在這種模式下,設備需要對該請求做出應答。
在設備收到對應的指令 v1/devices/me/rpc/request/$request_id 后,作為回應,設備需要在以下主題上發布數據:
v1/devices/me/rpc/response/$request_id
$request_id 為對應請求的整型標識符。
-
設備發出請求
上述 RPC 都是服務端發起的,那么設備如果要發起 RPC 到服務端需要以下步驟:
1、設備將數據發送到以下主題:
v1/devices/me/rpc/request/$request_id
2、服務端需要將響應發送到對應主題:
v1/devices/me/rpc/response/$request_id
**$request_id ** 表示請求的整型標識符。
3、若設備需要接收服務端發來的響應,則需要訂閱以下主題:
v1/devices/me/rpc/response/+
-
總結
與一般的發布訂閱模式相同,對與 MQTT 協議,當一端發送請求到 request 主題上時,另外一端需要發送相應的響應數據到對應的 response 主題上。若發起端需要獲得該響應,則必須在之前就訂閱 response/+ 主題來為以后接收響應做准備。
-
服務端調用 Java API
https://repo.thingsboard.io/artifactory/libs-release-public // 依賴包網址
需要在 pom.xml 中加入以下配置:
<dependency> <groupId>org.thingsboard</groupId> <artifactId>rest-client</artifactId> <version>3.2.0</version> </dependency> //上面的依賴將從下面的網址中導入 <repositories> <repository> <id>thingsboard</id> <url>https://repo.thingsboard.io/artifactory/libs-release-public</url> </repository> </repositories>
若要使 repository 配置成功,則必須保證本地 maven 倉庫配置中允許導入外部倉庫。
需要在本地 maven 倉庫的 settings.xml 中配置:
在
里的 * 后面追加 !spring-milestones ,保存退出並重啟 IDEA 即可。