查看: 1565|回复: 3

[项目] 使用无线HMI监测树莓派服务器群组

[复制链接]

主题

好友

1449

积分

进士

  • TA的每日心情

    2019-1-9 11:00
  • 签到天数: 12 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2019-3-6 17:42:46 |显示全部楼层
    1.jpg

    项目中所使用的东西
    硬件部分
    Nanomesher无线人机界面 x1
    软件和在线服务
    Nextion Editor

    源代码这里哟▼
    游客,如果您要查看本帖隐藏内容请回复


    介绍
    我们有一堆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地址。
    2.jpg

    ▲ 用Nextion Editor做的用户界面

    获取CPU温度
    最简单方法是使用下面的命令。
    1. /opt/vc/bin/vcgencmd measure_temp
    复制代码
    python提供了open命令来运行linux命令并返回结果。添加了一些字符串把输出格式替换成我们需要的格式。
    1. def GetTemp():
    2.     cmd = "/opt/vc/bin/vcgencmd measure_temp | sed -s 's/=/:/g'"
    3.     p = Popen(cmd, shell=True, stdout=PIPE)
    4.     output = p.communicate()[0]
    5.     return output.replace('\n','').replace('temp:','Temp:').replace("'C","c")
    复制代码


    获取内存、CPU利用率和可用磁盘空间
    使用psutil python库会非常容易解决这个问题。

    安装:
    1. sudo pip install psutil
    复制代码
    或者使用python3:
    1. sudo pip3 install psutil
    复制代码


    virtual_memory() 用作返回以字节为单位的值。因此,我们需要除以1024两次才能得到兆字节值。
    1. def GetFreeMem():
    2.     return str(psutil.virtual_memory().free/1024/1024) + "M"
    复制代码
    CPU和空闲磁盘空间相当直接
    1. def GetCpuPercent():
    2.     return str(psutil.cpu_percent()) + "%"
    3. def GetFreeDisk():
    4.    return str(psutil.disk_usage('/home/pi').free/1024/1024) + "M"
    复制代码


    IP地址
    最后,从eth0或wlan0接口获取IP地址。
    1. def GetLANIP():
    2.   cmd = "ip addr show eth0 | grep inet  | grep -v inet6 | awk '{print $2}' | cut -d '/' -f 1"
    3.   p = Popen(cmd, shell=True, stdout=PIPE)
    4.   output = p.communicate()[0]
    5.   return output

    6. def GetWLANIP():
    7.   cmd = "ip addr show wlan0 | grep inet  | grep -v inet6 | awk '{print $2}' | cut -d '/' -f 1"
    8.   p = Popen(cmd, shell=True, stdout=PIPE)
    9.   output = p.communicate()[0]
    10.   return output
    复制代码


    更新Nanomesher HMI数据
    下面使用简单的HTTPGET请求在显示屏上设置值和颜色。
    • ‘p’ - 页码
    • ‘n’ - UI组件的名字
    • ‘v’ - 文本集
    • ‘fc’ - 前景色(16位)
    1. def PublishToDisplay(text,label_prefix):
    2.    try:
    3.      data = {}
    4.      data['p'] = '0'
    5.      data['n'] = label_prefix + sys.argv[2]
    6.      data['v'] = text
    7.      data['fc'] = '23555'
    8.      url_values = urllib.urlencode(data)
    9.      url = "http://" + sys.argv[1] + "/TextSetText?" + url_values
    10.      response = urllib2.urlopen(url)
    11.      html = response.read()
    12.    except:
    13.      pass
    复制代码
    ['n']表示作为命令行参数传入的组件名称。行数取决于如何设计屏幕布局。在本例中,有4行分别命名为line1、line2、line3和line4。



    警告
    我们认为给出PI健康问题(如内存或磁盘空间不足)的视觉指示是有用的,因此我们在下面添加了此类检查,以红色显示信息并点亮LED。
    1. freemem = GetFreeMem()
    2.    if(freemem > 100):
    3.       PublishToDisplay(str(freemem) + "M","mem","23555")
    4.       LedOff()
    5.    else:
    6.       PublishToDisplay(str(freemem) + "M","mem","61455")
    7.       LedOn()
    8.    freedisk = GetFreeDisk()
    9.    if(freedisk > 500):
    10.       PublishToDisplay(str(freedisk) + "M","disk","23555")
    11.       LedOff()
    12.    else:
    13.       PublishToDisplay(str(freedisk) + "M","disk","61455")
    14.       LedOn()
    15.    if(freemem > 100 and freedisk > 500):
    16.       LedOff()
    17.    else:
    18.       LedOn()
    复制代码


    3.jpg

    ▲ 低内存警报

    运行起来从Github下载pimonitor.py。安装PIP,如果没有:
    1. sudo apt-get install python-pip
    复制代码
    安装psutil
    1. sudo pip install psutil
    复制代码
    或者用python3:
    1. sudo pip3 install psutil
    复制代码
    运行使用
    1. python PiMonitor.py 192.168.11.116 1
    复制代码
    192.168.11.116是Nanomesher HMI的IP地址(显示在屏幕上),最后的1是指要更新显示中的哪一行,因此不同的PI将更新不同的行(1-4)。

    打完收工,希望你喜欢这个项目。

    作者/Nanomesher
    编译/风之物语
    原文来自hackster

    相关活动
    征集!你有HMI项目经验吗?板卡白送外加kindle奖励
    334x67.jpg


    回复

    使用道具 举报

    主题

    好友

    54

    积分

    童生

    该用户从未签到

    发表于 2019-3-7 09:09:55 |显示全部楼层
    这个应用挺不错,
    回复

    使用道具 举报

    主题

    好友

    758

    积分

    举人

  • TA的每日心情
    慵懒
    2013-8-12 17:47
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2019-3-8 13:05:00 |显示全部楼层
    用modbus tcp,应该现在工业上的hmi很多都支持
    回复

    使用道具 举报

    主题

    好友

    677

    积分

    举人

  • TA的每日心情
    奋斗
    2019-5-31 17:53
  • 签到天数: 64 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2019-3-23 13:01:21 |显示全部楼层
    用modbus tcp,应该现在工业上的hmi很多都支持
    用modbus tcp,应该现在工业上的hmi很多都支持
    用modbus tcp,应该现在工业上的hmi很多都支持
    用modbus tcp,应该现在工业上的hmi很多都支持
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /4 下一条

    手机版|电路城

    GMT+8, 2019-7-23 17:24 , Processed in 0.137962 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz!

    返回顶部