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

前提条件

  • 本示例仅适用于Link IoT Edge专业版,请您确保已根据专业版环境搭建内容完成边缘实例的创建。
  • 根据示例驱动内容创建光照度传感器、客厅灯产品以及该两个产品下的LightSensor、Light设备,并将设备分配至边缘实例。

背景信息

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

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

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

操作步骤

  1. 创建过程控制函数。
    1. 下载本地过程控制函数代码包。
    2. 登录阿里云函数计算控制台
      如尚未开通该服务,请阅读并勾选我已阅读并同意内容,单击立即开通,开通服务。
    3. 单击服务列表后的“+”符号,根据界面提示配置参数后,单击确定创建一个服务。
      其中,服务名称必须填写,此处设置为EdgeFC,其余参数可根据您的需求设置,也可以不设置。
      说明 若已操作过其他应用场景示例或小程序示例,即已创建EdgeFC服务,则无需重复创建。
    4. 创建服务成功后,在服务概览页面单击函数列表后的“+”符号,创建函数,并选择空白函数模板。
    5. 触发器配置中,选择不创建触发器,单击下一步
    6. 设置数据筛选函数的基础管理配置参数。
      参数 描述
      所在服务 选择已创建的EdgeFC服务。
      函数名称 设置为querySqliteDB
      运行环境 设置函数的运行环境,此示例中选择python3
      代码配置 选择代码包上传,上传已下载的querySqliteDB-code.zip代码包。

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

    7. 单击下一步,进入模板授权管理页面。此处无需设置,单击下一步
    8. 确认函数信息后,单击创建
      创建函数完成后,单击函数名称,可在代码执行页签下查看源码。
      在线编辑
      说明 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)
  2. 分配函数到边缘实例。
    1. 登录物联网平台控制台
    2. 左侧导航栏选择边缘计算 > 边缘实例
    3. 前提条件中完成的边缘实例右侧,单击查看
    4. 实例详情页面,选择函数计算,单击分配函数
    5. 根据界面提示设置参数,将已创建的数据筛选函数querySqliteDB分配到边缘实例中。
      函数信息配置说明如下:
      参数 描述
      地域 选择您创建的服务所在的地域。
      服务 选择EdgeFC服务。
      函数 选择querySqliteDB函数。
      授权 选择AliyunIOTAccessingFCRole
      函数配置说明如下:
      参数 描述
      运行模式 运行模式有两种。此处选择持续运行模式。程序部署后会立即执行。
      内存限制(MB) 函数运行可使用的内存资源上限,单位为MB。此处设置为512 MB。当函数使用内存超出该限制时,该函数计算程序会被强制重启。
      超时限制(秒) 函数收到事件后的最长处理时间,此处使用默认值5秒。如超过该时间函数仍未返回结果,该函数计算程序将会被强制重启。
      定时运行 使用默认配置:关闭

      其余参数无需配置。

    6. 单击确认,至此您已将过程控制函数分配到边缘实例中。
  3. 添加消息路由。
    添加消息的详细步骤及各个参数的解释,请参考设置消息路由
    1. 实例详情页面,选择消息路由
    2. 单击添加路由,添加LightSensor设备到函数计算的消息路由。
      按照界面提示,设置如下参数,参数设置完成后,单击确定
      参数 描述
      消息来源 此处选择设备,选择光照度传感器 > LightSensor
      消息主题过滤 此处选择全部
      消息目标 此处选择函数计算EdgeFC/querySqliteDB函数。
  4. 部署边缘实例并查看设备的运行结果。
    1. 实例详情页面,单击右上角部署后在弹出框中单击确定,将子设备、函数计算及消息路由下发到边缘端。
      您可以通过部署日志来查看部署进度及结果。
    2. (可选)在实例详情 > 监控信息页面,选择函数计算,查看已分配到边缘实例的函数计算监控信息。
      单击函数名称对应操作栏中的查看,查看详细的监控信息。
      查看函数监控信息
    3. 登录您的网关,执行tail -f /linkedge/run/logger/fc-base/querySqliteDB/log.INFO命令。
      边缘函数计算本地过程控制函数做为一个后台服务存在,可以查看该函数的日志,来观察其实际运行情况。
      函数运行情况

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