我们有一堆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
+关注
关注
240文章
23025浏览量
656160 -
数据库
+关注
关注
7文章
3750浏览量
64206 -
树莓派
+关注
关注
116文章
1684浏览量
105433
原文标题:同时监测一堆树莓派是怎么样的体验?
文章出处:【微信号:cirmall,微信公众号:电路设计技能】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论