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

简介: MQTT消息云服务EMQX Cloud推出自定义函数新功能,为物联网数据格式统一化提供更灵活的处理方式,帮助提升开发效率。

背景

在物联网平台的设备数据接入场景中,开发者总是希望平台接入的设备数据格式标准统一,以便对数据进行统一处理。在实际情况中,由于业务需要,平台常常会面对不同类型、不同厂商的设备接入。即使设备接入协议已经统一使用 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.png

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

在 EMQX Cloud 中创建一个自定义函数 图2.png

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

自定义函数输出 图3.png

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

数据格式处理

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

示例

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

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

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

通过自定义函数对每个上报报文进行单位的补齐 图4.png

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

自定义函数输出 图5.png

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

数据告警

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

示例

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

自定义函数设置数据告警 图6.png

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

自定义函数输出告警信息 图7.png

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

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

结语

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

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

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

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
5月前
|
SQL 运维 监控
SLS 数据加工全面升级,集成 SPL 语法
在系统开发、运维过程中,日志是最重要的信息之一,其最大的优点是简单直接。SLS 数据加工功能旨在解决非结构化的日志数据处理,当前全面升级,集成 SPL 语言、更强的数据处理性能、更优的使用成本。
18192 141
|
JSON 数据可视化 IDE
2019-nCov疫情实时趋势数据可视化Echarts学习(2):获取API数据接口后数据的清洗、处理及JSON标准格式的输出
2019-nCov疫情实时趋势数据可视化Echarts学习(2):获取API数据接口后数据的清洗、处理及JSON标准格式的输出
163 0
|
数据安全/隐私保护
Mindopt上新数据脱敏功能,方便外发数据
V0.24.0版本的MindOpt优化求解器新增了数据脱敏功能,可以对输入模型文件进行数据脱敏。将优化问题中问题名、决策变量、约束条件名称这些和业务场景相关的数据进行脱敏变更,使得优化问题的数据仅保留看不出用途的数值信息,隐藏业务信息。方便外发数据去做技术可行性验证、方案咨询、测试等。
Mindopt上新数据脱敏功能,方便外发数据
EMQ
|
SQL JSON 监控
连接格式优化,支持自定义
12月eKuiper团队继续专注于1.8.0版本新功能的开发,重构了外部连接(source/sink)的格式机制,更加清晰地分离了连接、格式和Schema,同时支持了格式的自定义。
EMQ
140 0
连接格式优化,支持自定义
|
数据采集 分布式计算 监控
网站流量日志分析—数据入库—含义和 ETL 本质解释|学习笔记
快速学习网站流量日志分析—数据入库—含义和 ETL 本质解释
428 0
网站流量日志分析—数据入库—含义和 ETL 本质解释|学习笔记
|
数据采集 编解码 运维
SLS数据加工实现Hashids库对数据进行编码
Hashids是一个非常小巧的跨语言的开源库,它可以将数字编码成一个简短、唯一、非顺序的ID。
231 0
|
存储 XML JSON
SLS 数据加工“数据编码、解码”实践
在数据的生命周期基本可以概括为生成、传输、计算、存储、展示这么几个流程,每个流程可能会重复执行。在这整周期中,为了便捷性、安全性、执行效率等各个方面的考量,我们会引入各种各样的编码方式,比如图片的JPEG格式、文本的UTF-8编码、访问网址参数需要URL编码等。
254 0
SLS 数据加工“数据编码、解码”实践
|
SQL 监控 Java
SLS新增单位转换函数——消除数据转换烦恼
在日常工作中,经常会遇到数据单位或时间单位不一致的情况,当处理或分析此类数据时,往往费事费力,非常麻烦。 现在,SLS新增了单位转换函数,可以实现在不同单位之间轻松地进行转换、统一单位、格式化为可读文本,为用户减少不必要的数据转换工作,提升分析效率。
595 0
|
SQL JSON 监控
日志服务数据加工:功能概述
日志服务数据加工:功能概述
14218 0
|
数据格式 JSON 监控
日志服务数据加工最佳实践: 特定格式文本的加工
本篇介绍日志服务数据加工最佳实践: 特定格式文本的数据加工, 覆盖非标准JSON对象, XML文本, 类Logstash配置等
1541 0
日志服务数据加工最佳实践: 特定格式文本的加工