当前位置: 首页 > news >正文

EdgeX Core Service 核心服务之 Core Command 命令

EdgeX Core Service 核心服务之 Core Command 命令

一、概述

Core-command(通常称为命令和控制微服务)可以代表以下角色向设备和传感器发出命令或动作:

  • EdgeX Foundry中的其他微服务(例如,本地边缘分析或规则引擎微服务)
  • EdgeX Foundry与同一系统上可能存在的其他应用程序(例如,需要关闭传感器的系统管理代理)
  • 对于需要命令这些设备的任何外部系统(例如,一个基于云的应用程序确定了需要修改一组设备上的设置)

Command微服务以通用的标准化方式公开命令,以简化与设备的通信。

  • GET 命令从设备请求数据,这通常用于请求设备最新的传感器读数
  • SET 命令请求采取操作或启动设备或在设备上设置某些配置。

Command微服务从metadata服务获取有关设备和传感器的知识。

Command微服务始终通过设备服务将命令和动作中继到设备和传感器,并且从不直接与设备或传感器通信。

因此,Command微服务是从EdgeX Foundry的北侧(例如规则引擎和导出设备)到特定协议的设备或传感器以及EdgeX Foundry和网关的关联设备服务侧的命令或操作请求的转换器。

Command微服务不允许通过设备服务与设备和传感器进行不必要的交互,从而在设备和传感器周围提供了一层保护。可以添加额外的安全性,不允许与设备进行未经授权的交互(通过设备服务)。还可以调节设备上的请求数量,以免设备负载过重,如果有特殊需要,甚至可以缓存请求的响应,以避免唤醒设备。

二、通过消息传递命令

2.1 介绍

以前,从第三方系统(企业应用程序、云应用程序等)到 EdgeX 的通信只能通过 REST 完成,以便驱动设备或从传感器获取最新信息。第三方系统对命令服务进行 REST 调用,然后将请求中继到也使用 REST 的设备服务。没有内置方法可以向 EdgeX 或其管理的设备/传感器发出基于消息的请求。

从 Levski(V2.3) 版本开始,核心命令服务添加了对外部 MQTT 连接的支持(与应用程序服务提供外部 MQTT 连接的方式相同), 这将使其能够充当内部消息总线(通过 MQTT 或 Redis Pub/Sub 实现)和外部 MQTT 消息总线之间的桥梁。

作为消息总线桥的核心命令

Core Command 服务将作为 EdgeX 入口点,通过消息总线向南向设备发送命令。

第三方系统不应被授予访问 EdgeX 内部消息总线的权限。因此,为了通过消息总线(特别是 MQTT)实现通信,命令服务需要从第三方或外部 MQTT 主题获取消息,并将它们内部传递到 EdgeX 内部消息总线,最终将它们路由到设备服务然后到设备/传感器(南向)。

相反,来自南向设备的响应消息也将通过内部 EdgeX 消息总线发送到命令服务,然后它们可以桥接到外部 MQTT 主题并响应第三方系统请求者。

2.2 消息结构

由于大多数消息总线协议缺乏通用消息头机制(如 HTTP),因此提供请求/响应元数据是通过定义与每个请求/响应关联的 MessageEnvelope 对象来完成的。消息主题名称的作用类似于 REST 请求中的 HTTP 路径和方法。也就是说,主题名称指定任何命令请求的设备接收者,就像 HTTP 请求中的路径一样。

下面是命令查询请求的 MessageEnvelope 示例:

{"apiVersion" : "v3","RequestId": "e6e8a2f4-eb14-4649-9e2b-175247911369","CorrelationID": "14a42ea6-c394-41c3-8bcd-a29b9f5e6835","ContentType": "application/json","QueryParams": {"offset": "0","limit": "10"}
}

下面是命令查询响应的 MessageEnvelope 示例:

{"ApiVersion":"v2","RequestID":"e6e8a2f4-eb14-4649-9e2b-175247911369","CorrelationID":"14a42ea6-c394-41c3-8bcd-a29b9f5e6835","ErrorCode":0,"Payload":"...","ContentType":"application/json"
}

格式化请求和响应的消息共享一个公共的基础结构。最外层的 JSON 对象表示消息封装,用于传递有关请求/响应的元数据,包括 ApiVersion、RequestID、CorrelationID, ..等等。

Payload 字段包含 base64 编码的响应正文。

ErrorCode 字段提供错误指示。ErrorCode 将为 0(无错误)或 1(指示错误)作为错误条件的两个枚举值。当出现错误时(ErrorCode 设置为 1),Payload 包含一个消息字符串,指示有关错误的更多信息。如果没有错误(ErrorCode 0),则 Payload 中没有消息字符串。

2.3 命令查询

Core Command 服务订阅 QueryRequestTopic 并将响应发布到配置文件中定义的 QueryResponseTopic。收到请求后,Core Command 服务将尝试从请求主题级别解析 <device-name>。第三方系统或应用程序必须发布命令查询请求消息并订阅来自相同主题的响应。以下是 Core Command 使用的默认主题命名:

  • 订阅命令查询请求主题:edgex/commandquery/request/#
  • 发布命令查询响应主题:edgex/commandquery/response

请求主题中的最后一个主题级别必须是 #(all) 或要查询的 <device-name>。

2.3.1 按设备名称查询

通过消息传递按设备名称查询设备核心命令的示例:

1、向外部 MQTT 代理发送关于主题的查询请求消息 edgex/commandquery/request/Random-Boolean-Device:

{"apiVersion" : "v3","ContentType": "application/json","CorrelationID": "14a42ea6-c394-41c3-8bcd-a29b9f5e6835","RequestId": "e6e8a2f4-eb14-4649-9e2b-175247911369"
}

  1. 从外部 MQTT 代理接收有关主题的查询响应消息

edgex/commandquery/response:

{"ReceivedTopic":"","CorrelationID":"14a42ea6-c394-41c3-8bcd-a29b9f5e6835","ApiVersion":"v2","RequestID":"e6e8a2f4-eb14-4649-9e2b-175247911369","ErrorCode":0,"Payload":"eyJhcGlWZXJzaW9uIjoidjIiLCJyZXF1ZXN0SWQiOiJlNmU4YTJmNC1lYjE0LTQ2NDktOWUyYi0xNzUyNDc5MTEzNjkiLCJzdGF0dXNDb2RlIjoyMDAsImRldmljZUNvcmVDb21tYW5kIjp7ImRldmljZU5hbWUiOiJSYW5kb20tQm9vbGVhbi1EZXZpY2UiLCJwcm9maWxlTmFtZSI6IlJhbmRvbS1Cb29sZWFuLURldmljZSIsImNvcmVDb21tYW5kcyI6W3sibmFtZSI6IldyaXRlQm9vbFZhbHVlIiwic2V0Ijp0cnVlLCJwYXRoIjoiL2FwaS92Mi9kZXZpY2UvbmFtZS9SYW5kb20tQm9vbGVhbi1EZXZpY2UvV3JpdGVCb29sVmFsdWUiLCJ1cmwiOiJodHRwOi8vZWRnZXgtY29yZS1jb21tYW5kOjU5ODgyIiwicGFyYW1ldGVycyI6W3sicmVzb3VyY2VOYW1lIjoiQm9vbCIsInZhbHVlVHlwZSI6IkJvb2wifSx7InJlc291cmNlTmFtZSI6IkVuYWJsZVJhbmRvbWl6YXRpb25fQm9vbCIsInZhbHVlVHlwZSI6IkJvb2wifV19LHsibmFtZSI6IldyaXRlQm9vbEFycmF5VmFsdWUiLCJzZXQiOnRydWUsInBhdGgiOiIvYXBpL3YyL2RldmljZS9uYW1lL1JhbmRvbS1Cb29sZWFuLURldmljZS9Xcml0ZUJvb2xBcnJheVZhbHVlIiwidXJsIjoiaHR0cDovL2VkZ2V4LWNvcmUtY29tbWFuZDo1OTg4MiIsInBhcmFtZXRlcnMiOlt7InJlc291cmNlTmFtZSI6IkJvb2xBcnJheSIsInZhbHVlVHlwZSI6IkJvb2xBcnJheSJ9LHsicmVzb3VyY2VOYW1lIjoiRW5hYmxlUmFuZG9taXphdGlvbl9Cb29sQXJyYXkiLCJ2YWx1ZVR5cGUiOiJCb29sIn1dfSx7Im5hbWUiOiJCb29sIiwiZ2V0Ijp0cnVlLCJzZXQiOnRydWUsInBhdGgiOiIvYXBpL3YyL2RldmljZS9uYW1lL1JhbmRvbS1Cb29sZWFuLURldmljZS9Cb29sIiwidXJsIjoiaHR0cDovL2VkZ2V4LWNvcmUtY29tbWFuZDo1OTg4MiIsInBhcmFtZXRlcnMiOlt7InJlc291cmNlTmFtZSI6IkJvb2wiLCJ2YWx1ZVR5cGUiOiJCb29sIn1dfSx7Im5hbWUiOiJCb29sQXJyYXkiLCJnZXQiOnRydWUsInNldCI6dHJ1ZSwicGF0aCI6Ii9hcGkvdjIvZGV2aWNlL25hbWUvUmFuZG9tLUJvb2xlYW4tRGV2aWNlL0Jvb2xBcnJheSIsInVybCI6Imh0dHA6Ly9lZGdleC1jb3JlLWNvbW1hbmQ6NTk4ODIiLCJwYXJhbWV0ZXJzIjpbeyJyZXNvdXJjZU5hbWUiOiJCb29sQXJyYXkiLCJ2YWx1ZVR5cGUiOiJCb29sQXJyYXkifV19XX19","ContentType":"application/json","QueryParams":{}
}

Base64 解码 Payload:

{"apiVersion":"v2","requestId":"e6e8a2f4-eb14-4649-9e2b-175247911369","statusCode":200,"deviceCoreCommand"

相关文章:

EdgeX Core Service 核心服务之 Core Command 命令

EdgeX Core Service 核心服务之 Core Command 命令 一、概述 Core-command(通常称为命令和控制微服务)可以代表以下角色向设备和传感器发出命令或动作: EdgeX Foundry中的其他微服务(例如,本地边缘分析或规则引擎微服务)EdgeX Foundry与同一系统上可能存在的其他应用程序…...

掌握常用HTML标签:创建个人简介网页

任务目标 理解HTML文档的基本结构&#xff0c;掌握常见的HTML标签及其用途&#xff0c;创建一个简单的个人简介网页。 学习内容脑图 #mermaid-svg-5GTdqH41gawr4v0h {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

音视频学习(二十五):ts

TS&#xff08;MPEG-TS&#xff0c;MPEG Transport Stream&#xff09; 是一种广泛应用于流媒体传输和存储的容器格式。它最早由 MPEG&#xff08;Moving Picture Experts Group&#xff09;组织制定&#xff0c;用于视频和音频的压缩编码。在 HLS&#xff08;HTTP Live Stream…...

10. 虚拟机VMware Workstation Pro下共享Ubuntu和Win11文件夹

本文记录当前最新版虚拟机VMware Workstation Pro&#xff08;2024.12&#xff09;如何在win11下共享文件&#xff0c;以实现Windows与Ubuntu互传文件的目的。 1. 创建共享文件夹 1.1 先关闭虚拟机的客户机&#xff0c;打开虚拟机设置 1.2 在虚拟机设置界面找到“选项”->“…...

单元测试mock框架Mockito

为了继续改进 Mockito 并进一步改善单元测试体验&#xff0c;我们希望您升级到 2.1.0&#xff01;Mockito 遵循语义版本控制&#xff0c;仅在主要版本升级时包含重大更改。在库的生命周期中&#xff0c;重大更改是推出一组全新功能所必需的&#xff0c;这些功能会改变现有行为甚…...

Python从0到100(七十八):神经网络--从0开始搭建全连接网络和CNN网络

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…...

2024多模态大模型综述最新总结

摘要 随着人工智能技术的快速发展&#xff0c;多模态大模型&#xff08;MLLM&#xff09;已成为研究的新热点。这些模型以强大的大型语言模型&#xff08;LLM&#xff09;为基础&#xff0c;能够处理和理解多种模态信息&#xff0c;如文本、图像、视频和音频。本文综述了MLLM的…...

Redis——缓存穿透

文章目录 1. 问题介绍1.1 定义1.2 举例 2. 解决方案2.1 方案一&#xff1a;空值缓存2.1.1 做法2.1.2 举例2.1.3 示例代码2.1.4 优点2.1.5 缺点 2.2 方案二&#xff1a;布隆过滤器2.2.1 思想2.2.2 做法2.2.3 示例代码2.2.4 优点2.2.5 缺点 2.3 方案三&#xff1a;限流3. 总结 1.…...

1.gitlab 服务器搭建流程

前提条件&#xff1a; 一、服务器硬件水平 搭建gitlab服务器最低配置要求2核4G,低于这个配置的服务器运行效果很差。 gitlab官网&#xff1a;https://about.gitlab.com/ 下载地址&#xff1a;gitlab/gitlab-ce - Packages packages.gitlab.com 本机ubuntu 二、安装依赖 su…...

McDonald‘s Event-Driven Architecture 麦当劳事件驱动架构

原文链接 1 mcdonalds-technical-blog/ 原文链接 2 mcdonalds-technical-blog/ 麦当劳在异步、事务性和分析性处理用例中使用跨技术栈的事件&#xff0c;包括移动订单进度跟踪和向客户发送营销通信&#xff08;交易和促销&#xff09;。 统一事件平台&#xff08;unified eve…...

GTID详解

概念和组成 1&#xff0c;全局事务表示&#xff1a;global transaction identifiers 2, GTID和事务一一对应&#xff0c;并且全局唯一 3&#xff0c;一个GTID在一个服务器上只执行一次 4&#xff0c;mysql 5.6.5开始支持 组成 GTID server_uuid:transaction_id 如&#xf…...

图解HTTP-HTTP状态码

状态码 状态码的职责是当客户端向服务器端发送请求时&#xff0c;描述返回的请求结果。 类别原因短语1XXInformational(信息状态码)接收的请求正在处理2XXSuccess&#xff08;成功状态码&#xff09;请求正常处理完毕4XXRedirection &#xff08;重定向状态码&#xff09;需要…...

sh cmake-linux.sh -- --skip-license --prefix = $MY_INSTALL_DIR

本文来自天工AI --------- 命令用于安装CMake的脚本&#xff0c;其中--skip-license参数表示跳过许可协议的显示&#xff0c;--prefix参数指定了CMake的安装目录。$MYINSTALLDIR是一个环境变量&#xff0c;应该在运行命令之前设置为您想要安装CMake的目录。 -------- sh xx…...

MySQL 在window免安装启动

复制my.ini文件 初始化命令&#xff1a;mysqld --initialize --console 执行启动bat&#xff1a;启动mysql.bat 主要命令是&#xff1a;mysqld --standalone 免密码启动mysql&#xff1a; mysqld --defaults-file"D:\xxx\soft\mysql-8.0.40-winx64\my.ini" …...

[JavaScript] 我该怎么去写一个canvas游戏

首先你得知道canvas的基础语法&#xff0c;此处不过多赘述. 一、如何更新视图 canvas里面有个clearRect方法&#xff0c;可以遮住画布中一个矩形部分. 但是你想这样做就难免会遮住一些本不该遮住的东西&#xff0c;因为它是一个矩形&#xff0c;并且你还要计算它的位置和尺寸…...

【潜意识Java】深度解析黑马项目《苍穹外卖》与蓝桥杯算法的结合问题

目录 为什么要结合项目与算法&#xff1f; 1. 蓝桥杯与《苍穹外卖》项目的结合 实例&#xff1a;基于蓝桥杯算法思想的订单配送路径规划 问题描述&#xff1a; 代码实现&#xff1a;使用动态规划解决旅行商问题 代码解析&#xff1a; 为什么这个题目与蓝桥杯相关&#x…...

python报错系列(16)--pyinstaller ????????

系列文章目录 文章目录 系列文章目录前言一、pyinstaller ????????1.报错如下2.安装pyinstaller3.报错如下&#xff1a;4.封装py文件为exe成功5.国内源 总结 前言 一、pyinstaller ??? 1.报错如下 PS D:\Users\gxcaoty\Desktop\性能覆盖率> pyinstaller37.exe…...

Pytorch | 从零构建ResNet对CIFAR10进行分类

Pytorch | 从零构建ResNet对CIFAR10进行分类 CIFAR10数据集ResNet核心思想网络结构创新点优点应用 ResNet结构代码详解结构代码代码详解BasicBlock 类ResNet 类ResNet18、ResNet34、ResNet50、ResNet101、ResNet152函数 训练过程和测试结果代码汇总resnet.pytrain.pytest.py 前…...

Spring Boot 配置Kafka

1 Kafka Kafka 是由 Linkedin 公司开发的,它是一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布订阅模式的消息引擎系统。 2 Maven依赖 <dependency><groupId>org.springframework.kafka</groupId><…...

基于单片机的火灾报警器 (论文+源码)

1.系统设计 本系统由火灾检测模块、A/D转换模块、信号处理模块、声光报警模块和灭火装置模块组成。火灾检测模块由温度检测和烟雾检测构成&#xff0c;其温度传感器选用DS18B20&#xff0c;烟雾传感器选用MQ-2烟雾传感器。A/D转换模块选用常用的模数转换芯片ADC0832。声光报警…...

html-to-docx:让HTML转Word不再头疼的开源解决方案

html-to-docx&#xff1a;让HTML转Word不再头疼的开源解决方案 【免费下载链接】html-to-docx HTML to DOCX converter 项目地址: https://gitcode.com/gh_mirrors/ht/html-to-docx 在数字化办公的浪潮中&#xff0c;文档格式转换已成为企业和个人的日常需求。据行业调研…...

论文阅读 AIED 2024 Coding with AI: How Are Tools Like ChatGPT Being Used by Students in Foundational Pro

总目录 大模型相关研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 Coding with AI: How Are Tools Like ChatGPT Being Used by Students in Foundational Programming Courses https://link.springer.com/chapter/10.1007/978-3-031-64299-9_20…...

牙科手术显微镜市场:其中中国市场占比超15%

在口腔诊疗向精细化、微创化演进的进程中&#xff0c;牙科手术显微镜作为核心光学放大设备&#xff0c;凭借其高照度、高景深与高清晰度特性&#xff0c;成为提升根管治疗、牙周手术及种植修复等环节精准性的关键工具。该设备集成连续变倍观察、同轴照明、术野调焦及影像记录系…...

3个核心优势:BG3 Mod Manager的模组管理创新特性

3个核心优势&#xff1a;BG3 Mod Manager的模组管理创新特性 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. This is the only official source! 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager 博德之门3&#xff08;Baldurs Gate 3&…...

无损视频剪辑效率全攻略:5分钟掌握革新性剪辑技术

无损视频剪辑效率全攻略&#xff1a;5分钟掌握革新性剪辑技术 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 你是否曾因视频剪辑软件的漫长渲染过程而错失发布良机&a…...

实战应用:基于快马平台开发完整权限监控应用,保障用户隐私

今天想和大家分享一个非常实用的安卓应用开发实战项目——相册权限监控工具。这个项目的灵感来源于日常生活中大家对隐私保护的关注&#xff0c;特别是最近关于某些应用可能滥用相册权限的讨论。通过InsCode(快马)平台&#xff0c;我们可以快速实现一个完整的解决方案。 项目背…...

Qwen3.5-9B-AWQ-4bit惊艳效果:多对象复杂场景图中主次关系与逻辑推断展示

Qwen3.5-9B-AWQ-4bit惊艳效果&#xff1a;多对象复杂场景图中主次关系与逻辑推断展示 1. 模型能力概览 千问3.5-9B-AWQ-4bit是一款突破性的多模态AI模型&#xff0c;它能够像人类一样"看懂"图片并做出智能分析。不同于传统图像识别工具&#xff0c;这个模型最令人惊…...

分子对接盒子参数智能生成:GetBox-PyMOL-Plugin蛋白质结构分析专业指南

分子对接盒子参数智能生成&#xff1a;GetBox-PyMOL-Plugin蛋白质结构分析专业指南 【免费下载链接】GetBox-PyMOL-Plugin A PyMOL Plugin for calculating docking box for LeDock, AutoDock and AutoDock Vina. 项目地址: https://gitcode.com/gh_mirrors/ge/GetBox-PyMOL-…...

3大场景×5项优化:ComfyUI视频合成VHS_VideoCombine节点全场景应用指南

3大场景5项优化&#xff1a;ComfyUI视频合成VHS_VideoCombine节点全场景应用指南 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 一、基础认知&#xff1a;视频合…...

从一次系统升级说起:聊聊Android PMS如何管理/system/app下的预装应用

Android PMS深度解析&#xff1a;系统预装应用的管理艺术 1. 系统预装应用的特殊地位 在Android生态系统中&#xff0c;预装应用占据着独特的位置。这些位于/system/app目录下的应用与普通用户应用有着本质区别&#xff1a; 系统级权限&#xff1a;预装应用通常拥有更高的系统权…...