路由器是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頁面崩潰。
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讓腳本每分鐘執行一次:
設置好之後,用 mosquitto_sub -h localhost -t router/wifi_devices
來接收設備個數:
本文到此就介紹了在OpenWRT路由器上安裝和使用MQTT Broker和Client的方法。MQTT裡面的細節有很多,可以參考:
下一步就是怎麼把這些每分鐘一個讀數、用圖表形式展現出來。下文繼續~
本文是小U的「玩開源、從OpenWRT開始」系列文章的其中一篇。自從Ups-WR30U開源路由器得到大家的熱烈支持,小U也收到了客戶的各種使用OpenWRT的問題查詢,順勢就着手把大家會遇到的,想要用的,都集結成這個系列的文章,希望讓各位從OpenWRT體驗和玩樂開源系統。不需要靠AI,你就能讓路由器變得更”聰明“!
- OpenWRT路由器WiFi名、密碼、速度的設定教學
- OpenWRT使用TailScale VPN教學
- 擋廣告神器「AdguardHome」在OpenWRT上使用方法教學
- 用OpenWRT劃分出訪客Guest LAN、隔離外網伺服器的兩種方法(不是無線訪客WIFI)
- OpenWRT防火牆:限制IP訪問Internet的最佳設置方法(無需打命令行)
- 一鍵連回家里內網:OpenWRT上部署Wireguard VPN服務器的三個要點、減少折騰時間
如果你還未有OpenWRT路由器,不妨從 Ups-WR30U 上手吧: