千家信息网

如何使用EdgeX Kuiper规则引擎控制物联网设备

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这期内容当中小编将会给大家带来有关如何使用EdgeX Kuiper规则引擎控制物联网设备,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。场景下面将创建并运行以下两条规
千家信息网最后更新 2026年11月02日如何使用EdgeX Kuiper规则引擎控制物联网设备

这期内容当中小编将会给大家带来有关如何使用EdgeX Kuiper规则引擎控制物联网设备,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

场景

下面将创建并运行以下两条规则。

  1. 监视Random-UnsignedInteger-Device设备的规则,如果uint8值大于 20,则向Random-Boolean-Device设备发送命令,并开启布尔值的随机生成 。

  2. 监视Random-Integer-Device设备的规则,如果每20秒 int8的平均值大于0,则向Random-Boolean-Device 设备服务发送命令以关闭 布尔值的随机生成。

该场景不含任何真实的业务逻辑,而只是为了演示EdgeX Kuiper规则引擎的功能。 您可以根据我们的演示制定合理的业务规则。

开始使用

请务必遵循文档 EdgeX Kuiper规则引擎入门教程,确保教程能够成功运行。

创建 EdgeX 流

在创建规则之前,应创建一个流,该流可以使用来自 EdgeX 应用程序服务的流数据。 如果您已经完成 EdgeX Kuiper 规则引擎入门教程,则不需要此步骤。

curl -X POST \  http://$kuiper_docker:48075/streams \  -H 'Content-Type: application/json' \  -d '{  "sql": "create stream demo() WITH (FORMAT=\"JSON\", TYPE=\"edgex\")"}'

由于这两个规则都会向设备Random-UnsignedInteger-Device发送控制命令,通过运行命令curl http://localhost:48082/api/v1/device/name/Random-Boolean-Device | jq可以获取该设备的可用命令列表。它将打印类似的输出,如下所示。

{  "id": "9b051411-ca20-4556-bd3e-7f52475764ff",  "name": "Random-Boolean-Device",  "adminState": "UNLOCKED",  "operatingState": "ENABLED",  "labels": [    "device-virtual-example"  ],  "commands": [    {      "created": 1589052044139,      "modified": 1589052044139,      "id": "28d88bb3-e280-46f7-949f-37cc411757f5",      "name": "Bool",      "get": {        "path": "/api/v1/device/{deviceId}/Bool",        "responses": [          {            "code": "200",            "expectedValues": [              "Bool"            ]          },          {            "code": "503",            "description": "service unavailable"          }        ],        "url": "http://edgex-core-command:48082/api/v1/device/bcd18c02-b187-4f29-8265-8312dc5d794d/command/d6d3007d-c4ce-472f-a117-820b5410e498"      },      "put": {        "path": "/api/v1/device/{deviceId}/Bool",        "responses": [          {            "code": "200"          },          {            "code": "503",            "description": "service unavailable"          }        ],        "url": "http://edgex-core-command:48082/api/v1/device/bcd18c02-b187-4f29-8265-8312dc5d794d/command/d6d3007d-c4ce-472f-a117-820b5410e498",        "parameterNames": [          "Bool",          "EnableRandomization_Bool"        ]      }    }  ]}

从输出中,您能看出有两个命令,第二个命令用于更新设备的配置。 此设备有两个参数:

  • Bool:当其他服务想要获取设备数据时,设置返回值。 仅当EnableRandomization_Bool设置为false时,才使用该参数。

  • EnableRandomization_Bool:是否启用Bool的随机生成。 如果将此值设置为true,则将忽略第一个参数。

因此,示例控制命令将类似于如下命令:

curl -X PUT \  http://edgex-core-command:48082/api/v1/device/c1459444-79bd-46c8-8b37-d6e1418f2a3a/command/fe202437-236d-41c5-845e-3e6013b928cd \  -H 'Content-Type: application/json' \  -d '{"Bool":"true", "EnableRandomization_Bool": "true"}'

创建规则

第一条规则

第一条规则是监视Random-UnsignedInteger-Device设备的规则,如果uint8值大于" 20",则向Random-Boolean-Device设备发送命令,并开启布尔值的随机生成 。 以下是规则定义,请注意:

  • 当uint8的值大于20时将触发该动作。由于uint8的值不用于向Random-Boolean-Device发送控制命令,因此在rest操作的dataTemplate属性中不使用uint8值。

curl -X POST \  http://$kuiper_server:48075/rules \  -H 'Content-Type: application/json' \  -d '{  "id": "rule1",  "sql": "SELECT uint8 FROM demo WHERE uint8 > 20",  "actions": [    {      "rest": {        "url": "http://edgex-core-command:48082/api/v1/device/bcd18c02-b187-4f29-8265-8312dc5d794d/command/d6d3007d-c4ce-472f-a117-820b5410e498",        "method": "put",        "retryInterval": -1,        "dataTemplate": "{\"Bool\":\"true\", \"EnableRandomization_Bool\": \"true\"}",        "sendSingle": true      }    },    {      "log":{}    }  ]}'
第二条规则

第二条规则监视Random-Integer-Device设备,如果每20秒 int8的平均值大于0,则向Random-Boolean-Device 设备服务发送命令以关闭 布尔值的随机生成。

  • uint8的平均值每20秒计算一次,如果平均值大于0,则向 Random-Boolean-Device 服务发送控制命令。

curl -X POST \  http://$kuiper_server:48075/rules \  -H 'Content-Type: application/json' \  -d '{  "id": "rule2",  "sql": "SELECT avg(int8) AS avg_int8 FROM demo WHERE int8 != nil GROUP BY  TUMBLINGWINDOW(ss, 20) HAVING avg(int8) > 0",  "actions": [    {      "rest": {        "url": "http://edgex-core-command:48082/api/v1/device/bcd18c02-b187-4f29-8265-8312dc5d794d/command/d6d3007d-c4ce-472f-a117-820b5410e498",        "method": "put",        "retryInterval": -1,        "dataTemplate": "{\"Bool\":\"false\", \"EnableRandomization_Bool\": \"false\"}",        "sendSingle": true      }    },    {      "log":{}    }  ]}'

现在创建了两个规则,您可以查看edgex-kuiper的日志以获取规则执行结果。

# docker logs edgex-kuiper

如何从分析结果中提取数据?

由于分析结果也需要发送到command rest服务,如何从分析结果中提取数据?通过SQL过滤数据的示例如下所示:

SELECT int8, "true" AS randomization FROM demo WHERE uint8 > 20

SQL的输出内容如下:

[{"int8":-75, "randomization":"true"}]

当从字段int8读取value字段,从字段randomization读取EnableRandomization_Bool时,假设服务需要以下数据格式:

curl -X PUT \  http://edgex-core-command:48082/api/v1/device/${deviceId}/command/xyz \  -H 'Content-Type: application/json' \  -d '{"value":-75, "EnableRandomization_Bool": "true"}'

Kuiper 使用 Go模板 从分析结果中提取数据,并且dataTemplate 内容如下:

"dataTemplate": "{\"value\": {{.int8}}, \"EnableRandomization_Bool\": \"{{.randomization}}\"}"

在某些情况下,您可能需要迭代返回的数组值,或使用if条件设置不同的值,然后参考此链接写入更复杂的数据模板表达式。

上述就是小编为大家分享的如何使用EdgeX Kuiper规则引擎控制物联网设备了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

规则 设备 命令 数据 服务 控制 分析 引擎 结果 生成 两个 内容 布尔 平均值 监视 参数 字段 教程 输出 运行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 江苏根荣互联网科技 广州百单互联网科技有限公司 互联网 的科技创新 顺玮阁互联网科技 上游互联网科技 互联网公司会议桌创意科技软装饰 富国互联网科技创新基金 华服互联网科技官网 来此购互联网科技有限公司 速维有品互联网信息科技(苏州)有限公司 洛阳昕诺飞互联网科技有限公司 开一家科技互联网公司需要多少钱 明优互联网科技有限公司 为客找房互联网科技公司怎么样 锡山区互联网智能科技产品供应 互联网公司高科技产品 深圳互联网科技的发展 互联网企业科技类企业如何做账 数字科技和互联网金融哪个好 六子台科技互联网展会 科技互联网企业 港股互联网科技股 互联网金融 科技创新 成都仁贤领冠互联网科技有限公司 互联网软件和科技 青岛科技大学互联网大赛研究生 和信科技工业互联网 工业互联网科技创业 长沙渺峰互联网科技有限公司 北京品多多互联网科技有限公司
0