智能边缘BIE

    典型配置

    本文介绍在边缘核心初始连接到BIE云端管理套件以后,如何对边缘核心进行模块应用配置。

    前提准备

    边缘核心已连接云端BIE,配置流程可参考快速入门

    模拟场景

    1. 边缘核心采集x、y、z这3个运行参数
    2. 计算 result=x+y+z 的结果
    3. 过滤出 result > 10 数据

    配置流程

    1. 模块配置

      • 配置baetyl-hub模块
      • 配置baetyl-function-manager模块
      • 配置baetyl-function-python27模块
      • 配置baetyl-function-sql
    2. 草稿配置 发布 为版本
    3. 下发 正式版本配置
    4. 使用MQTTBox检查结果

    模块配置

    模块功能说明

    • baetyl-hub:一个边缘侧的MQTT Broker,支持消息的订阅与发布
    • baetyl-function-manager: 实现对函数运行时对调度
    • baetyl-function-python27: 实现参数计算
    • baetyl-function-sql: 实现结果过滤
    • MQTT-Clinet:非baetyl模块,本案例使用MQTTBox这个工具来模拟MQTT Client

    模块关系图

    image.png

    模块1:baetyl-hub

    hub 服务需要 3 个存储卷,分别用来映射配置、映射日志和数据持久化,其中日志和数据持久化为可选配置。

    创建配置存储卷

    image.png

    我们选择存储卷模版 baetyl模块配置,起名为 bie-demo-hub-conf 并点击 "确定"。

    image.png

    我们发现存储卷中已经默认生成了 service.yml 文件,这是 baetyl 模块默认的配置文件名。

    image.png

    我们输入 hub 的配置:

    listen:
      - tcp://0.0.0.0:1883
    principals:
      - username: test
        password: hahaha
        permissions:
          - action: 'pub'
            permit: ['#']
          - action: 'sub'
            permit: ['#']
    subscriptions:
      - source:
          topic: 't'
        target:
          topic: 't/topic'
    logger:
      path: var/log/baetyl/service.log
      level: "debug"

    配置的定义为,我们有一个用户名为 test,密码为 hahaha 的接入身份,拥有所有 pub、sub 权限,并且 hub 会将主题 t 转发给主题 t/topic。更多配置解析请参考配置文件说明

    image.png

    保存并发布新版本即可。

    image.png

    创建日志存储卷

    我们选择存储卷模版 空目录存储卷,起名为 bie-demo-hub-log 并点击 "确定"。

    空目录存储卷创建即会发布一个新版本,它不可以新增修改文件,只是起到 "文件夹/目录" 作用。

    image.png

    image.png

    创建数据持久化存储卷

    创建数据持久化存储卷同创建日志存储卷过程一样,我们起名为 bie-demo-hub-data。

    创建baetyl-hub服务

    我们在核心的 应用配置详情 点击 "添加服务",选择 baetyl-hub 模块,服务名称local-hub,并配置端口映射 1883:1883,代表着将容器内的 1883 端口映射到宿主机上。

    image.png

    我们进行 hub 模块的存储卷挂载:

    image.png

    将我们的存储卷依次挂载到服务上,并 "保存",其中配置文件需要映射到容器内目录 etc/baetyl 上。

    至此,我们的 baetyl-hub 服务就配置完了。

    模块2:baetyl-function-manager

    baetyl-function-manager 服务需要1个存储卷(也可以根据需要映射日志文件),用来映射配置文件。

    创建配置存储卷

    首先创建存储卷,选择模版 baetyl模块配置,起名为 bie-demo-func-conf 并点击 "确定"。

    image.png

    同在 baetyl-hub 一样,输入配置,保存并发布新版本。

    hub:
      address: tcp://local-hub:1883 #此处local-hub为前面定义的服务名称,而不是用模块名称
      username: test
      password: hahaha
    rules:
      - clientid: localfunc-1
        subscribe:
          topic: t
        function:
          name: compute
        publish:
          topic: t/compute
      - clientid: localfunc-2
        subscribe:
          topic: t/compute
          qos: 1
        function:
          name: filter
        publish:
          topic: t/filter
          qos: 1
    functions:
      - name: compute
        service: function-compute
      - name: filter
        service: function-filter
    logger:
      path: var/log/baetyl/service.log
      level: "debug"

    配置的定义为,baetyl-function-manager 订阅主题 t 并通过 compute 函数进行计算,然后以 t/compute 主题发出,订阅主题 t/compute 并通过 filter 函数进行计算,然后以 t/filter 主题发出。其中 compute 函数以服务 function-compute 启动,filter 函数以服务 function-filter 启动。更多配置解析请参考 配置文件说明

    创建 baetyl-function-manager 服务

    我们在核心的 应用配置详情 点击 "添加服务",选择 baetyl-function-manager 模块,起名为 local-func。

    image.png

    进行存储卷挂载:

    image.png

    将存储卷挂载到服务上,并保存,其中配置文件需要映射到容器内目录 etc/baetyl 上。

    至此,我们的 baetyl-function-manager 服务就配置完了。

    模块3:baetyl-function-python27

    baetyl-function-python27服务需要 2 个存储卷,用来映射配置文件和代码体。

    创建cfc函数

    进入百度智能云CFC控制台,创建一个compute函数,在当前代码当中输入一段简单的加法代码即可,代码如下:

    def handler(event, context): 
        event["result"] = event["x"] + event["y"] + event["z"]
        return event

    然后点击发布新版本,生成版本1,如下图所示:

    image.png

    目前智能边缘BIE能够支持 Python27Python36Nodejs85 这三种函数运行时,因此在CFC当中创建的这3类函数才可以被引入到BIE当中。

    创建配置存储卷

    首先创建存储卷,选择模版 baetyl模块配置,起名为 bie-demo-compute-conf 并点击 "确定"。

    同在 baetyl-hub 一样,输入配置,保存并发布版本。

    functions:
      - name: 'compute'
        handler: 'index.handler'
        codedir: 'var/db/baetyl/compute'

    配置的定义为,定义函数compute,代码路径为容器内 var/db/baetyl/compute。更多配置解析请参考 配置文件说明

    创建代码存储卷

    首先创建存储卷,选择模版 CFC函数模版,起名为 bie-demo-compute-code 并点击 "确定"。

    image.png

    选择引入 CFC 函数,选择我们事先从百度云 CFC 创建好的函数,目前能够支持 Python27、Python36 及 Nodejs85 脚本引入。

    image.png

    创建 baetyl-function-python27 服务

    我们在核心的 应用配置详情 点击 "添加服务",选择 baetyl-function-python27 模块,起名为function-compute。其中,函数 runtime 模块的副本数 必须 为 0。

    image.png

    进行存储卷挂载:

    image.png

    将存储卷挂载到服务上,并保存,其中配置文件需要映射到容器内目录 etc/baetyl 上。

    至此,我们的 baetyl-function-python27 服务就配置完了。

    模块4:baetyl-function-sql

    baetyl-function-sql 服务需要 1 个存储卷,用来映射配置文件。

    创建配置存储卷

    首先创建存储卷,选择模版 baetyl模块配置,起名为 bie-demo-filter-conf 并点击确定。

    同在 baetyl-hub 一样,输入配置,保存并发布版本即可。

    functions:
      - name: filter
        handler: 'select * where result > 10'

    配置的定义为,定义函数 filter,将会过滤 result 小于 10 的消息。更多配置解析请参考 配置文件说明

    创建 baetyl-function-sql 服务

    我们在核心的 应用配置详情 点击 "添加服务",选择 baetyl-function-sql 模块,起名为 function-filter。其中,函数 runtime 模块的副本数 必须 为 0。

    image.png

    进行存储卷挂载:

    image.png

    将存储卷挂载到服务上,并保存,其中配置文件需要映射到容器内目录 etc/baetyl 上。

    至此,我们的 baetyl-function-sql 服务就配置完了。

    配置发布与下发

    在全部配置操作完毕以后,就可以将草稿版本 发布 为正式版本,然后对正式版本点击 下发 操作。具体可以参考文档:配置发布与下发

    使用MQTTBox订阅数据检查结果

    配置MQTT连接

    启动 MQTTBOX 客户端,进入 client 创建页面,开始创建 MQTT client,选择连接使用的协议为 "mqtt/tcp",依据 baetyl-hub 模块启动的地址及端口,再结合配置项中可连接 baetyl-hub 模块的 MQTT client 的连接配置信息进行配置,我们输入用户 test,并输入密码 hahaha,然后点击 "Save" 按钮,即可完成 TCP 连接模式下 MQTTBOX 的连接配置,具体如下图示:

    getting-started-practice-mqttbox-link-01.png

    发送模拟数据x、y、z

    我们开始进行测试,按照我们的设计,向主题 t 发送 {"x":1,"y":2,"z":3} 这样格式的测试数据,会经过 computefilter 这两个计算函数,其中:

    • compute 计算结果输出到 t/compute 这个主题,得到 result=x+y+z 的计算结果
    • filter 计算结果输出到 t/filter 这个主题,得到 result>10 的过滤数据

    查看计算结果

    结果如下所示,表明运行正确。

    getting-started-practice-mqttbox-test.png

    上一篇
    配置发布与下发
    下一篇
    主程序及模块升级