本文以使用官方示例驱动的LightSensor设备为例,描述将设备的数据存储到本地MySQL数据库的方法。

前提条件

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

背景信息

在生产中常需要结合传感器的历史数据和行业的算法模型,在边缘端进行分析和判断现场状态。实现此操作首先需要把设备上报的数据存储到本地数据库。

边缘函数计算提供本地数据库存储助手,根据ProductKey_DeviceName格式,将设备上报数据分为不同的表,并存储到本地MySQL数据库,供函数计算中的其他函数(算法逻辑)查询。同时,因为边缘设备的存储空间受限,本地数据库还提供数据库单表存储上限配置(默认为1万条记录)和数据写满回滚机制。

一、创建MySQL容器镜像应用

MySQL容器镜像应用,将作为MySQL数据库服务(server),供函数(client)访问并在其下创建MySQL数据库。

  1. 物联网平台控制台左侧导航栏,选择边缘计算 > 应用管理
  2. 参考容器镜像应用内容,创建容器镜像类型的边缘应用。

    部分参数说明如下3个表格所示,其余参数保持默认值或无需配置。

    表 1. 应用信息参数说明
    参数 描述
    应用名称 设置您应用的名称,例如publicMySql
    应用类型 选择容器镜像
    仓库类型 选择公共仓库
    镜像地址 设置镜像地址为mysql:latest
    应用版本 设置应用的版本,必须是该应用唯一的版本号,即一个应用不可以设置两个相同的版本号。
    环境变量 单击新增环境变量,添加如下方“环境变量配置”表格所示的一条环境变量。
    表 2. 环境变量配置
    名称
    MYSQL_ROOT_PASSWORD Mysql数据库的root账户密码,例如设置为123abc
    表 3. 容器配置参数说明
    参数 描述
    是否使用宿主机host模式 选择
    网络端口映射 设置您应用的网络端口映射。
    • 宿主机端口:设置为3306
    • 容器内端口:设置为3306
    • 类型:选择TCP
    是否启动特权模式 选择
    卷映射 设置您的卷映射。
    • 源路径:设置为/var/mysql/data
    • 目的路径:设置为/var/lib/mysql
    • 读写权限:选择读写
  3. 单击确认,完成MySQL容器镜像应用的创建。

二、分配MySQL容器镜像应用到边缘实例

  1. 左侧导航栏选择边缘计算 > 边缘实例
  2. 在本文“前提条件”中完成的边缘实例右侧,单击查看
  3. 实例详情页面,选择边缘应用,单击分配应用
  4. 将已创建的MySQL容器镜像应用publicMySql分配到边缘实例中,单击关闭
  5. 实例详情页面,单击右上角部署后在弹出框中单击确定,将子设备、函数计算等资源下发到边缘端。
    您可以通过单击部署详情来查看部署进度及结果。

三、创建本地数据库存储函数

  1. 下载本地数据库存储函数。
  2. 登录阿里云函数计算控制台
    如尚未开通该服务,请阅读并勾选我已阅读并同意内容,单击立即开通,开通服务。
  3. (可选)左侧导航栏单击服务-函数,在新建函数后的下拉框中选择新建服务,根据界面提示配置参数后,单击创建创建一个服务。
    其中,服务名称必须填写,此处设置为EdgeFC,其余参数可根据您的需求设置,也可以不设置。
    说明 若已操作过其他应用场景示例或小程序示例,即已创建EdgeFC服务,则无需重复创建。
  4. 创建服务成功后,在服务-函数页面单击新建函数,并使用事件函数方式创建函数。
  5. 设置本地数据库存储函数的基础管理配置参数。
    参数 描述
    所在服务 选择已创建的EdgeFC服务。
    函数名称 设置为saveMysqlDB
    运行环境 设置函数的运行环境,此示例中选择python3
    函数入口 使用默认值index.handler
    函数执行内存 设置为512 MB。
    超时时间 设置为10秒。
    实例并发度 保持默认值。

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

    确认函数信息后,单击完成

  6. 创建函数完成后,系统自动跳转到函数详情页面。请在代码执行页签下选择代码包上传,单击选择文件,上传步骤1中下载的saveMysqlDB-code.zip代码包,然后单击保存
    代码包上传成功后,您可在在线编辑框中查看源码。saveMysqlDB
  7. (可选)配置数据库参数。
    saveMysqlDB是一个设备数据存储到本地MySQL数据库的参考示例,您可以按需调整和更改示例。目前预留的可调整参数有:
    • table_max_entries:数据库单表最大记录条数,默认为1万条。
    • table_clean_count:数据库记录到达上限,设置从时间最久远的数据开始删除的条数,默认为4000条。

四、分配本地数据库存储函数到边缘实例

  1. 参考函数计算应用内容,使用已创建的saveMysqlDB函数,创建函数计算类型的边缘应用。

    应用信息参数说明如下:

    参数 描述
    应用名称 设置您应用的名称,例如appsaveMysqlDB
    应用类型 选择函数计算
    地域 选择您创建的服务所在的地域。
    服务 选择EdgeFC服务。
    函数 选择saveSqliteDB函数。
    授权 选择AliyunIOTAccessingFCRole
    应用版本 设置应用的版本,必须是该应用唯一的版本号,即一个应用不可以设置两个相同的版本号。
    函数配置说明如下:
    参数 描述
    运行模式 运行模式有两种。此处选择持续运行模式。程序部署后会立即执行。
    内存限制(MB) 函数运行可使用的内存资源上限,单位为MB。此处设置为512 MB。当函数使用内存超出该限制时,该函数计算程序会被强制重启。
    超时限制(秒) 函数收到事件后的最长处理时间,此处使用默认值5秒。如超过该时间函数仍未返回结果,该函数计算程序将会被强制重启。
    定时运行 使用默认配置:关闭
    环境变量 单击新增环境变量,添加如下方“环境变量配置”表格所示的两条环境变量。
    表 4. 环境变量配置
    名称
    DB_NAME MySQL的数据库名称,请根据MySQL数据库命名规则,自定义设置,例如设置为mysql_db
    MYSQL_IP MySQL服务地址,需通过MySQL容器镜像应用名称来访问。本示例中MySQL容器镜像应用名称为publicMySql

    其余参数无需配置。

  2. 左侧导航栏选择边缘计算 > 边缘实例
  3. 在本文“前提条件”中完成的边缘实例右侧,单击查看
  4. 实例详情页面,选择边缘应用,单击分配应用
  5. 将已创建的本地数据库存储函数appsaveMysqlDB分配到边缘实例中,单击关闭

五、配置消息路由

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

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

六、重新部署边缘实例

  1. 实例详情页面,单击右上角部署后在弹出框中单击确定,将子设备、函数计算等资源下发到边缘端。
    您可以通过单击部署详情来查看部署进度及结果。
  2. 登录您的网关,执行tail -f /linkedge/run/logger/fc-base/appsaveMysqlDB/log.INFO命令,可以查看该应用的日志,来观察其实际运行情况。
  3. 在本地MySQL数据库(本示例中名为mysql_db的数据库)中执行select * from YourProductKey_YourDeviceName命令,可以查询到通过appsaveMysqlDB应用存储到MySQL数据库的LightSensor设备数据。
    说明 将命令中的YourProductKey_YourDeviceName替换为您实际设备的设备证书信息,例如本示例中LightSensor设备的ProductKeya1*****xPAfDeviceNameLightSensor,那么实际执行的命令为select * from a1*****xPAf_LightSensor
    数据存储