之前介紹了一些thingsboard的使用,今天簡單的介紹下thingsboard用到的技術
ThingsBoard使用筆記(2)模擬傳感器發送MQTT並顯示監控圖表
架構
- 文檔:https://thingsboard.io/docs/reference/architecture/
- 併發模型: Actor模型akka Actor模式理解與使用
- 集羣協作:zookeeper
- 支持協議:mqtt、coap、http
- 遠程調用: gRPC,thrift
- 持久化: Postgresql、Cassandra(https://cassandra.apache.org/數據存儲),datastax(數據訪問)
包含模塊
application
1.common(data,message,transport):
- data用於與不同db之間的中間數據結構。
- message定義不同的消息類型。
- transport定義一個公共的接口,供與客戶端的transport層使用
2.dao:
- dao抽象了對不同數據庫的統一接口。
- dao的接口數據一般都data,根據不同的數據庫在不同的接口中轉換爲對應的實體類與數據庫交互.
- 通過@ConditionalOnProperty(prefix = "database", value = "type", havingValue = "cassandra")動態注入不同的數據庫
3.tools:
- extensions(extension-kafka,extension-mqtt,extension-rabbitmq,extension-rest-api-call):分別調用不同協議的後端服務
- extensions-api:定義aciton,filter,plugin,processor及其他基本對象
- extensions-core:實現一些公用aciton,filter,plugin,processor
4.transport(http,caop,mqtt):
- mqtt基於netty開發mqtt服務器。
- http提供基於rest的http服務。
- 基於californium搭建coap服務。
- 對不同的客戶端設備提供不同類型的接口.同時將消息轉換成不同的message,通過DefaultActorService與後端的actor交互
規則引擎
- 規則與插件。基於actors執行。
- 規則包含Filters,Processors,Action
ui
使用nodejs
相關概念
- Attributes(https://thingsboard.io/docs/user-guide/attributes/):設備屬性
- Telemetry(https://thingsboard.io/docs/user-guide/telemetry/):設備數據
- RPC(https://thingsboard.io/docs/user-guide/rpc/):服務器與設備間通信
- 租戶tenant:可以將ThingsBoard租戶視爲獨立的業務實體:擁有或生產設備的個人或組織。
- 部件庫
- 客戶管理:租戶和客戶的關係,每個客戶有對應的資產和設備
- 實體視圖:類似於SQL數據庫視圖,它限制了基礎表暴露給外部世界的程度,TB EV限制了設備或資產遙測和屬性暴露給客戶的程度。 作爲租戶管理員,您可以爲每個設備或資產創建多個EV,並將其分配給不同的客戶。
- use case:
與多個客戶同時共享特定設備或資產數據。 由於TB安全模型的限制,以前的EV功能無法實現。
允許特定客戶用戶查看收集的數據(例如傳感器讀數),但隱藏調試信息,如電池電量,系統錯誤等。
設備即服務(DaaS)模型,其中設備在不同時間段收集的數據屬於不同的客戶。
數據發送
#遙測數據發送規則
curl -v -X POST -d @dummy_data.json http://<你的IP>:<開放的端口(一般是80)>/api/v1/<訪問令牌>
curl -v -X POST -d '{"temperature":21, "humidity":55.0, "active": false}' http://iot.test.com/api/v1/A1_TEST_TOKEN/telemetry --header "Content-Type:application/json"
#發送屬性數據
curl -v -X POST -d '{"firmware_version":"1.0.1", "serial_number":"SN-001"}' http://iot.test.com/api/v1/A1_TEST_TOKEN/attributes --header "Content-Type:application/json"
#發送遙測數據
curl -v -X POST -d '{"temperature":21, "humidity":55.0, "active": false}' http://localhost:8080/api/v1/A1_TEST_TOKEN/telemetry --header "Content-Type:application/json"
登陸及數據查看
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{"username":"[email protected]", "password":"tenant"}' 'http://iot.test.com/api/auth/login'
curl -v -X GET http://iot.test.com/api/plugins/telemetry/DEVICE/e00c4cd0-a885-11e9-884f-57005a69df9c/keys/timeseries \
--header "Content-Type:application/json" \
--header "X-Authorization:Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZW5hbnRAdGhpbmdzYm9hcmQub3JnIiwic2NvcGVzIjpbIlRFTkFOVF9BRE1JTiJdLCJ1c2VySWQiOiJkZmE5NmM1MC1hODg1LTExZTktODg0Zi01NzAwNWE2OWRmOWMiLCJlbmFibGVkIjp0cnVlLCJpc1B1YmxpYyI6ZmFsc2UsInRlbmFudElkIjoiZGY2N2NmNzAtYTg4NS0xMWU5LTg4NGYtNTcwMDVhNjlkZjljIiwiY3VzdG9tZXJJZCI6IjEzODE0MDAwLTFkZDItMTFiMi04MDgwLTgwODA4MDgwODA4MCIsImlzcyI6InRoaW5nc2JvYXJkLmlvIiwiaWF0IjoxNTYzNzc3NDQ5LCJleHAiOjE1NjM3ODY0NDl9.37XPIGd_A2Wpvzk8DJSSnAaXpTvcEbptikgaTK9r5654jyg7A2OklkDTGFRX2OSLZquv7ywpO38iDUt-RfHMCw"
參考資料
參考網址:https://thingsboard.io/docs/getting-started-guides/helloworld/
github地址:https://github.com/thingsboard/thingsboard
演示環境:https://demo.thingsboard.io/login。註冊時總提示“請確認不是機器人” 需要google驗證