OpenWRT上安裝和使用MQTT Broker和Client

路由器是24小時長開的設備,而MQTT又是一個需要24×7的輕量化系統,所以OpenWRT + MQTT 應該是很搭配的?於是小U就求證一下。本文(以及後續)會分享我配合OpenWRT路由器 Ups-WR30U 搭建 MQTT + Node-RED + InfluxDB + Grafana 實現基礎IoT應用的資料。

OpenWRT上的MQTT套件情況

MQTT最有名的“產品牌子”應該就是Mosquitto了,在OpenWRT的Software頁面,搜尋mosquitto可以找到不少插件:

MQTT分爲Broker (server端) 和 Client (收發端),OpenWRT上兩者都有提供,

  • mosquitto-client-nossl,mosquitto-client-ssl
  • mosquitto-nossl,mosquitto-ssl

我沒有認真研究,但似乎ssl版本是可以同時使用nossl、並不是一定要ssl連線。

luci-app-mosquitto 是mosquitto broker的luci網頁設定套件。不建議裝,一來是直接修改  /etc/mosquitto/mosquitto.conf 感覺更方便和選項豐富,二來之後按卸載會導致luci頁面崩潰。

luci-app-mosquitto

OpenWRT上啓用MQTT Broker

就只需要一句: mosquitto 就開始運行了。在System-Start up裡面可以看到mosquitto會開機自動啓動。

用MQTT Client 驗證 MQTT Broker是否運作正常

需要打開兩個ssh terminal,一個作爲訂閱者,一個作爲發信號。

訂閱者窗口

開一個 ssh terminal 輸入 :

mosquitto_sub -h localhost -t router/test

-h :host,也就是MQTT Broker伺服器,這裏輸入localhost是因爲MQTT Broker也是安裝在同一個Openwrt系統中

-t :topic,MQTT的信息分類法

輸入後窗口會進入“listener”模式,等待有人往 router/test 這個topic發信息。

發信號窗口

另開一個 ssh terminal 輸入:

mosquitto_pub -h localhost -t router/test -m "Test Message"

忘了說,_sub就是訂閱,_pub就是發佈消息。

然後回到訂閱者窗口,應該就能看到 Test Message 的反饋了:

讓OpenWRT每分鐘報告WIFI連線設備數

來做一些有意義的監測,例如,你想統計一下每天不同時段你的路由器WIFI有多少部設備連線,最大值和最少值,發生在什麼時段。

小U寫一段shell腳本,讀取wifi的連線設備數,再把讀數發送給MQTT Broker:

#!/bin/sh
# /etc/mqttwificlients

BROKER="localhost"  
PORT=1883                          
TOPIC="router/wifi_devices"  
#USERNAME="your_username"           
#PASSWORD="your_password"           

ACTIVE_CONNECTIONS=$(iw dev phy1-ap0 station dump | grep "Station" | wc -l)

mosquitto_pub -h $BROKER -p $PORT -t $TOPIC -m "$ACTIVE_CONNECTIONS" #-u $USERNAME -P $PASSWORD

把腳本上傳到路由器的/etc/mqttwificlients,配合Scheduled Task讓腳本每分鐘執行一次:

讓腳本每分鐘執行一次。定時腳本設定請參考:OpenWRT設置定時重啓、定時開關WIFI、定時調整WIFI功率等自動化教學 – by Upsangel

設置好之後,用 mosquitto_sub -h localhost -t router/wifi_devices 來接收設備個數:

最近5分鐘,每分鐘都是有6個WIFI設備連線

本文到此就介紹了在OpenWRT路由器上安裝和使用MQTT Broker和Client的方法。MQTT裡面的細節有很多,可以參考:

下一步就是怎麼把這些每分鐘一個讀數、用圖表形式展現出來。下文繼續~

本文是小U的「玩開源、從OpenWRT開始」系列文章的其中一篇。自從Ups-WR30U開源路由器得到大家的熱烈支持,小U也收到了客戶的各種使用OpenWRT的問題查詢,順勢就着手把大家會遇到的,想要用的,都集結成這個系列的文章,希望讓各位從OpenWRT體驗和玩樂開源系統。不需要靠AI,你就能讓路由器變得更”聰明“!

如果你還未有OpenWRT路由器,不妨從 Ups-WR30U 上手吧:

標籤:

歡迎你的留言討論:

你可以一針見血

by Upsangel
Logo