CN116668493B - 一种分布式场景下mqtt物联网设备的消息处理*** - Google Patents
一种分布式场景下mqtt物联网设备的消息处理*** Download PDFInfo
- Publication number
- CN116668493B CN116668493B CN202310915373.0A CN202310915373A CN116668493B CN 116668493 B CN116668493 B CN 116668493B CN 202310915373 A CN202310915373 A CN 202310915373A CN 116668493 B CN116668493 B CN 116668493B
- Authority
- CN
- China
- Prior art keywords
- message
- mqtt
- equipment
- module
- server
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000012545 processing Methods 0.000 title claims abstract description 30
- 238000000034 method Methods 0.000 claims abstract description 45
- 230000008569 process Effects 0.000 claims abstract description 22
- 238000004891 communication Methods 0.000 claims abstract description 10
- 238000012544 monitoring process Methods 0.000 claims description 12
- 238000003672 processing method Methods 0.000 claims description 4
- 238000004458 analytical method Methods 0.000 description 7
- 230000005540 biological transmission Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 208000033748 Device issues Diseases 0.000 description 1
- 238000004378 air conditioning Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000004880 explosion Methods 0.000 description 1
- 238000005286 illumination Methods 0.000 description 1
- 239000000047 product Substances 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/12—Protocols specially adapted for proprietary or special-purpose networking environments, e.g. medical networks, sensor networks, networks in vehicles or remote metering networks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/66—Arrangements for connecting between networks having differing types of switching systems, e.g. gateways
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/141—Setup of application sessions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/2866—Architectures; Arrangements
- H04L67/30—Profiles
- H04L67/303—Terminal profiles
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/563—Data redirection of data network streams
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/02—Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- General Health & Medical Sciences (AREA)
- Medical Informatics (AREA)
- Computer And Data Communications (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供了一种分布式场景下mqtt物联网设备的消息处理***,包括mqtt服务端、消息队列、数据库、注册中心、业务模块、mqtt消息模块和缓存中间件;所述mqtt服务端、消息队列、数据库、注册中心、业务模块、mqtt消息模块和缓存中间件部署在项目现场的服务器中;本发明提供在分布式场景下mqtt物联网云平台消息处理方案,通过mqtt服务端来将mqtt设备与软件解耦,使得软件不必局限于单体架构也可以收到上报的消息。通过使用消息队列实现消息模块与业务模块之间的通信,使得部署多个软件模块也可以正常传递消息。最终实现多机部署软件也可以正常处理设备上报的消息。
Description
技术领域
本发明属于物联网数据处理领域,具体涉及一种分布式场景下mqtt物联网设备的消息处理***。
背景技术
目前,物联网已遍及生活,如智能家居、智能医疗、智能农业,智能交通及智慧城市等。海量的物联网设备入网上云,爆发式增长的设备数据信息,传统采用单服务端数据处理的模式,将无法满足大量数据的传输与快速处理的需求。单体架构下一般使用物联网设备直接接入软件提供的端口进行通信,这么做在单机性能到达瓶颈,想要增加服务机器时,由于物联网设备与端口绑定,则需要修改物联网设备绑定的端口,即使通过使用nginx来配置转发来解决响应的问题,但终究会涉及到需要重复配置的问题。
发明内容
发明目的:本发明所要解决的技术问题是针对现有技术的不足,提供一种分布式场景下mqtt物联网设备的消息处理***,包括mqtt服务端、消息队列、数据库、注册中心、业务模块、mqtt消息模块和缓存中间件;
所述mqtt服务端、消息队列、数据库、注册中心、业务模块、mqtt消息模块和缓存中间件部署在项目现场的服务器中;
所述mqtt服务端作为传输mqtt消息的服务器端,与项目现场的mqtt网关设备和服务器中部署的mqtt消息模块建立连接,mqtt网关设备与mqtt消息模块都会监听对应的主题,同时上报消息到对应的主题,当连接mqtt服务端的现场mqtt网关设备(以下统称为网关设备)或者mqtt消息模块发送消息到某一个主题,所有监听所述主题的网关设备或者mqtt消息模块会接收到消息;
所述消息队列通过订阅发布的模式来传递消息,从而将mqtt消息模块与业务模块拆分,业务模块根据设备的不同类型监听不同的主题,mqtt消息模块在监听到设备上报的消息后对消息进行处理,根据上报消息中的设备mac地址在数据库中查询到对应的设备信息与从属关系,将上报消息发布到不同的主题,分发到对应设备类型的主题下,业务模块监听到消息并进行处理,根据接收到的消息中的设备信息,对消息进行解析,由于设备类型比较多,解析的方式也不相同。
所述mqtt消息模块与业务模块在启动时根据配置请求注册中心并且获取mqtt通信模块与业务模块的配置,当***中的模块需要修改配置,比如连接的数据库的地址,或者是连接的数据库的密码等其他信息时,只需要修改注册中心中对应模块的配置项即可,而不是需要登录部署的机器修改配置文件;mqtt消息模块与业务模块启动完成后,业务模块能够通过注册中心远程调用mqtt通信模块来下发指令;
所述数据库用于记录业务中使用的数据,包括设备mac地址、设备间的从属关系、设备上报的数据。
所述缓存中间件用于记录设备类型等一些字典数据,字典数据一般是项目部署时建立好,不会进行修改但是经常需要查询,减少查询数据库的次数,同时用来记录mqtt消息模块与业务模块中需要用到的设备信息的数据,缓存中间件会定时通过查询数据库更新数据。
所述mqtt消息模块用于在mqtt服务器中订阅主题,物联网设备向mqtt服务器上报消息时,mqtt消息模块会接收到对应的消息,然后根据上报消息中的设备mac地址在缓存中间件中查询到设备信息与从属关系,根据设备类型将上报消息发布到不同的主题;
所述业务模块会监听不同的主题,所述主题是在注册中心中预先设置(主题是约定好的,比如dusun.device就是主题,mqtt消息模块与业务模块二者约定好,mqtt消息模块把相关类型的设备向主题发送,业务模块监听主题,接收到消息后就按照对应类型的设备来处理)好的,与项目中使用到的设备的类型有关,配置在注册中心中,当mqtt消息模块在一个主题发布消息后,对应主题的处理方法监听到事件获取对应的消息,根据消息中设备的类型进入到对应设备类型的处理逻辑,最后将处理后的值记录到数据库中。
在项目现场配置mqtt服务端时设置mqtt服务端为项目现场的服务器中的mqtt服务端。
项目现场的物联网设备上报消息经过mqtt网关设备(物联网设备消息上报给网关,网关发送给mqtt服务端)发布到项目现场的服务器的mqtt服务端上。
所述mqtt消息模块监听现场mqtt网关设备发布的主题,在设备上报消息后经过mqtt服务端进入mqtt消息模块,mqtt消息模块对消息进行处理后,根据消息中的设备mac地址查询到设备的名称、设备绑定的关系,然后根据设备的类型将收到的消息发布到不同的消息队列中,从而对收到的消息先进行一次分流。
所述业务模块会监听消息队列的主题,当mqtt消息模块将收到的设备上报的消息发布消息队列后,根据设备的类型来进行不同的处理,从缓存中间件中,得到设备上报的数据并记录到数据库。
由于mqtt消息模块发布消息时使用的是不同的主题,业务模块中不同的主题会有不同的处理逻辑,这里主题主要是用来区分不同的厂商的设备,进入到对应厂商设备的处理逻辑下后,会根据设备的类型来进行不同的处理,得到设备上报的数据并记录到数据库。
所述***能够通过Zigbee开关面板完成消息上报与下发;
mqtt网关设备与zigbee开关面板的关系为:zigbee开关面板作为mqtt网关设备的子设备,mqtt网关设备会定时将zigbee开关面板的状态通过mqtt协议发送给mqtt服务端,同时mqtt网关设备监听到消息后会将消息发送给具体设备;设定mqtt网关设备的mac地址为X,mqtt网关设备发布的主题是/t;
mqtt服务端与mqtt网关设备的关系为:mqtt网关设备将作为mqtt服务端的客户端连接mqtt服务端并进行通信,mqtt网关设备会将消息发布到主题/t下,同时监听地址X的主题,当有消息发送到地址X的主题,mqtt网关设备会接收到消息并处理;
mqtt服务端与mqtt消息模块的关系为:mqtt消息模块作为mqtt服务端的客户端连接mqtt服务端并进行通信, mqtt消息模块监听的主题是/t,同时mqtt消息模块发布的主题不固定,发布的主题是要控制的设备的网关mac地址;
mqtt消息模块与消息队列的关系为:mqtt消息模块与消息队列进行连接,mqtt消息模块会向消息队列的某个队列发送消息;
消息队列与业务模块的关系为:业务模块会与消息队列进行连接,设定业务模块连接的消息队列名称为dusun.device,业务模块会同时监听dusun.device还有其他后缀名为.device的消息队列,每个监听的消息队列会有对应的方法,在方法中处理收到的消息;
业务模块与mqtt消息模块的关系:当业务模块需要控制设备时,会调用mqtt消息模块中的接口下发一条消息,调用接口时除了消息的内容还需要指定目标mqtt网关设备的mac地址,mqtt消息模块会向指定的主题发送生成出来的消息。
有益效果:本发明提供在分布式场景下mqtt物联网云平台消息处理方案,通过mqtt服务端来将mqtt设备与软件解耦,使得软件不必局限于单体架构也可以收到上报的消息。通过使用消息队列实现消息模块与业务模块之间的通信,使得部署多个软件模块也可以正常传递消息。最终实现多机部署软件也可以正常处理设备上报的消息。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
图1是本发明架构示意图。
图2是zigbee设备上报消息与业务模块发送控制设备的全流程图。
图3是业务模块使用红外控制器控制空调的流程图。
图4是使用dtu与485设备通信流程图。
实施方式
如图1所示,本发明提供了一种分布式场景下mqtt物联网设备的消息处理***,包括mqtt服务端、消息队列、数据库、注册中心、业务模块、mqtt消息模块和缓存中间件;
所述mqtt服务端、消息队列、数据库、注册中心、业务模块、mqtt消息模块和缓存中间件部署在项目现场的服务器中;
所述mqtt服务端作为传输mqtt消息的服务器端,与项目现场的mqtt网关设备和服务器中部署的mqtt消息模块建立连接,mqtt网关设备与mqtt消息模块都会监听对应的主题,同时上报消息到对应的主题,当连接mqtt服务端的现场mqtt网关设备(以下统称为网关设备)或者mqtt消息模块发送消息到某一个主题,所有监听所述主题的网关设备或者mqtt消息模块会接收到消息;
所述消息队列通过订阅发布的模式来传递消息,从而将mqtt消息模块与业务模块拆分,业务模块根据设备的不同类型监听不同的主题,mqtt消息模块在监听到设备上报的消息后对消息进行处理(处理逻辑参见实施例,主要就是根据上报的消息中带有的网关设备的mac地址、子设备的mac地址,查询数据库与缓存,查出来这个消息是从哪一个网关的哪一个设备上传上来的,发送这个消息的子设备的设备名称与设备类型是什么。在mqtt消息模块中根据设备上报消息的设备与网关设备类型,将消息分发给不同的主题,在业务模块中会由不同的方法处理;子设备实际就是连接网关的设备并且通过网关上报消息),根据上报消息中的设备mac地址在数据库中查询到对应的设备信息与从属关系,将上报消息发布到不同的主题,分发到对应设备类型的主题下,业务模块监听到消息并进行处理,根据接收到的消息中的设备信息,对消息进行解析,由于设备类型比较多,解析的方式也不相同,假如设备是一个485的电表,那么是使用一个485转zigbee的dtu设备来进行转发的,电表的消息通过所述dtu设备会上报给网关设备,网关设备再将上报上来的消息发送给mqtt服务端,这一过程中最开始的电表设备的消息会层层包装,解析的时候需要先拿到485设备的数据,拿到这个数据后电表也有电表的解析逻辑,以上述电表为例:需要先拿到功能码,如果功能码是查询,就继续解析,如果是查询总有功电能,拿到数据位(报文中表示数据的那几位16进制数,再转为10进制)再根据协议中的计算规则计算,如果协议中说明实际值为0.01*数据位(kwh),那么用数据位*0.01就可以得到当前的总有功电能;如果设备是一个zigbee的设备,它上报的消息中会有一个attribute的字段,这个字段表示这条消息所上报数据的内容,并且这个字段的值是设备约定好的,那么解析的时候只需要先拿到这个字段中的值是多少,再与约定好的值比较,就可以知道这个消息是要上报什么信息。
所述mqtt消息模块与业务模块在启动时根据配置请求注册中心并且获取mqtt通信模块与业务模块的配置,当***中的模块需要修改配置,比如连接的数据库的地址,或者是连接的数据库的密码等其他信息时,只需要修改注册中心中对应模块的配置项即可,而不是需要登录部署的机器修改配置文件;mqtt消息模块与业务模块启动完成后,业务模块能够通过注册中心远程调用mqtt通信模块来下发指令;
所述数据库用于记录业务中使用的数据,包括设备mac地址、设备间的从属关系、设备上报的数据。
所述缓存中间件用于记录设备类型等一些字典数据,字典数据一般是项目部署时建立好,不会进行修改但是经常需要查询,减少查询数据库的次数,同时用来记录mqtt消息模块与业务模块中需要用到的设备信息的数据,缓存中间件会定时通过查询数据库更新数据。
所述mqtt消息模块用于在mqtt服务器中订阅主题,物联网设备向mqtt服务器上报消息时,mqtt消息模块会接收到对应的消息,然后根据上报消息中的设备mac地址在缓存中间件中查询到设备信息与从属关系,根据设备类型将上报消息发布到不同的主题;
所述业务模块会监听不同的主题,所述主题是在注册中心中预先设置(主题是约定好的,比如dusun.device就是主题,mqtt消息模块与业务模块二者约定好,mqtt消息模块把相关类型的设备向主题发送,业务模块监听主题,接收到消息后就按照对应类型的设备来处理)好的,与项目中使用到的设备的类型有关,配置在注册中心中,当mqtt消息模块在一个主题发布消息后,对应主题的处理方法监听到事件获取对应的消息,根据消息中设备的类型进入到对应设备类型的处理逻辑,最后将处理后的值记录到数据库中。
在项目现场配置mqtt服务端时设置mqtt服务端为项目现场的服务器中的mqtt服务端。
项目现场的物联网设备上报消息经过mqtt网关设备(物联网设备消息上报给网关,网关发送给mqtt服务端)发布到项目现场的服务器的mqtt服务端上。
所述mqtt消息模块监听现场mqtt网关设备发布的主题,在设备上报消息后经过mqtt服务端进入mqtt消息模块,mqtt消息模块对消息进行处理后,根据消息中的设备mac地址查询到设备的名称、设备绑定的关系,然后根据设备的类型将收到的消息发布到不同的消息队列中,从而对收到的消息先进行一次分流。
所述业务模块会监听消息队列的主题,当mqtt消息模块将收到的设备上报的消息发布消息队列后,根据设备的类型来进行不同的处理,从缓存中间件中,得到设备上报的数据并记录到数据库。
由于mqtt消息模块发布消息时使用的是不同的主题,业务模块中不同的主题会有不同的处理逻辑,这里主题主要是用来区分不同的厂商的设备,进入到对应厂商设备的处理逻辑下后,会根据设备的类型来进行不同的处理,得到设备上报的数据并记录到数据库。
所述***能够通过Zigbee开关面板完成消息上报与下发;
mqtt网关设备与zigbee开关面板的关系为:zigbee开关面板作为mqtt网关设备的子设备,mqtt网关设备会定时将zigbee开关面板的状态通过mqtt协议发送给mqtt服务端,同时mqtt网关设备监听到消息后会将消息发送给具体设备;设定mqtt网关设备的mac地址为X,mqtt网关设备发布的主题是/t;
mqtt服务端与mqtt网关设备的关系为:mqtt网关设备将作为mqtt服务端的客户端连接mqtt服务端并进行通信,mqtt网关设备会将消息发布到主题/t下,同时监听地址X的主题,当有消息发送到地址X的主题,mqtt网关设备会接收到消息并处理;
mqtt服务端与mqtt消息模块的关系为:mqtt消息模块作为mqtt服务端的客户端连接mqtt服务端并进行通信, mqtt消息模块监听的主题是/t,同时mqtt消息模块发布的主题不固定,发布的主题是要控制的设备的网关mac地址;
mqtt消息模块与消息队列的关系为:mqtt消息模块与消息队列进行连接,mqtt消息模块会向消息队列的某个队列发送消息;
消息队列与业务模块的关系为:业务模块会与消息队列进行连接,设定业务模块连接的消息队列名称为dusun.device,业务模块会同时监听dusun.device还有其他后缀名为.device的消息队列,每个监听的消息队列会有对应的方法,在方法中处理收到的消息;
业务模块与mqtt消息模块的关系:当业务模块需要控制设备时,会调用mqtt消息模块中的接口下发一条消息,调用接口时除了消息的内容还需要指定目标mqtt网关设备的mac地址,mqtt消息模块会向指定的主题发送生成出来的消息。
当处理消息到达瓶颈,由于采用微服务,可以通过增加相应的模块来增加处理消息的能力。
实施例,本实施例提供了一种分布式场景下mqtt物联网设备的消息处理***,所述***通过Zigbee开关面板完成消息上报与下发(通过mqtt网关设备上报消息):
设备关系如图2所示:
设备:
mqtt网关设备的mac地址:30:ae:7b:26:2d:5a 品牌:东胜;
Zigbee开关面板的mac地址:f4e5a4c138a321fe 品牌:东胜 设备名称:大厅照明;
关系:
mqtt网关设备与zigbee开关面板的关系为:zigbee开关面板作为mqtt网关设备的子设备,mqtt网关设备会定时将zigbee开关面板的状态通过mqtt协议发送给mqtt服务端,同时mqtt网关设备监听到消息后会将消息发送给具体设备;
mqtt服务端与mqtt网关设备的关系为:mqtt网关设备将连接mqtt服务端并通信,mqtt网关设备会将消息发布到 /t 的主题下,同时监听 /30:ae:7b:26:2d:5a 的主题,当有消息发送到 /30:ae:7b:26:2d:5a 的主题,mqtt网关设备会接收到消息并处理,具体处理逻辑下面会使用详细的消息来解释。
mqtt服务端与mqtt消息模块的关系为:mqtt消息模块作为客户端连接mqtt服务端并通信,但是mqtt消息模块监听的主题是 /t (也就是监听网关上报的消息,因为网关发布的主题是 /t)。同时mqtt消息模块发布的主题不固定,发布的主题是要控制的设备的网关mac地址,在本次示例中是 /30:ae:7b:26:2d:5a ;
mqtt消息模块与消息队列的关系为:mqtt消息模块与消息队列进行连接,mqtt消息模块会向消息队列的某个队列发送消息,比如在本次示例中会向dusun.device发送消息;
消息队列与业务模块的关系为:业务模块会与消息队列进行连接,设定业务模块连接的消息队列名称为dusun.device,业务模块会同时监听dusun.device还有其他后缀名为.device的消息队列,每个监听的队列会有对应的方法,在方法中处理收到的消息;
业务模块与Mqtt消息模块的关系:当业务模块需要控制设备时会调用Mqtt消息模块中的接口下发一条消息(具体的消息内容会在示例中说明),调用接口时除了消息的内容也需要指定目标mqtt网关设备的mac地址(即目标mqtt网关设备订阅的主题),mqtt消息模块会向指定的主题发送生成出来的消息。
示例:
mqtt网关设备上报了条消息给mqtt服务端,其中"mac":"30:ae:7b:26:2d:5a" 表示的是上报消息的这个mqtt网关设备的mac地址, "mac":"f4e5a4c138a321fe"表示的是该网关下这个设备(即zigbee开关面板)的消息,"attribute":"device.light.onoff" 表示的是这条消息是上报zigbee开关面板的状态,"value":0表示的是该zigbee开关面板的状态为关:
{
"from":"GREENPOWER",
"to":"CLOUD",
"deviceCode":"dd589622-3e6f-4b45-bca0-65412791e3ea",
"data":{
"attribute":"device.light.onoff",
"value":{
"ModelStr":"HY0143",
"ep":1,
"zone":"HY0143",
"value":0,
"battery":100
},
"mac":"f4e5a4c138a321fe",
"ep":1
},
"mac":"30:ae:7b:26:2d:5a",
"type":"reportAttribute",
"time":1686758496
}
上报的消息主题为 /t 消息发送到mqtt服务端后,监听/t主题的mqtt消息模块接收到上述消息内容,根据 "mac":"30:ae:7b:26:2d:5a"这条信息,从缓存数据库中查询到该设备的品牌是东胜的;根据"mac":"f4e5a4c138a321fe"这条信息,查询到该消息是zigbee开关面板上报的消息。那么mqtt消息模块会将该消息发送给消息队列中dusun.device的这一条队列的第1个通道中。
在业务模块中监听dusun.device的处理方法在收到上面的这条消息后会根据通道数为1直接进入处理zigbee开关面板设备的方法下,根据"attribute":"device.light.onoff",判断为上报;
zigbee开关面板设备状态,根据"value":0判断状态是关,根据"mac":"f4e5a4c138a321fe"从缓存数据库中查出该设备的名称是大厅照明,修改mysql数据库中对应设备记录的状态值为0(即关闭),将该设备的这一条上报数据记录到mysql数据库表中。
当要控制这个设备开的时候(即要开灯时),业务模块会从缓存数据库中查询设备的mac地址,设备的类型,设备绑定的网关,根据查出来设备类型是zigbee开关面板会生成对应的报文:如下。"attribute":"device.onoff"表示要控制zigbee开关面板的开关,该属性是设备提供的,相当于设备提供方法,"value":1表示zigbee开关面板的状态为开:
{
"data":{
"id":"1686904208767-3kai-ep2-1",
"command":"setAttribute",
"arguments":{
"mac":"f4e5a4c138a321fe",
"ep":"2",
"attribute":"device.onoff",
"value":{
"value":1
}
}
},
"deviceCode":"123",
"from":"CLOUD",
"mac":"30:ae:7b:26:2d:5a",
"time":1686904208,
"to":"NXP",
"type":"cmd"
}
所述***能对普通空调设备进行控制(通过红外控制器控制设备):
设备关系如图3所示,红外控制器与网关略有不同,普通空调无法主动上报状态,没有解析上报消息的过程。主要是使用红外控制器来模拟普通空调的遥控器,类似于万能遥控器的用法,部署前需要提前设备好红外控制器的codeid与品牌,对应万能遥控器就是需要先匹配型号;
比如现在要设置空调为25度、开的状态:
"brand_id":2表示为海尔的空调;
"code_id":555表示红外控制器用555的编码发送;
控制的报文下:
{
"cmd":"ir_send_code_id",
"params":[
{
"product":"arc",
"brand_id":2,
"code_id":555,
"key_param":[
19,
1,
1,
1,
1,
1,
1
]
}
]
}
所述***能够对智能电表的数据解析(通过mqtt转485的rtu转发消息):
设备关系如图4所示,电表设备的逻辑与Zigbee开关面板的消息上报与下发中说的开关基本一致,不同点如下:
Zigbee开关面板的消息上报与下发中所说的zigbee开关面板功能较为简单,而且可以直接连接网关,智能电表只有485串口连接的方式,所以使用dtu(数据传输单元)来将mqtt消息和485消息双向转换,二者消息的不同会在下面补充。
Zigbee开关面板的消息上报与下发中的解析也比较简单直接在消息中取值即可,电表数据使用的是modbus协议,本来应该是走tcp传输的,但是本发明使用dtu将报文包装成mqtt消息的格式,解析时要先拿到modbus报文再按照协议解析对应位置的数据。
具体步骤如下:
由于电表不会主动上报消息,所以需要业务模块定时发送查询的任务,触发查询任务后生成消息,主题为t/30:ae:7b:e2:e7:45 消息的内容如下:
{
"mac":"30:ae:7b:e2:e7:45",
"type":"cmd",
"time":1686758401,
"from":"CLOUD",
"deviceCode":"",
"data":{
"command":"setAttribute",
"arguments":{
"mac":"b4e3f9fffed13a1d",
"value":{
"portindex":1,
"data":"ce0300000002d5f4",
"manufacturerId":"1216"
},
"attribute":"device.485.data",
"ep":1
},
"id":"1686758401159-smartelectric-ce0300000002d5f4"
},
"to":"NXP"
}
上述报文中"mac":"30:ae:7b:e2:e7:45"就是目标的网关设备的mac地址(mqtt网关);
而"mac":"b4e3f9fffed13a1d"表示的是dtu的mac地址,就是告诉网关设备这条消息要转发网关下mac地址为b4e3f9fffed13a1d的设备,"attribute":"device.485.data"是dtu设备提供的方法,表示为485数据,"portindex":1表示的是dtu连接的位置,该dtu设备可以连接两个458设备,1表示发送给连接位置是1的那个设备。
"data":"ce0300000002d5f4"中"ce0300000002d5f4"的内容就是要发送给该dtu所连接设备的报文,也就是本次示例中电表实际所接收到的数据,而这一条消息的内容就是查询电表的总电能,这个报文的由来是按照电报设备提供的协议拼出来的,如果需要解释那我再补充。
电表设备收到改报文后会执行该设备内部的操作,对于本次示例就是查询出总电脑,再发送给dtu,如ce030400004adcf3c6,这个是电表发送给dtu的报文表示的就是查询结果。dtu上报给网关的报文为:01ce030400004adcf3c6,在原有报文的基础上拼接了01,表示是1号位置的485设备。报文经过网关会发送到/t主题下:
{
"data":{
"attribute":"device.485.data",
"mac":"b4e3f9fffed13a1d",
"ep":1,
"value":{
"data":"01ce030400004adcf3c6",
"ep":1,
"battery":100,
"ModelStr":"RoomBank-ModbusModule",
"manufacturerId":4630,
"portindex":1,
"zone":"RoomBank-ModbusModule"
}
},
"from":"GREENPOWER",
"mac":"30:ae:7b:e2:e7:45",
"deviceCode":"912457c7-0c89-be5d-cc3c-9b63a4c345a9",
"to":"CLOUD",
"type":"reportAttribute",
"time":1686759301
}
消息经过mqtt服务端到达mqtt消息模块已经进入消息队列到达业务模块的过程基本一致,主要区别在于最后数据处理的部分,由于是dtu的设备,首先需要去掉01剩下的就是modbus报文,经过校验确认报文无误后按照电表设备提供的协议来解析即可。
本发明提供了一种分布式场景下mqtt物联网设备的消息处理***,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。
Claims (1)
1.一种分布式场景下mqtt物联网设备的消息处理***,其特征在于,包括mqtt服务端、消息队列、数据库、注册中心、业务模块、mqtt消息模块和缓存中间件;
所述mqtt服务端、消息队列、数据库、注册中心、业务模块、mqtt消息模块和缓存中间件部署在项目现场的服务器中;
所述mqtt服务端作为传输mqtt消息的服务器端,与项目现场的mqtt网关设备和服务器中部署的mqtt消息模块建立连接,mqtt网关设备与mqtt消息模块都会监听对应的主题,同时上报消息到对应的主题,当连接mqtt服务端的现场mqtt网关设备或者mqtt消息模块发送消息到一个主题,所有监听所述主题的网关设备或者mqtt消息模块会接收到消息;
所述消息队列通过订阅发布的模式来传递消息,从而将mqtt消息模块与业务模块拆分,业务模块根据设备的类型不同监听不同的主题,mqtt消息模块在监听到设备上报的消息后对消息进行处理,根据上报消息中的设备mac地址在数据库中查询到对应的设备信息与从属关系,将上报消息发布到不同的主题,分发到对应设备类型的主题下,业务模块监听到消息并进行处理,根据接收到的消息中的设备信息,对消息进行解析;
所述mqtt消息模块与业务模块在启动时根据配置请求注册中心并且获取mqtt通信模块与业务模块的配置,当***中的模块需要修改配置,只需要修改注册中心中对应模块的配置项;mqtt消息模块与业务模块启动完成后,业务模块能够通过注册中心远程调用mqtt通信模块来下发指令;
所述数据库用于记录业务中使用的数据,包括设备mac地址、设备间的从属关系、设备上报的数据;
所述缓存中间件用于记录字典数据,同时用来记录mqtt消息模块与业务模块中需要用到的设备信息的数据,缓存中间件会定时通过查询数据库更新数据;
所述mqtt消息模块用于在mqtt服务器中订阅主题,物联网设备向mqtt服务器上报消息时,mqtt消息模块会接收到对应的消息,然后根据上报消息中的设备mac地址在缓存中间件中查询到设备信息与从属关系,根据设备类型将上报消息发布到不同的主题;
所述业务模块会监听不同的主题,所述主题是在注册中心中预先设置好的,配置在注册中心中,当mqtt消息模块在一个主题发布消息后,对应主题的处理方法监听到事件获取对应的消息,根据消息中设备的类型进入到对应设备类型的处理逻辑,最后将处理后的值记录到数据库中;
在项目现场配置mqtt服务端时设置mqtt服务端为项目现场的服务器中的mqtt服务端;
项目现场的物联网设备上报消息经过mqtt网关设备发布到项目现场的服务器的mqtt服务端上;
所述mqtt消息模块监听现场mqtt网关设备发布的主题,在设备上报消息后经过mqtt服务端进入mqtt消息模块,mqtt消息模块对消息进行处理后,根据消息中的设备mac地址查询到设备的名称、设备绑定的关系,然后根据设备的类型将收到的消息发布到不同的消息队列中,从而对收到的消息先进行一次分流;
所述业务模块会监听消息队列的主题,当mqtt消息模块将收到的设备上报的消息发布消息队列后,根据设备的类型来进行不同的处理,从缓存中间件中,得到设备上报的数据并记录到数据库;
所述***能够通过Zigbee开关面板完成消息上报与下发;
mqtt网关设备与zigbee开关面板的关系为:zigbee开关面板作为mqtt网关设备的子设备,mqtt网关设备会定时将zigbee开关面板的状态通过mqtt协议发送给mqtt服务端,同时mqtt网关设备监听到消息后会将消息发送给具体设备;设定mqtt网关设备的mac地址为X,mqtt网关设备发布的主题是/t;
mqtt服务端与mqtt网关设备的关系为:mqtt网关设备将作为mqtt服务端的客户端连接mqtt服务端并进行通信,mqtt网关设备会将消息发布到主题/t下,同时监听地址X的主题,当有消息发送到地址X的主题,mqtt网关设备会接收到消息并处理;
mqtt服务端与mqtt消息模块的关系为:mqtt消息模块作为mqtt服务端的客户端连接mqtt服务端并进行通信,mqtt消息模块监听的主题是/t,同时mqtt消息模块发布的主题不固定,发布的主题是要控制的设备的网关mac地址;
mqtt消息模块与消息队列的关系为:mqtt消息模块与消息队列进行连接,mqtt消息模块会向消息队列的某个队列发送消息;
消息队列与业务模块的关系为:业务模块会与消息队列进行连接,设定业务模块连接的消息队列名称为dusun.device,业务模块会同时监听dusun.device还有其他后缀名为.device的消息队列,每个监听的消息队列会有对应的方法,在方法中处理收到的消息;
业务模块与mqtt消息模块的关系:当业务模块需要控制设备时,会调用mqtt消息模块中的接口下发一条消息,调用接口时除了消息的内容还需要指定目标mqtt网关设备的mac地址,mqtt消息模块会向指定的主题发送生成出来的消息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310915373.0A CN116668493B (zh) | 2023-07-25 | 2023-07-25 | 一种分布式场景下mqtt物联网设备的消息处理*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310915373.0A CN116668493B (zh) | 2023-07-25 | 2023-07-25 | 一种分布式场景下mqtt物联网设备的消息处理*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116668493A CN116668493A (zh) | 2023-08-29 |
CN116668493B true CN116668493B (zh) | 2023-10-24 |
Family
ID=87712082
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310915373.0A Active CN116668493B (zh) | 2023-07-25 | 2023-07-25 | 一种分布式场景下mqtt物联网设备的消息处理*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116668493B (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104092767A (zh) * | 2014-07-21 | 2014-10-08 | 北京邮电大学 | 一种增加消息队列模型的发布/订阅***及其工作方法 |
CN109274730A (zh) * | 2018-09-04 | 2019-01-25 | 上海联寓智能科技有限公司 | 物联网***、mqtt消息传输的优化方法及装置 |
CN109861978A (zh) * | 2018-12-28 | 2019-06-07 | 浙江工业大学 | 一种基于MQTT协议的物联网SaaS平台 |
CN112600881A (zh) * | 2020-12-01 | 2021-04-02 | 珠海格力电器股份有限公司 | 提供物联网服务的方法、设备、服务器及存储介质 |
CN113329042A (zh) * | 2020-02-12 | 2021-08-31 | 斑马智行网络(香港)有限公司 | 消息处理方法及***、车联网***、服务器、电子设备 |
CN114338746A (zh) * | 2021-12-30 | 2022-04-12 | 以萨技术股份有限公司 | 一种用于物联网设备数据收集的分析预警方法及*** |
CN114938388A (zh) * | 2022-07-22 | 2022-08-23 | 浙江中控技术股份有限公司 | 分布式数据的传输方法、装置、***及存储介质 |
CN115361447A (zh) * | 2022-08-09 | 2022-11-18 | 神州顶联科技有限公司 | 一种水运营计费设备的物联网网关数据处理方法 |
CN116248746A (zh) * | 2023-01-12 | 2023-06-09 | 青岛海尔智能家电科技有限公司 | 基于mqtt的数据处理方法、装置和计算机可读的存储介质 |
CN116319732A (zh) * | 2022-09-07 | 2023-06-23 | 本溪钢铁(集团)信息自动化有限责任公司 | 一种基于RabbitMQ的消息队列集中配置管理***及方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9674127B2 (en) * | 2014-09-23 | 2017-06-06 | International Business Machines Corporation | Selective message republishing to subscriber subsets in a publish-subscribe model |
US20200027096A1 (en) * | 2017-11-07 | 2020-01-23 | Jason Ryan Cooner | System, business and technical methods, and article of manufacture for utilizing internet of things technology in energy management systems designed to automate the process of generating and/or monetizing carbon credits |
US11928626B2 (en) * | 2021-01-07 | 2024-03-12 | The Toronto-Dominion Bank | System and method for persisting data generated in executing a process workflow |
-
2023
- 2023-07-25 CN CN202310915373.0A patent/CN116668493B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104092767A (zh) * | 2014-07-21 | 2014-10-08 | 北京邮电大学 | 一种增加消息队列模型的发布/订阅***及其工作方法 |
CN109274730A (zh) * | 2018-09-04 | 2019-01-25 | 上海联寓智能科技有限公司 | 物联网***、mqtt消息传输的优化方法及装置 |
CN109861978A (zh) * | 2018-12-28 | 2019-06-07 | 浙江工业大学 | 一种基于MQTT协议的物联网SaaS平台 |
CN113329042A (zh) * | 2020-02-12 | 2021-08-31 | 斑马智行网络(香港)有限公司 | 消息处理方法及***、车联网***、服务器、电子设备 |
CN112600881A (zh) * | 2020-12-01 | 2021-04-02 | 珠海格力电器股份有限公司 | 提供物联网服务的方法、设备、服务器及存储介质 |
CN114338746A (zh) * | 2021-12-30 | 2022-04-12 | 以萨技术股份有限公司 | 一种用于物联网设备数据收集的分析预警方法及*** |
CN114938388A (zh) * | 2022-07-22 | 2022-08-23 | 浙江中控技术股份有限公司 | 分布式数据的传输方法、装置、***及存储介质 |
CN115361447A (zh) * | 2022-08-09 | 2022-11-18 | 神州顶联科技有限公司 | 一种水运营计费设备的物联网网关数据处理方法 |
CN116319732A (zh) * | 2022-09-07 | 2023-06-23 | 本溪钢铁(集团)信息自动化有限责任公司 | 一种基于RabbitMQ的消息队列集中配置管理***及方法 |
CN116248746A (zh) * | 2023-01-12 | 2023-06-09 | 青岛海尔智能家电科技有限公司 | 基于mqtt的数据处理方法、装置和计算机可读的存储介质 |
Non-Patent Citations (1)
Title |
---|
基于MQTT协议的物联网通信***的研究与实现;姚丹;谢雪松;杨建军;Han Fei;Wang Shuai;;信息通信(第03期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN116668493A (zh) | 2023-08-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102297493B (zh) | 监控空调机组的***和方法 | |
CN105371426A (zh) | 一种智能空气净化***及其使用方法 | |
KR20040104321A (ko) | 홈 네트워크 시스템 | |
WO2018196655A1 (zh) | 一种车载电子处理单元***公共网络通讯方法 | |
KR20040104305A (ko) | 홈 네트워크 시스템의 변환장치 | |
CN112671638A (zh) | 一种用于多协议转换的网关结构 | |
KR20130096603A (ko) | 빌딩 자동제어 시스템 및 이의 운전 방법 | |
CN106549864A (zh) | 一种云网关及其通信方法 | |
CN115567895A (zh) | Ota软件更新数据传输方法及*** | |
CN108449246A (zh) | 一种基于即时通讯软件与物联网通信的智能家居*** | |
CN116668493B (zh) | 一种分布式场景下mqtt物联网设备的消息处理*** | |
CN110708239A (zh) | 一种基于opc和mqtt的工业物联网网关 | |
CN110740169A (zh) | 一种Matlab电力仿真模型与物联网设备数据通信***及方法 | |
CN111817897A (zh) | 可配置网关的采集传输监控***及采集传输监控方法 | |
CN109600420B (zh) | 一种基于树莓派技术实现在线远程控制的方法及*** | |
CN108156063B (zh) | 用于控制从属控制器的操作的装置和方法 | |
WO2014000383A1 (zh) | 工程机械参数监控***及方法 | |
EP4131986A1 (en) | Air conditioning system | |
CN110445642B (zh) | 一种跨总线维护飞参***的通讯方法 | |
CN114866876A (zh) | 一种用于ffu的物联网*** | |
CN108224685A (zh) | 基于电力载波的空调远程控制*** | |
CN111176171A (zh) | 一种基于分布式云架构的楼宇物联网数据采集装置 | |
CN113645108B (zh) | 一种智能家居设备监控***及方法 | |
JP3855618B2 (ja) | 分散型ビル管理システム | |
US6948167B1 (en) | Data exchange method in a multi-processor system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |