使用中国移动ONENET平台实现树莓派信息自动上报 - 简书 - 图1

0.0962018.07.25 09:31:25字数 706阅读 3,281

updated 2019/7/15 前两天onenet做了升级,API未向前兼容,重新写了脚本。同时之前的ip138获取公网IP的功能因对方屏蔽,更换为sohu

最近领导安排我参加重庆物联网项目,为了熟悉情况,业余时间做了一个简单的“物联网”设备信息管理功能。

大致的流程是:树莓派上Python脚本用crontab每隔5分钟采集一次CPU信息和内存信息,并通过onenet的数据上报接口上报到onenet平台,再在onenet平台配置触发器,目前配置的是CPU使用率超过50%则发送一封告警邮件。

onenet平台目前是免费的,注册开发者账号后还需要做的事情包括:注册一个产品,注册好产品后平台会分配一个API-KEY。然后在这个产品下注册一个设备,注册好设备后平台会分配一个设备ID。这样就可以进行信息上报了。

树莓派部分:首先需要写一个Python脚本,脚本做2件事情,1是采集CPU和内存的信息,2是将这些信息通过接口上报到onenet平台。

脚本如下:

  1. import urllib
  2. import psutil
  3. import requests
  4. import socket
  5. import re
  6. '''
  7. 采集树莓派cpu和内存信息上报到ONENET设备管理平台(HTTP)
  8. '''
  9. def get_memory_info():
  10. memory_info = {}
  11. mem = psutil.virtual_memory()
  12. memory_info['mem_total'] = round(float(mem.total) / 1000000000, 3)
  13. memory_info['mem_free'] = round(float(mem.free) / 1000000000, 3)
  14. memory_info['mem_usage_percent'] = int(round(mem.percent))
  15. return memory_info
  16. def get_cpu_usage_percent():
  17. cpu_usage_percent = psutil.cpu_percent(interval=1)
  18. return cpu_usage_percent
  19. def get_intranet_ip():
  20. try:
  21. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  22. s.connect(('8.8.8.8', 80))
  23. ip = s.getsockname()[0]
  24. finally:
  25. s.close()
  26. return ip
  27. def get_internet_ip():
  28. url = urllib.request.urlopen("http://txt.go.sohu.com/ip/soip")
  29. text = url.read()
  30. ip = re.findall(r'\d+.\d+.\d+.\d+', text.decode("UTF-8"))
  31. return ip[0]
  32. def send_to_iot_platform(memory_info):
  33. url = "http://api.heclouds.com/devices/25700221/datapoints"
  34. params = {
  35. "datastreams": [
  36. {
  37. "id": "pi_info",
  38. "datapoints": [
  39. {
  40. "at": "",
  41. "value": {
  42. "CPUUsage": get_cpu_usage_percent(),
  43. "IntranetIP": get_intranet_ip(),
  44. "InternetIP": get_internet_ip(),
  45. "MemoryFree": memory_info['mem_free'],
  46. "MemoryTotal": memory_info['mem_total'],
  47. "MemoryUsage": memory_info['mem_usage_percent']
  48. }
  49. }
  50. ]
  51. }
  52. ]
  53. }
  54. headers = {
  55. "api-key": "这里填写分配的api-key",
  56. "Content-type": "application/json"
  57. }
  58. response = requests.post(url, json=params, headers=headers)
  59. return response.text
  60. def main():
  61. memory_info = get_memory_info()
  62. print('Memory Total(G):', memory_info['mem_total'])
  63. print('Memory Free(G):', memory_info['mem_free'])
  64. print('Memory Usage Percent(%):', memory_info['mem_usage_percent'])
  65. print('CPU Usage Percent(%):', get_cpu_usage_percent())
  66. print('Intranet IP:', get_intranet_ip())
  67. print('Internet IP:', get_internet_ip())
  68. print("onenet resp:", send_to_iot_platform(memory_info))
  69. if __name__ == "__main__":
  70. main()

脚本写好后,再在crontab中配置,每5分钟上报一次:

  1. */5 * * * * python /home/pi/Documents/memcpu.py >> /var/log/mycron.log

全部搞定后就可以在onenet平台上查询到上报的信息了:

使用中国移动ONENET平台实现树莓派信息自动上报 - 简书 - 图2

1.png

使用中国移动ONENET平台实现树莓派信息自动上报 - 简书 - 图3

2.png

最后,再配置一个触发器,CPU使用率超过10%时发送邮件告警。

使用中国移动ONENET平台实现树莓派信息自动上报 - 简书 - 图4

3.png

好了,试一下是否可以正常通过触发器来发送邮件吧。

首先写一个死循环让CPU飙高一点。

果然收到邮件:

使用中国移动ONENET平台实现树莓派信息自动上报 - 简书 - 图5

4.png

也可以通过onenet的图标看出这段时间内CPU飙升的情况:

使用中国移动ONENET平台实现树莓派信息自动上报 - 简书 - 图6

5.png

目前场景比较简单,主要上报的指标有:CPU使用率,内存使用率,内存大小,内存空闲大小,内网IP,公网IP。目前其实就内网IP这个有用一点,在DHCP环境下经常无法快速知道给PI分配了哪个IP。

复杂一点么可以做个机房温度传感器,买个树莓派的温度传感器,然后同样用python将机房温度上报给onenet平台,当温度超过某个指标后自动告警。

onenet也支持开发web或者wap应用,用于展现数据。也提供了一个快速开发模板,因此也做了一个简单的H5 APP:

链接 点击这里

样例如下:

使用中国移动ONENET平台实现树莓派信息自动上报 - 简书 - 图7

6.png

最后来个树莓派3在安静地工作中的图 XD

使用中国移动ONENET平台实现树莓派信息自动上报 - 简书 - 图8

7.jpg

“小礼物走一走,来简书关注我”

还没有人赞赏,支持一下

使用中国移动ONENET平台实现树莓派信息自动上报 - 简书 - 图9

总资产3 (约0.25元)共写了2.1W字获得16个赞共6个粉丝

被以下专题收入,发现更多相似内容

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 …
    使用中国移动ONENET平台实现树莓派信息自动上报 - 简书 - 图10庭说阅读 3,746评论 4赞 7

  • 本文遵循「知识共享许可协议 CC-BY-NC-SA 4.0 International」,未经作者(laiwei)…
    使用中国移动ONENET平台实现树莓派信息自动上报 - 简书 - 图11

  • 树莓派3自带了WiFi,所以一般买来之后插上电配置好WiFi就扔在一个地方不用管了.但是在有些地方获取树莓派的IP…
    使用中国移动ONENET平台实现树莓派信息自动上报 - 简书 - 图12魏太恒阅读 5,023评论 15赞 25

  • 很久没有码字,一是因为之前工作太忙,不太挤的出时间;二是我理解的某种成熟,是人越来越冷静和理性,对人对事不过多的去…
    使用中国移动ONENET平台实现树莓派信息自动上报 - 简书 - 图13

  • 故事中有自己的故事,脱离电影,画中画,像是真实存在那样。 每个场景的转变都莫名其妙,咦,怎么会转到这里来,画风突变…
    使用中国移动ONENET平台实现树莓派信息自动上报 - 简书 - 图14月清辉阅读 158评论 0赞 1
    使用中国移动ONENET平台实现树莓派信息自动上报 - 简书 - 图15