使用mosquitto-client接收/發送mqtt訊息

這裡簡單展示如何接收發送mqtt訊息

使用的是IOT大平台上的heartbeat功能, 文件參考這裡

 

安裝套件

這裡使用的系統環境是Ubuntu 16.04

我們這裡使用mosquitto-clients來處理,只要用apt-get就能安裝

sudo apt-get install mosquitto-clients

因為現在大家都很注重資料的安全性,下面這裡以俱備安全性的mqtts為範例(Port 8883),不過更舊的Ubuntu上可能沒有辦法用apt-get安裝mqtts,得自行編譯了。

接收mqtt訊息

用mosquitto_pub可以很方便的訂閱topic

mosquitto_pub -d -q 1 \
    -h iot.cht.com.tw -p 8883 --capath /etc/ssl/certs/ \
    -t /v1/device/16695056102/heartbeat \
    -u PKGSEN123456789 -P PKGSEN123456789 \
    -m '{"pulse": "2000"}'

參數解釋:

-d是顯示debug message
-q是Qos, 建議是設為1/2比較好debug
-h是host
-p是port
--capath是指定CA路徑,在Ubuntu上是在/etc/ssl/certs/這個位置

如果沒有用--capath /etc/ssl/certs/指定的話, 會連不上server, 一直在螢幕上印出...
Client mosqsub/25112-mypc sending CONNECT
Client mosqsub/25112-mypc sending CONNECT
Client mosqsub/25112-mypc sending CONNECT
Client mosqsub/25112-mypc sending CONNECT
...

-t 是指topic,這裡是用publish所以是發送到指定topic
-u 是username, -P 是password, 這兩項在iot平台文件中表示放CK

CK可以是ProjectKey或是DeviceKey, 就我觀察PK開頭就是ProjectKey, DK開頭就是DeviceKey

-m 是放置要給iot大平台的下次心跳時間(毫秒),其實也就是放資料的地方啦!

補充(2021/08/20更新)

  1. topic部份,以/開頭的(如:/v1/device/162/heartbeat)跟沒有/的(如:v1/device/162/heartbeat)是不同的topic,所以在下指令的時候要多注意喔!
  2. topic的特殊符號 # 和 +
    想要一次subscribe整個topic下的所有topic,只要在後面加上#即可,如:/v1/device/162/#,它會subscribe多層。
    想要一次subscribe所有device的特定topic,只要用+即可,如:/v1/device/+/heartbeat,僅限一層。
  3. 也可以subscribe所有的topic,只是不建議這麼做,只是要注意bash會把你的#符號吃掉,所以要打 -t '#'

參考: https://ithelp.ithome.com.tw/articles/10222563


發送mqtt訊息

mosquitto_sub -d -q 1 \
    -h iot.cht.com.tw -p 8883 --capath /etc/ssl/certs/ \
    -t /v1/device/16695056102/heartbeat \
    -u PKGSEN123456789 -P PKGSEN123456789

這裡參數跟接收mqtt訊息一樣


留言