抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > 阿里云物联网平台python_基于阿里云物联网平台 我们这样实现简易出入监控

阿里云物联网平台python_基于阿里云物联网平台 我们这样实现简易出入监控

时间:2019-03-17 06:30:05

相关推荐

本文通过一个简单实例,主要介绍了如何使用树莓派快速接入阿里云iot platform,并实现了一个简易的监控人员出入并拍照上送钉钉群的场景

场景

在公司大门入口处布点树莓派和红外感应,实现出入口人员出入时,自动拍照并上送钉钉群机器人

准备

物料准备

树莓派

HC-SR501 人体红外感应器

树莓派摄像头

母对母杜邦线三根

阿里云环境准备

物联网平台

对象存储OSS

函数计算

日志服务(可选)

操作步骤

1 云端开发

1.1 物联网平台

登录阿里云控制台,进入物联网平台控制面板

1.1.1 新建产品

进入设备管理,创建产品,选择基础版或高级版都可以,本实例使用

基础版

就可以满足基本要求。

系统会自动创建3个Topic,我们需要使用

/ProductName/${deviceName}/update

,作为设备告警消息的上送的Topic。

1.1.2 设备管理

在产品中新增设备,并获得设备的3元组,在2.3节的设备代码的编写时需要使用此3元组。

设备三元组是设备的唯一标示

1.1.3 新建规则引擎

设置规则引擎的意义在于,可以将设备上送的消息数据,通过配置转发规则将处理后的数据转发到阿里云其他服务,例如RDS、TBS和函数计算等等。我们需要注意的是从设备端到规则引擎处理后的JSON数据格式的变化,下图中是基础版的演变过程:

我们在设备端消息上送定义的JSON的格式是:

{'photo':'xxxxxxx.jpg'}

新创建一个规则,数据格式选择JSON。编写处理数据的SQL

SELECTdeviceName()deviceName,photoFROM"/a1O4b4XcICc/+/update"

配置完成后,我们可以模拟调试一下,检查规则是否正确:

接着,配置数据转发,把数据转发到FC函数计算中。分别选择在1.3步骤中创建好的服务和函数。

1.2 对象存储

由于设备端拍摄的照片需要在钉钉中展示,因此把照片存储在OSS上是一个解决方案。

1.2.1 新建bucket

新建一个bucket用于存储设备上送的照片。读写权限选择

公共读

然后在bucket中创建photo目录。

1.3 函数计算

经过物联网平台规则引擎转发过来的JSON数据,我们通过建立函数,把它转发到钉钉机器人接口上,实现钉钉群中的消息通知

1.3.1 新建服务

新创建服务,如果需要记录和回溯函数执行的日志,则需要开通日志服务,配置日志仓库。

1.3.2 新建函数

使用空白模版新建函数,不需要触发器,运行环境选择

python2.7

1.3.3 函数代码

#-*-coding:utf-8-*-importloggingimportjsonimportrequests#钉钉消息发送实现defpost(data):

webhook_url='/robot/send?access_token=${Token}'#钉钉群机器人的webhook的URL

headers={'Content-Type':'application/json;charset=utf-8'}

post_data=json.dumps(data)try:

response=requests.post(webhook_url,headers=headers,data=post_data)

logging.info('Sendsuccess')exceptrequests.exceptions.HTTPErrorasexc:

logging.error("SendError,HTTPerror:%d,reason:%s"%(exc.response.status_code,exc.response.reason))raise

exceptrequests.exceptions.ConnectionError:

logging.error("SendError,HTTPconnectionerror!")raise

else:

result=response.json()

logging.info('SendError:%s'%result)ifresult['errcode']:

error_data={"msgtype":"text","text":{"content":"SendError,reason:%s"%result['errmsg']},"at":{"isAtAll":True}}

logging.error("SendError:%s"%error_data)

requests.post(webhook_url,headers=headers,data=json.dumps(error_data))returnresult#发送钉钉markdown消息defpost_markdown(title,text):

data={"msgtype":"markdown","markdown":{"title":title,"text":text

},"at":{"atMobiles":[],"isAtAll":False

}

}

post(data)#函数计算入口defhandler(event,context):

logger=logging.getLogger()

evt=json.loads(event)#OSSendpointurl

post_markdown('告警','![screenshot](https://${bucket}.oss-cn-/photo/%s)'%evt.get('photo',''))

logger.info('photonameis%s',evt.get('photo',''))return'OK'

2 设备端开发

HC-SR501模块感应到有人移动时,会输出高电平,则触发摄像头拍照,并将照片文件存储到OSS,同时发送消息到IOT平台的

/ProductName/${deviceName}/update

消息队列中

2.1 硬件安装

连接好摄像头

将HC-SR501 人体红外感应器的vcc引脚接5v,也就是pin4,I/O引脚接pin18,GND引脚接地pin6

2.2 环境准备

我们在树莓派上使用python2.7作为开发语言。

1.pipinstallaliyun-python-sdk-iot-client2.pipinstalloss23.mkdirpy-demo(项目程序文件夹)4.cdpy-demo5.mkdirphoto(本地照片临时目录)6.vimmonitor.py

2.3 代码开发

monitor.py 内容如下:

#-*-coding:utf-8-*-importjsonimportuuidimportloggingfromtimeimportsleepfrompicameraimportPiCameraimportRPi.GPIOasGPIOimportoss2importaliyunsdkiotclient.AliyunIotMqttClientasiot#参数定义options={'productKey':'${productKey}',#设备标识三元组

'deviceName':'${deviceName}',#设备标识三元组

'deviceSecret':'${deviceSecret}',#设备标识三元组

'port':1883,#iotmqttport

'host':'iot-as--',#iotmqttendpoint

'endpoint':'http://oss-cn-',#ossendpoint

'ak':'${ak}','sk':'${sk}','bucket':'${bucket}',#ossbucket

'ir_pin':24#人体红外感应器设置读取针脚标号}

topic='/'+options['productKey']+'/'+options['deviceName']+'/user/test'#拍照存oss,并发送通知deftakephoto2oss(client):

#拍照

photo_filename=str(uuid.uuid1())+".jpg"

print('takephoto:'+photo_filename)

camera.capture('photo/'+photo_filename)#存OSS

print('savephototooss:'+photo_filename)

bucket.put_object_from_file('photo/'+photo_filename,'photo/'+photo_filename)#消息上送

payload_json={'photo':photo_filename

}

print('senddatatoiotserver:'+str(payload_json))

client.publish(topic,payload=str(payload_json))defon_connect(client,userdata,flags_dict,rc):

print("Connectedwithresultcode"+str(rc))defon_disconnect(client,userdata,flags_dict,rc):

print("Disconnected.")if__name__=='__main__':#GPIO初始化

GPIO.setmode(GPIO.BCM)

GPIO.setwarnings(False)

GPIO.setup(options['ir_pin'],GPIO.IN)#摄像头初始化

camera=PiCamera()

camera.resolution=(640,480)

camera.vflip=True

camera.hflip=True

#OSS初始化

auth=oss2.Auth(options['ak'],options['sk'])

bucket=oss2.Bucket(auth,options['endpoint'],options['bucket'])#IOTMqtt初始化

client=iot.getAliyunIotMqttClient(options['productKey'],options['deviceName'],options['deviceSecret'],secure_mode=3)

client.on_connect=on_connect

client.connect(host=options['productKey']+'.'+options['host'],port=options['port'],keepalive=60)whileTrue:#当高电平信号输入时报警

ifGPIO.input(options['ir_pin'])==True:print"Someoneiscoming!"

takephoto2oss(client)else:continue

sleep(3)

3 测试运行

3.1 设备端运行

在py-demo文件夹下运行

pythonmonitor.py

3.2 云端查看上送消息

进入设备界面,观察设备状态

在设备的Topic列表中,也可以看到发布的消息个数

高级版

的产品,还提供了消息日志,而本例中的产品是

基础版

,并无此功能。

3.3 钉钉群机器人结果

当有人出入门口的时候,钉钉群就可以收到机器人的消息推送

3.4 后续完善

如果大家有兴趣,还可以进一步结合阿里云的人脸识别服务,再配合继电器,实现人员考勤和出入门禁的功能

总结

通过阿里云物联网平台,结合阿里云提供的其他产品和服务,使用者可以快速地构建一套基于云边端一体的IOT产品,开发者只需关注业务层面的开发,而不用再花太多的精力在底层和通讯上,大大减少了开发周期,实现了产品的快速研发和迭代,节约了开发成本。

如果觉得《阿里云物联网平台python_基于阿里云物联网平台 我们这样实现简易出入监控》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。