一、與Chirpstack服務(wù)器數(shù)據(jù)交互
準(zhǔn)備:使用MQTTX軟件訂閱目標(biāo)服務(wù)器,此處為自己搭建的chirpstack服務(wù)器,IP為192.168.0.84,用戶名和密碼均為admin,通過應(yīng)用服務(wù)器訂閱TOPIC來接受設(shè)備服務(wù)器發(fā)布的信息。
設(shè)備信息位置如圖:
語法:
卡片的背景色需要調(diào)出布局工具欄來設(shè)置
// 設(shè)備服務(wù)器上傳的TOPIC
// display everything for the given APPLICATION_ID
application/APPLICATION_ID/#
// display only the uplink payloads for the given APPLICATION_ID
application/APPLICATION_ID/device/+/event/up
// 應(yīng)用服務(wù)器下發(fā)TOPIC
application/APPLICATION_ID/device/DEV_EUI/command/down
注意:'#'和'+'為MQTT協(xié)議中的通配符
單級通配符(Single-level wildcard):用符號"+"表示。當(dāng)一個主題中的某個級別使用"+"通配符時,它可以匹配一個層級的任意名稱。例如,"home/+"可以匹配"home/bedroom"、"home/livingroom"等主題,但不能匹配"home/bedroom/temperature"等超過一個層級的主題。
多級通配符(Multi-level wildcard):用符號"#"表示。當(dāng)一個主題中的某個級別使用"#"通配符時,它可以匹配多個層級的任意名稱。"#"必須作為主題的最后一個級別,可以匹配當(dāng)前級別以及所有更深層級的主題。例如,"home/#"可以匹配"home/bedroom"、"home/livingroom",以及"home/bedroom/temperature"等任意層級的主題。
每個卡片都可以嵌套插入圖片或其它模板。
設(shè)備推送信息:
//接收TOPIC:
//訂閱單個設(shè)備的數(shù)據(jù)上傳TOPIC
application/ded77c98-1249-44d1-9a14-c4b312f71d77/device/a1b117f518a3ba80/event/up
//訂閱當(dāng)前app下的所有設(shè)備
application/ded77c98-1249-44d1-9a14-c4b312f71d77/#
/* 終端節(jié)點上傳數(shù)據(jù)的AT指令
1:需要確認(rèn)幀? // 0不需要確認(rèn)
2:最大重發(fā)次數(shù)2次
10:當(dāng)前包的byte數(shù)量
xx:data ?*/
AT+DTRX=1,2,10,3435363738
應(yīng)用服務(wù)器接收到的信息如圖:
應(yīng)用服務(wù)器下發(fā)信息:
//下發(fā)TOPIC:
application/ded77c98-1249-44d1-9a14-c4b312f71d77/device/a1b117f518a3ba80/command/down
//下發(fā)數(shù)據(jù)格式
{
"devEui": "a1b117f518a3ba80",? ? #設(shè)備ID
"confirmed": true,? ? ? ? ? ? ? ?#是否需要確認(rèn)
"fPort": 10,? ? ? ? ? ? ? ? ? ? ?#目標(biāo)應(yīng)用層端口
"data": "cnVub29i"? ? ? ? ? ? ? ?#數(shù)據(jù),注意:需要使用base64編碼格式 eg:cnVub29i == 72756E6F6F62(runoob)
}
//終端設(shè)備從接收緩沖區(qū)中讀取數(shù)據(jù)并清空緩沖區(qū)
AT+DRX?
設(shè)備接收到的信息如圖:
注意:MQTT通配符只能在訂閱時使用,無法在發(fā)送時使用。
工具網(wǎng)站
ASCII轉(zhuǎn)字符:https://www.asciim.cn/m/tools/convert_ascii_to_string.html
base64加解密:https://c.runoob.com/front-end/693/
二、與TTN服務(wù)器數(shù)據(jù)交互
之前的文章我們主要說明了如何在thethingsnetwork.org上面注冊網(wǎng)關(guān)、創(chuàng)建應(yīng)用、創(chuàng)建設(shè)備等,thethingsnetwork.org(下稱TTN)只是一個網(wǎng)絡(luò)服務(wù)器(network server),不會保存應(yīng)用數(shù)據(jù),因此實際項目中還需要一個應(yīng)用服務(wù)器(application server),thethingsnetwork.org提供了多種方式供應(yīng)用平臺獲取數(shù)據(jù)以及管理設(shè)備。
主要分為3大類:
APIs:又分為數(shù)據(jù)API和應(yīng)用管理API,數(shù)據(jù)API主要用MQTT方式接收和下發(fā)數(shù)據(jù),應(yīng)用管理API主要使用HTTP方式管理注冊設(shè)備。
SDKs:提供了Go、Java、Node.js等各種語言。
Integrations(集成):ThingSpeak、AWS IOT等。
多數(shù)情況下只需要關(guān)注上報和下發(fā)數(shù)據(jù),因此本文主要說明如何使用MQTT方式獲取數(shù)據(jù)和下發(fā)數(shù)據(jù),官方說明:https://www.thethingsnetwork.org/docs/applications/mqtt/api.html
這里使用MQTT.fx這個客戶端來演示,在實際應(yīng)用中可能使用其他高級語言MQTT客戶端的方式。
連接
主要是上面框圖中的四個參數(shù),其中:
Broker Address:.thethings.network,其中是所選的地區(qū)。
這個參數(shù)也是我們注冊應(yīng)用的時候選擇的Handler,就是下圖中右邊的地址:
Broker Port:1883(非加密方式)。
Client ID:隨便給一個。
User Name:應(yīng)用ID,這個是注冊應(yīng)用的時候自定義的,這里是ff08。
Password:應(yīng)用訪問密鑰,base64格式,這個是系統(tǒng)生成的,當(dāng)然也可以自己添加,這里使用系統(tǒng)生成的:
訂閱(Subscribe)節(jié)點上行數(shù)據(jù)
TTN提供了一個主題Topic:/devices//up,其中和都是注冊的時候自己定義的,進入相應(yīng)的設(shè)備就可以看到,如下:
可以看到節(jié)點ID、上報的端口號、計數(shù)器、頻點、時間戳等,其中payload_raw字段就是我們上傳的數(shù)據(jù),是以base64格式顯示的。
發(fā)布(Publish)下行數(shù)據(jù)
TTN提供了一個主題Topic:/devices//down,其中和都是注冊的時候自己定義的,進入相應(yīng)的設(shè)備就可以看到。
數(shù)據(jù)是json格式,上面3個字段是必須的,payload_raw字段就是我們要下發(fā)的數(shù)據(jù),是base64格式的。
“MTIzNDU2Nzg5”對應(yīng)的明文是“123456789”。
在節(jié)點查看下發(fā)的應(yīng)用數(shù)據(jù):
節(jié)點收到的數(shù)據(jù)以hex格式打印出來,剛好對應(yīng)字符串“123456789”。