一文读懂物联网的灵魂MQTT

一文读懂物联网的灵魂MQTT,第1张

名词释义:

MQTT——Message Queuing Telemetry Transport消息队列遥测传输

PUB——Publish发布

QoS——Quality of Service服务质量

LWT——Last Will & Testament最后遗嘱

MQTT简介

32 通配符

MQTT 中有两个可用的通配符,分别是+和#,+表示匹配单一层级中的任意主题,#表示匹配任意数量的层次。

33 服务质量(QoS)

MQTT 的设计初衷是为了在不可靠的网络中运作良好,为不同的场景提供了三个级别的服务质量,允许客户端指定自己想要的可靠性级别。

331 QoS Level 0:至多一次

这是最简单的级别,无需客户端确认,其可靠性与基础网络层 TCP/IP 一致。

332 QoS Level 1:至少一次,有可能重复

确保至少向客户端发送一次信息,不过也可发送多次;在接收数据包时,需要客户端返回确认消息(ACK 包)。这种方式常用于传递确保交付的信息,但开发人员必须确保其系统可以处理重复的数据包。

333 QoS Level 2:只有一次,确保消息只到达一次

这是最不常见的服务质量级别,确保消息发送且仅发送一次。这种方法需要交换4个数据包,同时也会降低消息代理的性能。由于相对比较复杂,在 MQTT 实现中通常会忽略这个级别,请确保在选择数据库或消息代理前检查这个问题。

34 “临终遗嘱”信息

MQTT提供了检测方式,利用KeepAlive机制在客户端异常断开时发现问题。因此当客户端电量耗尽、崩溃或者网络断开时,消息代理会采取相应措施。

客户端会向任意点的消息代理发送“临终遗嘱”(LWT)信息,当消息代理检测到客户端离线(连接并未关闭),就会发送保存在特定主题上的 LWT 信息,让其它客户端知道该节点已经意外离线。

35保留消息 Retained Messages

1个Topic只有唯一的retain消息,Broker会保存每个Topic的最后一条retain消息。

3 Kittenblock中快速上手IOT

31 加载IOT插件

插件已经成功加载:

32 建立IOT本地服务器

我们重新复习下MQTT物理模型:

1首先物联网肯定有一台服务器。不然那些要联网的设备把接收到的数据发给谁呢?服务器的作用就是接收数据,处理数据,分发数据

2多个联网的设备。它们的作用就是给服务器发送数据,或者接受服务器的数据。

本节实验,我们用我们的Kittenblock将本机电脑设置为IOT本机服务器,并且本机也作为一个联网的客户端,对服务器进行消息发送

为了方便学校上课场景(连接外网服务器不方便),我们可以直接通过Kittenblock后台建立起IOT本地服务器。

刚建立器IOT本机服务器,设备列表是空的,当然因为没有设备连接到本地服务器上

33 连接服务器

拖拽积木,设备的ID名称可以自由填写,这个名称是显示在服务器上的

更改完信息后,记得点击下积木块,才会执行这条指令

回到本地服务器的列表查看,可以看到设备CCFIVE已经连上上服务器了

34 订阅话题

设备已经与服务器成功连接后,我们需要进行话题订阅,话题的形式一般是“/”+英文,当然不用“/”也是OK的

回到本地服务器的列表查看,可以看到设备CCFIVE已经订阅了"/hello"的话题

35 话题广播与接收

因为我们现在只有一台设别,所以话题我们自己发送自己接收,我们写一个接收程序,让舞台的小喵说出来

话题发送与接收

现象结果:

36 多台电脑MQTT相互通讯

如果你的实验环境下有多台设备,不妨将多台设备都连接到同一个服务器上,例如下图电脑A、B、C都连接到1921680117上,然后对应向共同的话题推送消息,这时候其它设备如果也订阅了这个话题,它也会收到消息更新。

1高效分布式
必须是高效的分布式系统。物联网产生的数据量巨大,仅中国而言,就有5亿多台智能电表,每台电表每隔15分钟采集一次数据,一天全国智能电表就会产生500多亿条记录。这么大的数据量,任何一台服务器都无能力处理,因此处理系统必须是分布式的,水平扩展的。为降低成本,一个节点的处理性能必须是高效的,需要支持数据的快速写入和快速查询。
2实时处理
必须是实时处理的系统。互联网大数据处理,大家所熟悉的场景是用户画像、推荐系统、舆情分析等等,这些场景并不需要什么实时性,批处理即可。但是对于物联网场景,需要基于采集的数据做实时预警、决策,延时要控制在秒级以内。如果计算没有实时性,物联网的商业价值就大打折扣。
3高可靠性
需要运营商级别的高可靠服务。物联网系统对接的往往是生产、经营系统,如果数据处理系统宕机,直接导致停产,产生经济有损失、导致对终端消费者的服务无法正常提供。比如智能电表,如果系统出问题,直接导致的是千家万户无法正常用电。因此物联网大数据系统必须是高可靠的,必须支持数据实时备份,必须支持异地容灾,必须支持软件、硬件在线升级,必须支持在线IDC机房迁移,否则服务一定有被中断的可能。
4高效缓存
需要高效的缓存功能。绝大部分场景,都需要能快速获取设备当前状态或其他信息,用以报警、大屏展示或其他。系统需要提供一高效机制,让用户可以获取全部、或符合过滤条件的部分设备的最新状态。
5实时流式计算
需要实时流式计算。各种实时预警或预测已经不是简单的基于某一个阈值进行,而是需要通过将一个或多个设备产生的数据流进行实时聚合计算,不只是基于一个时间点、而是基于一个时间窗口进行计算。不仅如此,计算的需求也相当复杂,因场景而异,应容许用户自定义函数进行计算。
6数据订阅
需要支持数据订阅。与通用大数据平台比较一致,同一组数据往往有很多应用都需要,因此系统应该提供订阅功能,只要有新的数据更新,就应该实时提醒应用。而且这个订阅也应该是个性化的,容许应用设置过滤条件,比如只订阅某个物理量五分钟的平均值。
7和历史数据处理合二为一
实时数据和历史数据的处理要合二为一。实时数据在缓存里,历史数据在持久化存储介质里,而且可能依据时长,保留在不同存储介质里。系统应该隐藏背后的存储,给用户和应用呈现的是同一个接口和界面。无论是访问新采集的数据还是十年前的老数据,除输入的时间参数不同之外,其余应该是一样的。
8数据持续稳定写入
需要保证数据能持续稳定写入。对于物联网系统,数据流量往往是平稳的,因此数据写入所需要的资源往往是可以估算的。但是变化的是查询、分析,特别是即席查询,有可能耗费很大的系统资源,不可控。因此系统必须保证分配足够的资源以确保数据能够写入系统而不被丢失。准确的说,系统必须是一个写优先系统。
9数据多维度分析
需要对数据支持灵活的多维度分析。对于联网设备产生的数据,需要进行各种维度的统计分析,比如从设备所处的地域进行分析,从设备的型号、供应商进行分析,从设备所使用的人员进行分析等等。而且这些维度的分析是无法事先想好的,而是在实际运营过程中,根据业务发展的需求定下来的。因此物联网大数据系统需要一个灵活的机制增加某个维度的分析。
10支持数据计算
需要支持数据降频、插值、特殊函数计算等 *** 作。原始数据的采集可能频次挺高,但具体分析时,往往不需要对原始收据进行,而是数据降频之后。系统需要提供高效的数据降频 *** 作。设备是很难同步的,不同设备采集数据的时间点是很难对齐的,因此分析一个特定时间点的值,往往需要插值才能解决,系统需要提供线性插值、设置固定值等多种插值策略才行。工业互联网里,除通用的统计 *** 作之外,往往还需要支持一些特殊函数,比如时间加权平均。
11即席分析和查询
需要支持即席分析和查询。为提高大数据分析师的工作效率,系统应该提供一命令行工具或容许用户通过其他工具,执行SQL查询,而不是非要通过编程接口。查询分析的结果可以很方便的导出,再制作成各种图标。
12灵活数据管理策略
需要提供灵活的数据管理策略。一个大的系统,采集的数据种类繁多,而且除采集的原始数据外,还有大量的衍生数据。这些数据各自有不同的特点,有的采集频次高,有的要求保留时间长,有的需要多个副本以保证更高的安全性,有的需要能快速访问。因此物联网大数据平台必须提供多种策略,让用户可以根据特点进行选择和配置,而且各种策略并存。
13开放的系统
必须是开放的。系统需要支持业界流行的标准SQL,提供各种语言开发接口,包括C/C++,Java,Go,Python,RESTful等等,也需要支持Spark,R,Matlab等等,方便集成各种机器学习、人工智能算法或其他应用,让大数据处理平台能够不断扩展,而不是成为一个孤岛。
14支持异构环境
系统必须支持异构环境。大数据平台的搭建是一个长期的工作,每个批次采购的服务器和存储设备都会不一样,系统必须支持各种档次、各种不同配置的服务器和存储设备并存。
15支持边云协同
需要支持边云协同。要有一套灵活的机制将边缘计算节点的数据上传到云端,根据具体需要,可以将原始数据,或加工计算后的数据,或仅仅符合过滤条件的数据同步到云端,而且随时可以取消,更改策略。

DHT11 接2
gravity T-R R-T Vcc GND
13号接个灯

查看消息

查看另一个topic1的消息

分别发送 ON and OFF 可以控制13号灯的使用

React Native 是 Facebook 推出并开源的跨平台移动应用开发框架,是 React 在原生移动应用平台的衍生产物,支持 iOS 和安卓两大平台。React Native 使用 Javascript 语言,类似于 HTML 的 JSX,以及 CSS 来开发移动应用,因此熟悉 Web 前端开发的技术人员只需很少的学习就可以进入移动应用开发领域,同时 React Native 也提供了接近原生应用的性能和体验。

MQTT 是一种基于发布/订阅模式的 轻量级物联网消息传输协议 ,可在严重受限的硬件设备和低带宽、高延迟的网络上实现稳定传输。它凭借简单易实现、支持 QoS、报文小等特点,占据了物联网协议的半壁江山。

本文主要介绍如何在 React Native 项目中使用 MQTT,实现客户端与服务器的连接、订阅、取消订阅、收发消息等功能。

这里以创建一个名为 RNMQTTDemo 的项目为例,开发环境为 macOS,应用平台为 iOS,具体过程参考 Setting up the development environment 。

项目创建完成后,在项目根目录环境下,执行以下命令安装所需依赖:

react_native_mqtt 是一个在 React Native 项目中使用的 MQTT 客户端模块,支持 iOS 和 Android。

这里使用 EMQ 提供的免费公共 MQTT 服务器,该服务基于 EMQ 的 MQTT 物联网云平台 创建。服务器接入信息如下:

完整的 RNMQTTDemo 项目地址: >MQTT协议。自动售货机,是一种能根据投入的钱币自动付货的机器。自动售货机是商业自动化的常用设备,它不受时间、地点的限制,能节省人力、方便交易。是一种全新的商业零售形式,又被称为24小时营业的微型超市,可以通过MQTT协议与物联网平台进行交互,在应用侧可以到物联网平台订阅设备侧变化的通知,用户可以在控制台或通过应用侧接口创建数据转发规则,把设备上报的属性转发给其他华为云服务。常见的自动售卖机共分为四种:饮料自动售货机、食品自动售货机、综合自动售货机、化妆品自动售卖机。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/12870609.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存