使用中国移动ONENET平台实现树莓派信息自动上报

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平台。

脚本如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import urllib
import psutil
import requests
import socket
import re

'''
    采集树莓派cpu和内存信息上报到ONENET设备管理平台(HTTP)
'''


# 获取内存信息
def get_memory_info():
    memory_info = {}
    mem = psutil.virtual_memory()
    memory_info['mem_total'] = round(float(mem.total) / 1000000000, 3)
    memory_info['mem_free'] = round(float(mem.free) / 1000000000, 3)
    memory_info['mem_usage_percent'] = int(round(mem.percent))
    return memory_info


# 获取CPU信息
def get_cpu_usage_percent():
    cpu_usage_percent = psutil.cpu_percent(interval=1)
    return cpu_usage_percent


# 获取内网IP
def get_intranet_ip():
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()
    return ip


# 获取公网IP
def get_internet_ip():
    url = urllib.request.urlopen("http://txt.go.sohu.com/ip/soip")
    text = url.read()
    ip = re.findall(r'\d+.\d+.\d+.\d+', text.decode("UTF-8"))
    return ip[0]


def send_to_iot_platform(memory_info):
    # 信息上报到'ONENET'平台
    url = "http://api.heclouds.com/devices/25700221/datapoints"
    params = {
        "datastreams": [
            {
                "id": "pi_info",
                "datapoints": [
                    {
                        "at": "",
                        "value": {
                            "CPUUsage": get_cpu_usage_percent(),
                            "IntranetIP": get_intranet_ip(),
                            "InternetIP": get_internet_ip(),
                            "MemoryFree": memory_info['mem_free'],
                            "MemoryTotal": memory_info['mem_total'],
                            "MemoryUsage": memory_info['mem_usage_percent']
                        }
                    }
                ]
            }
        ]
    }
    headers = {
        "api-key": "这里填写分配的api-key",
        "Content-type": "application/json"
    }
    response = requests.post(url, json=params, headers=headers)
    return response.text


def main():
    memory_info = get_memory_info()
    print('Memory Total(G):', memory_info['mem_total'])
    print('Memory Free(G):', memory_info['mem_free'])
    print('Memory Usage Percent(%):', memory_info['mem_usage_percent'])
    print('CPU Usage Percent(%):', get_cpu_usage_percent())
    print('Intranet IP:', get_intranet_ip())
    print('Internet IP:', get_internet_ip())
    print("onenet resp:", send_to_iot_platform(memory_info))


if __name__ == "__main__":
    main()

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

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

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


1.png
2.png

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

3.png

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

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

while True:
            print("123")

果然收到邮件:


4.png

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

5.png

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

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

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

链接 点击这里

样例如下:

6.png

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

7.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,454评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,553评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,921评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,648评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,770评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,950评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,090评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,817评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,275评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,592评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,724评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,409评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,052评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,815评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,043评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,503评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,627评论 2 350

推荐阅读更多精彩内容