Mqtt X工具的Script功能使用

介紹

MQTT X 是一款開(kāi)源的MQTT 5.0 桌面測(cè)試客戶端蜕该,相比其他mqtt的桌面客戶端工具,比如paho洲鸠、mqtt.fx堂淡,Mqttx有以下的優(yōu)勢(shì):

  • 支持創(chuàng)建多個(gè)同時(shí)在線的 MQTT 客戶端,方便用戶快速測(cè)試 MQTT/TCP扒腕、MQTT/TLS 绢淀、MQTT/WebSocket的連接/發(fā)布/訂閱功能及其他 MQTT 協(xié)議特性。
  • 支持自動(dòng)重連和自動(dòng)恢復(fù)訂閱瘾腰。
  • 全面的 MQTT 參數(shù)配置皆的,以便用戶應(yīng)對(duì)任何使用場(chǎng)景。
  • 可以記錄訂閱主題蹋盆,以應(yīng)對(duì)多主題訂閱帶來(lái)的不便解阅。
  • 支持運(yùn)行script來(lái)對(duì)實(shí)時(shí)接收到的消息進(jìn)行處理不撑,應(yīng)對(duì)復(fù)雜消息難以觀測(cè)的難題啦膜。
  • 數(shù)據(jù)的導(dǎo)入導(dǎo)出探遵。
效果演示

本文主要講解如何使用mqtt x的腳本功能柳沙。

安裝

進(jìn)入官網(wǎng)訪問(wèn)選擇對(duì)應(yīng)平臺(tái)下載:https://mqttx.app/zh
Github倉(cāng)庫(kù):https://github.com/emqx/MQTTX

Script功能說(shuō)明

以下為mqttx從接收訂閱消息到顯示在控制臺(tái)的流程圖:


image.png

從流程圖可以看出重要的一點(diǎn)是岩灭,script處理的消息是經(jīng)過(guò)解碼之后得到的字符串,所以如果沒(méi)有在控制臺(tái)正確選中解碼方式赂鲤,那么script運(yùn)行可能得不到正確輸出噪径。


腳本編寫(xiě)與測(cè)試

腳本運(yùn)行之后,控制臺(tái)顯示的消息就是腳本的輸出数初。

Script功能例程

需求:已知接收到的消息為hex找爱,如果第一個(gè)字節(jié)是0xF0, 那么其中第二第三個(gè)字節(jié)是0-65535的數(shù)值A(chǔ),另外第四個(gè)字節(jié)的第三個(gè)位為一個(gè)開(kāi)關(guān)量B∨莺ⅲ現(xiàn)在需要在接收到消息時(shí)车摄,提取到A和B直接顯示出來(lái)。
Script如下:

/**
* @description: 處理mqtt接收到的消息
* @param {any} value - Payload 接收到的消息并且經(jīng)過(guò)解碼后的字符串
* @param {string} msgType - 消息的類(lèi)型,是訂閱消息還是發(fā)送消息 'received' or 'publish'
* @param {number} index - 消息的索引 Index of the message, valid only when script is used in the publish message and timed message is enabled
* @return {any} - 經(jīng)過(guò)處理后的消息 Payload after script processing
*/
function handlePayload(value, msgType, index) {
    const hexStrArray = toHexStrArray(value)
    var printTextArr = [];
    if(hexStrArray[0] == "F0"){
        printTextArr.push("A值:"+parseHexStrArraytoInt(hexStrArray.slice(1, 3)))
        printTextArr.push("B開(kāi)關(guān):"+extractBitFromHexStr(hexStrArray[3], 3))
    }
    printTextArr.push("原paylod:"+value)
    return printTextArr.join(",")
}

/**
 * @description: 
 * 將value(payload)轉(zhuǎn)為hex字符串?dāng)?shù)組并返回
 * 例如:
 *  輸入: "3C3C 0014"
 *  輸出: ["3C", "3C", "00", "14"]
 *
 * @param {any} value - Payload,類(lèi)型是string
 * @return {any} - hex字符串?dāng)?shù)組
 */
function toHexStrArray(value){
    const rep = value.replace(/\s*/g,"")
    let array = []
    let arrLen = rep.length/2
    for(var i = 0; i < arrLen; i++){
        array.push(rep.substr(i*2, 2))
    }
    return array
}

/**
 * @description: 
 * 大端模式下,將hex字符串?dāng)?shù)組轉(zhuǎn)為整形數(shù)
 * 例如:
 *  輸入:["ff","ff"] 
 *  輸出:65535
 * 
 * @param {array} hexStrArray - hex字符串?dāng)?shù)組
 * @return {number} - 整形數(shù)
 */
function parseHexStrArraytoInt(hexStrArray){
    return parseInt(hexStrArray.join(""), 16)
}

/**
 * @description: 從hex字符串中提取位,返回0或者1
 * 
 * @param {string} hexStr - hex字符串
 * @param {number} bitNum - 取第幾位,低位從右邊開(kāi)始,最小為1
 * @return {number} - 0或者1
 */
function extractBitFromHexStr(hexStr,bitNum){
    return (parseInt(hexStr, 16) >>> (bitNum-1)) & 1
}

/**
 * @description: 執(zhí)行handlePayload方法
 */
execute(handlePayload)

輸入消息與結(jié)果對(duì)照

E0 00 FF FF 輸出 原paylod:E0 00 FF FF

F0 00 FF FF 輸出 A值:255,B開(kāi)關(guān):1,原paylod:F0 00 FF FF 

F0 FF 01 FF 輸出 A值:65281,B開(kāi)關(guān):1,原paylod:F0 FF 01 FF

F0 FF 01 FB 輸出 A值:65281,B開(kāi)關(guān):0,原paylod:F0 FF 01 FB 
控制臺(tái)輸出
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末仑鸥,一起剝皮案震驚了整個(gè)濱河市吮播,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌眼俊,老刑警劉巖意狠,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異疮胖,居然都是意外死亡环戈,警方通過(guò)查閱死者的電腦和手機(jī)闷板,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)院塞,“玉大人遮晚,你說(shuō)我怎么就攤上這事∑扔疲” “怎么了鹏漆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)创泄。 經(jīng)常有香客問(wèn)我艺玲,道長(zhǎng),這世上最難降的妖魔是什么鞠抑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任饭聚,我火速辦了婚禮,結(jié)果婚禮上搁拙,老公的妹妹穿的比我還像新娘秒梳。我一直安慰自己,他們只是感情好箕速,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布酪碘。 她就那樣靜靜地躺著,像睡著了一般盐茎。 火紅的嫁衣襯著肌膚如雪兴垦。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天字柠,我揣著相機(jī)與錄音探越,去河邊找鬼。 笑死窑业,一個(gè)胖子當(dāng)著我的面吹牛钦幔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播常柄,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鲤氢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了西潘?” 一聲冷哼從身側(cè)響起铜异,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎秸架,沒(méi)想到半個(gè)月后揍庄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡东抹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年蚂子,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沃测。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡食茎,死狀恐怖蒂破,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情别渔,我是刑警寧澤附迷,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站哎媚,受9級(jí)特大地震影響喇伯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拨与,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一稻据、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧买喧,春花似錦捻悯、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至低淡,卻和暖如春姓言,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背查牌。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工事期, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滥壕,地道東北人纸颜。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像绎橘,于是被迫代替她去往敵國(guó)和親胁孙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1.HTML:(超文本標(biāo)記語(yǔ)言——HyperText Markup Language)是構(gòu)成 Web 世界的一磚一...
    109aed7ea56f閱讀 129評(píng)論 0 0
  • 前言 加密解密是前后端開(kāi)發(fā)經(jīng)常需要使用到的技術(shù)称鳞,應(yīng)用場(chǎng)景包括不限于用戶鑒權(quán)涮较、數(shù)據(jù)傳輸?shù)龋煌膽?yīng)用場(chǎng)景也會(huì)需要使用...
    袋鼠云數(shù)棧前端閱讀 399評(píng)論 0 2
  • 1.前言(老司機(jī)直接跳過(guò)) 為什么js需要加密 談到加密冈止,大多數(shù)人應(yīng)用場(chǎng)景都在于后端接口的加密簽名校驗(yàn)狂票。這種一般...
    麻瓜三號(hào)閱讀 1,327評(píng)論 0 0
  • 思維方式是看待事物[https://baike.baidu.com/item/%E4%BA%8B%E7%89%A9...
    屋邊星光閱讀 330評(píng)論 0 0
  • 前言 冪等性,是開(kāi)發(fā)人員在日常開(kāi)發(fā)中必須要考慮的熙暴,尤其是轉(zhuǎn)賬闺属、支付等涉及金額交易的場(chǎng)景慌盯,如果出現(xiàn)冪等性的問(wèn)題,造成...
    技術(shù)深耕閱讀 229評(píng)論 0 0