场景

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

准备

物料准备

  • 树莓派
  • 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

SELECT deviceName() deviceName, photo FROM "/a1O4b4XcICc/+/user/test"

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

接着,配置数据转发,把数据转发到FC函数计算中。分别选择在1.3步骤中创建好的服务和函数。
![数据转发配置](
https://iot-demo-hs.oss-cn-hangzhou.aliyuncs.com/article/20181114092559.png)

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 -*-import logging
import json
import requestsdef post(data):webhook_url='https://oapi.dingtalk.com/robot/send?access_token=${Token}' #钉钉群机器人的webhook的URLheaders = {'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('Send success')except requests.exceptions.HTTPError as exc:logging.error("Send Error,HTTP error: %d, reason: %s" % (exc.response.status_code, exc.response.reason))raiseexcept requests.exceptions.ConnectionError:logging.error("Send Error,HTTP connection error!")raiseelse:result = response.json()logging.info('Send Error:%s' % result)if result['errcode']:error_data = {"msgtype": "text", "text": {"content": "Send Error, reason:%s" % result['errmsg']}, "at": {"isAtAll": True}}logging.error("Send Error:%s" % error_data)requests.post(webhook_url, headers=headers, data=json.dumps(error_data))return resultdef post_makedown(title,text):data = {"msgtype": "markdown","markdown": {"title": title,"text": text},"at": {"atMobiles": [],"isAtAll": False}}post(data)def handler(event, context):logger = logging.getLogger()evt = json.loads(event)#OSS endpoint urlpost_makedown('告警','![screenshot](https://${bucket}.oss-cn-hangzhou.aliyuncs.com/photo/%s)' % evt.get('photo',''))logger.info('photo name is %s', evt.get('photo',''))return 'OK'

2 设备端开发

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

2.1 硬件安装

  1. 连接好摄像头
  2. 将HC-SR501 人体红外感应器的vcc引脚接5v,也就是pin4,I/O引脚接pin18,GND引脚接地pin6

2.2 环境准备

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

1. pip install aliyun-python-sdk-iot-client
2. pip install oss2
3. mkdir py-demo (项目程序文件夹)
4. cd py-demo
5. mkdir photo (本地照片临时目录)
6. vim monitor.py

2.3 代码开发

monitor.py 内容如下:

# -*- coding: utf-8 -*-import json
import uuid
import logging
from time import sleep
from picamera import PiCamera
import RPi.GPIO as GPIO
import oss2
import aliyunsdkiotclient.AliyunIotMqttClient as iot# 参数定义
options = {'productKey': '${productKey}',  # 设备标识三元组'deviceName': '${deviceName}',  # 设备标识三元组'deviceSecret': '${deviceSecret}',  # 设备标识三元组'port': 1883,  # iot mqtt port'host': 'iot-as-mqtt.cn-shanghai.aliyuncs.com',  # iot mqtt endpoint'endpoint': 'http://oss-cn-hangzhou.aliyuncs.com',  # oss endpoint'ak': '${ak}','sk': '${sk}','bucket': '${bucket}',  # oss bucket'ir_pin': 24  # 人体红外感应器设置读取针脚标号
}topic = '/' + options['productKey'] + '/' + options['deviceName'] + '/user/test'# 拍照存oss,并发送通知
def takephoto2oss(client):#拍照photo_filename = str(uuid.uuid1()) + ".jpg"print('take photo :' + photo_filename)camera.capture('photo/' + photo_filename)#存OSSprint('save photo to oss :' + photo_filename)bucket.put_object_from_file('photo/' + photo_filename, 'photo/' + photo_filename)#消息上送payload_json = {'photo': photo_filename}print('send data to iot server: ' + str(payload_json))client.publish(topic, payload = str(payload_json))def on_connect(client, userdata, flags_dict, rc):print("Connected with result code " + str(rc))def on_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 = Truecamera.hflip = True# OSS 初始化auth = oss2.Auth(options['ak'], options['sk'])bucket = oss2.Bucket(auth, options['endpoint'], options['bucket'])# IOT Mqtt 初始化client = iot.getAliyunIotMqttClient(options['productKey'], options['deviceName'], options['deviceSecret'], secure_mode = 3)client.on_connect = on_connectclient.connect(host=options['productKey'] + '.' + options['host'], port=options['port'], keepalive = 60)while True:# 当高电平信号输入时报警if GPIO.input(options['ir_pin']) == True:print " Someone is coming!"takephoto2oss(client)else:continuesleep(3)

循环判断

3 测试运行

3.1 设备端运行

在py-demo文件夹下运行

python monitor.py

3.2 云端查看上送消息

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

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

高级版的产品,还提供了消息日志,而本例中的产品是基础版,并无此功能。

3.3 钉钉群机器人结果

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

总结

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

原文链接
本文为云栖社区原创内容,未经允许不得转载。

基于阿里云物联网平台实现的简易出入监控 1相关推荐

  1. 基于阿里云物联网平台实现的简易出入监控

    本文通过一个简单实例,主要介绍了如何使用树莓派快速接入阿里云iot platform,并实现了一个简易的监控人员出入并拍照上送钉钉群的场景 场景 在公司大门入口处布点树莓派和红外感应,实现出入口人员出 ...

  2. 基于阿里云物联网平台的设备之间传输十六进制数据

    基于阿里云物联网平台的设备之间传输十六进制数据 文章目录 基于阿里云物联网平台的设备之间传输十六进制数据 1. 创建阿里云物联网产品 1.1 创建新的产品 1.2 为产品创建自定义topic 1.3 ...

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

    本文通过一个简单实例,主要介绍了如何使用树莓派快速接入阿里云iot platform,并实现了一个简易的监控人员出入并拍照上送钉钉群的场景 场景 在公司大门入口处布点树莓派和红外感应,实现出入口人员出 ...

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

    本文通过一个简单实例,主要介绍了如何使用树莓派快速接入阿里云iot platform,并实现了一个简易的监控人员出入并拍照上送钉钉群的场景 场景 在公司大门入口处布点树莓派和红外感应,实现出入口人员出 ...

  5. 基于阿里云物联网平台,用20元体验物联网开发( 自制 Arduino 环境监测仪)——实践类

       硬件准备  今天我们在只有20元预算前提下,带领大家完成一次IoT物联网开发之旅! 感谢万能的淘宝,让我们能采购到esp8266开发板,dht11温湿度传感器:   架构方案 我们通过DHT11 ...

  6. 物联网平台搭建的全过程介绍(五)——基于阿里云物联网平台的Android聊天app源码

    本例程Android源码请点此处免费下载 物联网平台搭建的全过程介绍(四)两台设备之间通过云数据流转实现远程通信之Android studio例程中介绍了两台Android设备通过物联网平台进行通信的 ...

  7. 基于阿里云物联网平台的Android物联网软件框架(快速开发)

    Android 物联网APP 提示:该工程是连接阿里云物联网平台的模板代码,将MQTT连接.JSON数据的订阅发布等操作封装,并且能够迅速将获取到的数据显示到手机界面上.使用了Servier进行网络连 ...

  8. 基于阿里云物联网平台MQTT协议实现云端和mqttfx通讯

    本项目的目的,借助阿里云物联网平台实现ESP8266(IDE:Arduino)与小程序(作为客户端)的互相通信,并通过小程序控制以及获取esp8266上的灯状态. 准备材料以及要使用的IDE 阿里云账 ...

  9. 使用eclipse实现阿里云物联网平台数字签名(Signature)(附源代码)

    摘要:要实现对基于阿里云物联网平台的设备的控制,就需要调用阿里云的API.这些API不会让我们随意调用,而是有相当严格的审核机制,确保数据的安全.这种机制就是"签名机制",我们每调 ...

最新文章

  1. 【kissfft】使用kiss_fft做FFT与iFFT
  2. 【opencv】5.cv::findContours和cv::drawContours()
  3. [Swift算法]巴比伦法(牛顿迭代法)求平方根
  4. java微博开发_【新手入门篇】新浪微博应用开发之Java入门篇
  5. 中国人终于开始排队了
  6. 互联网大佬为什么爱唱歌?
  7. 开发Google Material Design风格的WPF程序
  8. 遍历josn的三种方式
  9. 结尾匹配_2.nginx的server_name匹配顺序
  10. Android pdfviewer的公章注释问题
  11. 项目验收文档模板(一)
  12. win10 打开ssr软件出现系统调用失败
  13. SAP MTS/ATO/MTO/ETO专题之一:常用计划策略(需求类)
  14. outlook分组邮件提醒
  15. ThinkPHP6 缩略图上传
  16. KEIL工程文件打不开
  17. sign-file: certs/signing_key.pem: 解决方法
  18. 什么是UN38.3认证_UN38.3测试标准
  19. 激战2电信服务器哪个最多,玩家浅谈 激战2电信一区服务器派系之争
  20. 升级到AndroidX,遇到appComponentFactory 错误

热门文章

  1. 有向无环图的最短路径求解算法
  2. 儿童台灯怎么选对眼睛好?精选被央视315表扬的护眼灯
  3. Java集合遍历总结
  4. js 重定向,错误处理,常用包
  5. Flutter 学习 - Widget 之 对话框
  6. 像素位移_磁共振伪影知多少——化学位移伪影
  7. 求 top k有哪些方法
  8. 云上MongoDB常见索引问题及最优索引规则大全
  9. 我的2012 — 毕业半年,金融5个月
  10. 什么牌子蓝牙耳机最好?音质最好的真无线蓝牙耳机推荐