使用自定义函数实现数据编解码、格式处理与业务告警

news2024/11/24 12:22:46

背景

在物联网平台的设备数据接入场景中,开发者总是希望平台接入的设备数据格式标准统一,以便对数据进行统一处理。在实际情况中,由于业务需要,平台常常会面对不同类型、不同厂商的设备接入。即使设备接入协议已经统一使用 MQTT ,由于 MQTT 协议中对 Payload 格式的宽松定义,应用开发者往往还需要针对不同设备上报格式进行加工处理。尤其在已经出厂的存量设备或是已经部署到现场的设备对接过程中,平台开发者往往无法要求设备侧按照平台的统一标准进行数据上报。因此,平台侧对于设备数据的统一化处理就成为开发过程中的一项重要工作。

设备数据处理常用方法对比

使用全托管 MQTT 消息云服务 EMQX Cloud 进行设备数据接入的过程中,解决数据格式统一化通常有以下几种方案。

数据透传

通过 EMQX Cloud 接入数据后将报文透传到应用侧,在后台业务应用中对各类型数据进行格式转换与处理。这种方式相对最为直接,但对应用开发者最不友好。尤其在数据吞吐量比较大的情况下,后台业务应用既要处理数据格式,又要完成业务处理,对业务端性能也会影响比较大。

通过规则引擎进行数据处理

EMQX Cloud 内置的数据集成规则引擎提供了基于 SQL 语言的规则定义与数据处理能力。开发者可以通过内置函数对数据格式和内容进行处理。这种低代码数据处理方式将数据格式与内容处理前置到消息中间件层,为后台业务应用开发提供了高性能、标准化的数据处理方式。但是受限于规则引擎的内置函数与方法,用户无法实现逻辑相对复杂的数据处理需求,且规则引擎也不支持比较复杂的逻辑判断。

优化方案:自定义函数

为了增强规则引擎数据处理能力,EMQX Cloud 推出了「自定义函数」增值服务。

用户可以通过编写基于 ECMAScript 5.1 及部分 ECMAScript 6 的语法的自定义脚本实现数据处理逻辑,并在 EMQX Cloud 规则引擎中调用,这样就可以完成更加复杂的数据预处理逻辑,并通过规则引擎将函数返回的数据按业务需求流转至消息消费方。

考虑到执行性能对整体消息吞吐性能的影响,EMQX Cloud 提供的自定义函数会对执行脚本进行性能检查,脚本执行时间不能超过 3 秒,否则将无法通过验证。因此我们不建议在脚本中编写高耗时的操作。

在实际场景中使用自定义函数

下面我们通过几个例子来看看自定义函数可以用于哪些业务场景。

数据编解码

在设备数据上报场景中,对于网络带宽受限以及功耗敏感的设备,在数据传输过程中往往会将设备数据通过更加紧凑的十六进制格式进行传输,以便节省带宽和功耗。在平台侧,如果业务应用需要理解上报数据的具体业务意义,则需根据规约将十六进制报文解析成 JSON 格式报文,方便应用开发。

示例

平台需要接入一个智能井盖设备,井盖设备需要定时上传 4 个传感器数据,设备通过十六进制数格式上报到平台,每两个字节代表一个传感器数据:

1

我们通过自定义函数将十六进制数转换为有意义的 JSON 格式,方便后台业务应用对数据进行消费。我们在 EMQX Cloud 中创建一个自定义函数:

2

假如此时设备上报数据为 00011601,Payload 作为入参进入自定义函数输入为 { 0x00, 0x01, 0x16, 0x01};我们以此输入测试函数输出,可以看到结果如下:

3

这样我们就可以通过自定义函数,将设备上报的编码数据格式转化为更为易处理的 JSON 格式供后端业务应用消费。

数据格式处理

在设备数据上报过程中,数据上传通常会以比较简单的格式进行传输,比如会按默认规定省略一些默认的数据与格式。但对于平台侧应用来说,一般需要能够通过数据处理补齐相关的数据以达成数据格式的标准化。此时我们可以通过自定义函数来实现数据格式补齐。

示例

我们在办公楼的机房内部署了温湿度传感器以用来检测环境数据,传感器通过 MQTT 协议以 JSON 格式的Payload 上报报文到云端平台。数据报文格式如下:

{
  "hum" : 20.0,
  "temp" : 36.5
}

我们希望通过自定义函数对每个上报报文进行单位的补齐,这时可以通过定义如下函数来实现:

4

通过函数测试我们可以看到,输出的数据被添加了相应的单位格式:

5

这样,我们就完成了对上报报文的格式转换工作。

数据告警

除了通过函数处理报文格式外,我们也可以通过逻辑判断实现业务告警。虽然 EMQX 提供的规则引擎也可以进行简单的数值判断,但是相对复杂的逻辑判断与数据处理更适合在自定义函数中进行。

示例

沿用上一个场景的设备数据,我们可以通过判断温度与湿度是否在正常工作状态来设置告警信息。比如机房的正常工作温度在 15 到 40 摄氏度之间,湿度在 30% 到 60% 之间。我们就可以通过在自定义函数中进行判断后,对超过工作温湿度的上报数据进行告警处理。

6

如果我们从传感器上报的实时湿度超过工作范围,我们将得到告警信息。

7

这样,后台应用就可以通过输出的 Warning 信息来进行业务告警处理。

另外在 EMQX Cloud 规则引擎中调用自定义函数可以支持多个入参,比如 Topic、ClinetID 等。用户可以结合各种设备与主题信息进行对报文的加工与处理,在此不一一赘述。

结语

物联网设备接入的业务场景纷繁复杂,EMQX Cloud 提供的自定义函数功能为广大物联网开发者提供了更加灵活的数据处理方式。用户可以在自定义函数中实现相对复杂的数据处理逻辑,通过 EMQX Cloud 服务快速部署函数与设备数据和应用对接,大大提升开发效率。

有关自定义函数的具体使用方法,请参考 EMQX Cloud 官方文档的相关章节。

版权声明: 本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.com/zh/blog/data-codec-using-custom-functions

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/90926.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

傻白探索Chiplet,Chiplet技术带来的“新四化”(三)

目录 一、IP芯片化 二、异质集成(HeteroMaterial Integration) 三、异构集成(HeteroStructure Integration) 四、IO增量化 五、总结 一、IP芯片化 IP(Intelligent Property)是具有知识产权核的集成电…

腾讯前端常考vue面试题(必备)

虚拟DOM的优劣如何? 优点: 保证性能下限: 虚拟DOM可以经过diff找出最小差异,然后批量进行patch,这种操作虽然比不上手动优化,但是比起粗暴的DOM操作性能要好很多,因此虚拟DOM可以保证性能下限无需手动操作DOM: 虚拟DOM的diff和patch都是在一次更新中自动进行的,我们无需手动…

driftingblues2靶机(nmap提权)

环境准备 靶机链接:百度网盘 请输入提取码 提取码:9qkq 虚拟机网络链接模式:桥接模式 攻击机系统:kali linux 2021.1 信息收集 1.探测目标靶机 2.探测目标靶机开放端口和服务 3.用dirsearch扫描目录 dirsearch -u 192.168.…

π120E31兼容Si8620EC-B-IS 双通道数字隔离器

π120E31兼容Si8620EC-B-IS 双通道数字隔离器。具有出色的性能特征和可靠性,整体性能优于光耦和基于其他原理的数字隔离器产品。 传输通道间彼此独立,可实现多种传输方向的配置,可实现3.0kVrms隔离耐压等级和 DC 到 600Mbps 信号传输。该系列…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java校园兼职招聘系统x6u36

毕业设计说实话没有想象当中的那么难,导师也不会说刻意就让你毕设不通过,不让你毕业啥的,你只要不是太过于离谱的,都能通过的。首先你得要对你在大学期间所学到的哪方面比较熟悉,语言比如JAVA、PHP等这些,数…

腾讯会议一直显示正在加入会议如何处理?

我们在使用腾讯会议时,一直显示正在加入会议,但是经过很长时间也没有反应,这该怎么办?下面小编就给大家带来了相关的解决办法,说不定有用。 腾讯会议一直显示正在加入会议怎么办? 1、手机上打开腾讯会议。 …

交易所步入「后FTX 时代」,WEEX唯客等后发新秀拉开补位战?

太阳底下没有新鲜事,11月上旬 FTX此轮的骤然崩溃,再次证明了加密行业没有「大而不能倒」的神话,也在一定程度上引爆了加密行业的信任危机与流动性困境。 但把盖子掀开、暴露出里面的风险,未尝不是一件好事——缺乏风控合规的中心…

【剧前爆米花--爪哇岛寻宝】面向对象的三大特性——封装、继承以及多态的详细剖析(下——封装)。

作者:困了电视剧 专栏:《JavaSE语法与底层详解》 文章分布:这是一篇关于Java面向对象三大特性——封装的文章,在本篇文章中我会分享封装的一些基础概念以及实现。 目录 封装定义和优点 访问限定符实现封装 private限定符 priv…

深度学习-LeNet(第一个卷积神经网络)

文章目录简介数据集模型搭建模型训练模型测试前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 LeNet模型是在1998年提出的一种图像分类模型,应用于支票或邮件编码上的手写…

双模蓝牙MIDI模块BT401的功能简单描述和蓝牙MIDI协议

目录 一、蓝牙MIDI概念和功能简述 蓝牙MIDI,实际上是由苹果公司推广并且应用的,目的是借助于低功耗蓝牙来实现 主机和设备之间的无线连接 。协议的标准也是苹果定的。目前也充分的应用到安卓平台了 二、详细记录--功能说明 2.1 蓝牙MIDI的测试说明--m…

【笔记】计算机组成原理复习重点——篇三

计算机组成原理复习重点笔记 第二篇 计算机系统的硬件结构 第3章 系统总线第4章 存储器第5章 输入输出系统 第3章 系统总线 3.1 总线的基本概念 一、为什么要用总线 计算机的各个系统功能部件连在一起才能协同工作,部件之间不可能采用全互联形式&…

MATLB|基于复杂网络的配电系统微电网优化配置

目录 一、概述 二、系统研究 三、复杂网络框架 四、结果与讨论 五、Matlab代码实现 一、概述 多年来,各个领域的科学家开发了一套广泛的工具:数学、计算和统计,旨在分析、建模和理解网络。网络研究的基础可以追溯到图论的发展&#xff0…

第三方软件测试机构如何选择?

什么是软件产品检测报告? 软件测试机构根据委托方提供的测试需求,对软件进行功能性的检测,保证软件功能能正常运行。 软件产品登记测试也是申请软件产品登记的必要条件,对于买方来说,通过第三方检测机构出具的测试报告…

yolov5修改骨干网络-使用自己搭建的网络-以efficientnetv2为例

yolov5修改骨干网络–原网络说明 yolov5修改骨干网络-使用pytorch自带的网络-以Mobilenet和efficientnet为例 yolov5修改骨干网络-使用自己搭建的网络-以efficientnetv2为例 增加网络的深度depth能够得到更加丰富、复杂的特征并且能够很好的应用到其它任务中。但网络的深度过深…

全面适配 Android12

本文目录 背景技术分析实战总结与展望 背景 2021 年 10 月 5 日 Google 发布 Android12 操作系统,安全性和隐私性大幅提升,各手机厂家陆续更新 Android12 操作系统。 2022 年随着各大 APP 应用市场推动 Android12 适配工作,开发者积极响应…

应用性能监控管理工具

应用程序性能监控 Application Manager 的应用程序性能监控(APM Insight) 使应用程序开发人员和 DevOps 工程师能够了解应用程序性能,并帮助他们在问题影响最终用户之前对其进行故障排除。在应用程序性能问题影响收入之前监控、查明并解决它…

计算机毕设Python+Vue校园社团管理系统(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

PiL测试实战(下)| PiL阶段的闭环测试

前言 上篇我们介绍了单元级软件的PiL测试,对于集成级的PiL测试,其流程和单元阶段基本一致。然而,对于一些带有反馈控制逻辑的集成测试(如电机控制器MCU),PiL阶段会将控制算法(Controller Model…

HeidiSQL连接MySQL失败

HeidiSQL连接MySQL失败故障现象解决方案方案一方案二故障现象 在使用非本地盘的位置上的Heidi SQL工具,远程连接MySQL,发现连接失败,错误的原因是“plugin caching_sha2_password.dll could not be loaded”的解决办法。 解决方案 我们可…

Linux进度条小程序与git

gitLinux进度条小程序缓冲区问题回车换行倒计时小程序进度条程序git什么是gitgit的发展史git的基本操作创建仓库与本地仓库建立联系Linux中git提交代码的三板斧git基础指令Linux进度条小程序 缓冲区问题 编译运行后发现延迟了两秒才出现数字,我们都知道程序中的代码…