本文以一个典型的过程控制场景为例,描述如何使用边缘函数计算实现较复杂的本地过程控制。

前提条件

  • 本示例仅适用于Link IoT Edge专业版,请您确保已完成边缘实例的创建。详细操作,请参见专业版环境搭建
  • 已创建光照度传感器、客厅灯产品以及该两个产品下的LightSensor、Light设备,并将设备分配至边缘实例。详细操作,请参见示例驱动
  • 此场景需要本地数据库存储助手,将传感器上报的数据存储到网关的本地数据库中,因此请提前完成本地数据库存储助手内容。

背景信息

在家居、石油、电力等传统物联网场景中,现场的各类传感器负责实时采集数据,通过3G、4G、有线宽带等数据链路,将数据传输至远端数据中心服务器。远端数据中心服务器进行数据格式转换、处理、分析和运算。处理的结果及生成的控制指令再通过公网传输至现场仪表层,实现过程控制。在生产中也会需要将传感器的历史数据结合行业内部的算法模型(如线性回归、Isolation Forest等),分析和判断现场状态,进而控制其他设备的行为。针对此类场景,您可以使用物联网边缘计算提供的边缘函数计算,实现本地过程控制。

物联网边缘计算,致力于构建近端边缘层与云端计算层协同处理的新模式。对于自动化领域来说,近端边缘层可以对传感器数据进行处理或纠正,对传感器的故障进行预判断、预处理,完成对现场的控制和故障诊断,同时将经过修正的数据实时上传到云端进行计算,完成一个立体分层式的数据处理过程。

本文中以LightSensor传感器和Light设备为例,获取LightSensor传感器在5分钟内上报的所有数据(历史数据),当其平均值超过某阈值时,关闭Light设备。

步骤一:创建过程控制函数

  1. 下载本地过程控制函数querySqliteDB-code.zip
  2. 登录函数计算控制台
    如尚未开通该服务,请阅读并选中我已阅读并同意,单击立即开通,开通服务。
  3. (可选)在左侧导航栏单击服务及函数,在服务及函数页面服务列表区域,单击新增服务,创建一个服务。
    其中,服务名称必须填写,此处设置为EdgeFC,其余参数可根据您的需求设置,也可以不设置。
    说明
    • 若您首次在函数计算中创建服务,请根据配置向导配置参数。
    • 若已操作过其他应用场景示例或小程序示例,即已创建EdgeFC服务,则无需重复创建。
  4. 创建服务成功后,在服务及函数页面的EdgeFC区域,单击新增函数
  5. 新建函数页面,单击事件函数区域中的配置部署
  6. 设置过程控制函数的基础管理配置参数。
    参数 描述
    函数类型 保持默认选项。
    所在服务 选择已创建的EdgeFC服务。
    函数名称 设置为querySqliteDB
    运行环境 设置函数的运行环境并选择上传代码的方式。此示例中选择Python 3

    上传代码右侧选择上传代码包,单击上传代码,上传步骤1中下载的querySqliteDB-code.zip代码包。

    函数入口 使用默认值index.handler

    其余参数的值请根据您的实际需求设置,也可以不设置。更多信息,请参见函数计算

    确认函数信息后,单击新建完成操作。

  7. 创建函数完成后,系统自动跳转到函数详情页面。您可在代码执行页签的代码执行管理区域下,选中在线编辑单选框,查看源码。
    在线编辑
    说明 querySqliteDB样例代码逻辑分为三步。
    1. 从收到的设备上报数据(event参数)中解析出productKey和deviceName,组成数据库的表名。
      edict = json.loads(event)
      topic = edict['topic']
      tlist = topic.split('/')
      if tlist[1] == 'sys':
        productKey = tlist[2]
        deviceName = tlist[3]
        tableName = productKey+'_'+deviceName
        print("-- Table Name : "+tableName)
    2. 获取LightSensor传感器在5分钟内上报的所有数据,并求其平均值。
      cursor.execute("SELECT avg(VALUE) FROM {} WHERE KEY = ? AND TIMESTAMP >= datetime('now','-5 minutes','localtime')".format(tableName), [key])
      avg_value = cursor.fetchone()[0]
    3. 当LightSensor传感器上报的数据平均值大于某阈值(此处为240光照度)时,关闭Light设备。
      if avg_value > 240:
        print("-- Turn off the Light.")
        set_params = {"productKey": "a1ZJTVs****","deviceName": "LightDev","payload": {"LightSwitch":0}}
        res = lesdk.setThingProperties(set_params)

步骤二:分配函数到边缘实例

  1. 登录边缘计算控制台
  2. 在左侧导航栏单击应用管理
  3. 使用本文上方步骤一中已创建的函数,创建函数计算类型的边缘应用。具体操作,请参见函数计算应用

    应用信息参数说明如下:

    参数 描述
    应用名称 设置您应用的名称,例如querySqliteDB
    应用类型 选择函数计算
    地域 选择您创建的服务所在的地域。
    服务 选择EdgeFC服务。
    函数 选择querySqliteDB函数。
    授权 选择AliyunIOTAccessingFCRole
    应用版本 设置应用的版本,必须是该应用唯一的版本号,即一个应用不可以设置两个相同的版本号。

    函数配置区域框中,启用默认配置选择,则其余参数无需设置。

  4. 在左侧导航栏单击边缘实例
  5. 在本文“前提条件”中创建的边缘实例右侧,单击查看
  6. 实例详情页面的边缘应用页签,单击分配应用
  7. 分配应用面板,找到已创建的过程控制函数querySqliteDB,单击对应操作栏中的分配,然后单击关闭

步骤三:配置消息路由

添加消息的详细步骤及各个参数的解释。详细信息,请参见设置消息路由

  1. 实例详情页面,单击消息路由页签。
  2. 单击分配路由,添加LightSensor设备到函数计算的消息路由。
    按照界面提示,设置如下参数,参数设置完成后,单击确定
    参数 描述
    路由名称 设置一个消息路由名称。
    消息来源 此处选择设备,选择光照度传感器 > LightSensor
    消息主题过滤 此处选择全部
    消息目标 此处选择边缘应用EdgeFC/querySqliteDB函数。

步骤四:部署边缘实例

  1. 实例详情页面,单击右上角部署后,在弹出对话框中单击确定,将子设备、函数计算等资源下发到边缘端。
  2. 通过SSH登录您的网关,执行tail -f /linkedge/run/logger/fc-base/querySqliteDB/log.INFO命令。
    边缘函数计算本地过程控制函数做为一个后台服务存在,可以查看该函数的日志,来观察其实际运行情况。函数运行情况

    至此您已经完整地体验了使用边缘函数计算实现本地过程控制功能。