我們有一堆Raspberry PI,我們將其用作運行python、gunicorn、sqlite數據庫和mqtt代理的Web服務器。我們希望有一個設備,我們可以監測這些樹莓派的情況,比如內存和溫度等等。為了不浪費顯示屏干這事情,我們決定使用Nanomesher HMI做一個簡單的監控解決方案。如果內存或存儲空間不足,它還會點亮板載LED作為警告。
NanoMesher HMI是NanoMesher開發的WiFi觸摸屏顯示器,具有易于使用的HTTP和基于MQTT的API。在這個項目中,Raspberry PI將通過HTTP API更新Nanomesher HMI。大概這么干吧結構很簡單。每個Raspberry PI運行一個python腳本,它定期獲取健康信息(CPU利用率、CPU溫度、空閑內存和空閑磁盤空間),并通過HTTP更新nanomesher HMI。該怎么顯示信息?我們使用Nextion Editor在屏幕上繪制5行文本框。屏幕上的每一行就是一個PI的信息。行數的大小取決于字體和屏幕的設計。“iplbl”用于顯示屏幕的IP地址。
▲ 用Nextion Editor做的用戶界面
獲取CPU溫度最簡單方法是使用下面的命令。
/opt/vc/bin/vcgencmd measure_temp
python提供了open命令來運行linux命令并返回結果。添加了一些字符串把輸出格式替換成我們需要的格式。
def GetTemp(): cmd = "/opt/vc/bin/vcgencmd measure_temp | sed -s 's/=/:/g'" p = Popen(cmd, shell=True, stdout=PIPE) output = p.communicate()[0] return output.replace(' ','').replace('temp:','Temp:').replace("'C","c")
獲取內存、CPU利用率和可用磁盤空間使用psutil python庫會非常容易解決這個問題。安裝:
sudo pip install psutil
或者使用python3:
sudo pip3 install psutil
virtual_memory() 用作返回以字節為單位的值。因此,我們需要除以1024兩次才能得到兆字節值。
def GetFreeMem(): return str(psutil.virtual_memory().free/1024/1024) + "M"
CPU和空閑磁盤空間相當直接
def GetCpuPercent(): return str(psutil.cpu_percent()) + "%"def GetFreeDisk(): return str(psutil.disk_usage('/home/pi').free/1024/1024) + "M"
IP地址最后,從eth0或wlan0接口獲取IP地址。
def GetLANIP():cmd = "ip addr show eth0 | grep inet| grep -v inet6 | awk '{print $2}' | cut -d '/' -f 1"p = Popen(cmd, shell=True, stdout=PIPE)output = p.communicate()[0]return outputdef GetWLANIP():cmd = "ip addr show wlan0 | grep inet| grep -v inet6 | awk '{print $2}' | cut -d '/' -f 1"p = Popen(cmd, shell=True, stdout=PIPE)output = p.communicate()[0]return output
更新Nanomesher HMI數據下面使用簡單的HTTPGET請求在顯示屏上設置值和顏色。
‘p’ - 頁碼
‘n’ - UI組件的名字
‘v’ - 文本集
‘fc’ - 前景色(16位)
def PublishToDisplay(text,label_prefix): try: data = {} data['p'] = '0' data['n'] = label_prefix + sys.argv[2] data['v'] = text data['fc'] = '23555' url_values = urllib.urlencode(data) url = "http://" + sys.argv[1] + "/TextSetText?" + url_values response = urllib2.urlopen(url) html = response.read() except: pass
['n']表示作為命令行參數傳入的組件名稱。行數取決于如何設計屏幕布局。在本例中,有4行分別命名為line1、line2、line3和line4。警告我們認為給出PI健康問題(如內存或磁盤空間不足)的視覺指示是有用的,因此我們在下面添加了此類檢查,以紅色顯示信息并點亮LED。
freemem = GetFreeMem() if(freemem > 100): PublishToDisplay(str(freemem) + "M","mem","23555") LedOff() else: PublishToDisplay(str(freemem) + "M","mem","61455") LedOn() freedisk = GetFreeDisk() if(freedisk > 500): PublishToDisplay(str(freedisk) + "M","disk","23555") LedOff() else: PublishToDisplay(str(freedisk) + "M","disk","61455") LedOn() if(freemem > 100 and freedisk > 500): LedOff() else: LedOn()
▲ 低內存警報
運行起來從Github下載pimonitor.py。安裝PIP,如果沒有:
sudo apt-get install python-pip
安裝psutil
sudo pip install psutil
或者用python3:
sudo pip3 install psutil
運行使用
python PiMonitor.py 192.168.11.116 1
192.168.11.116是Nanomesher HMI的IP地址(顯示在屏幕上),最后的1是指要更新顯示中的哪一行,因此不同的PI將更新不同的行(1-4)。打完收工,希望你喜歡這個項目。
-
led
+關注
關注
242文章
23252瀏覽量
660592 -
數據庫
+關注
關注
7文章
3794瀏覽量
64362 -
樹莓派
+關注
關注
116文章
1706瀏覽量
105610
原文標題:同時監測一堆樹莓派是怎么樣的體驗?
文章出處:【微信號:cirmall,微信公眾號:電路設計技能】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論