MQTT协议问题之如何搭建物联网空调的服务器

简介: MQTT协议是一个轻量级的消息传输协议,设计用于物联网(IoT)环境中设备间的通信;本合集将详细阐述MQTT协议的基本原理、特性以及各种实际应用场景,供用户学习和参考。

问题一:设备端SDK是否支持MQTT协议的断线重连?


设备端SDK是否支持MQTT协议的断线重连?


参考回答:


支持。

测试场景描述:开发板通过Wi-Fi连接路由器。把网线拔掉后,MQTT协议的设备端会自动尝试和服务器重新建立连接。重连尝试时间间隔是1s、2s、4s、8s、…。C SDK重试的最大间隔时间默认是60秒,即断网超过60s后仍未连接成功,设备端会每隔60秒尝试与服务器进行重连。您可以自定义最大间隔时间。

Android和Java SDK最大间隔时间为128秒,不支持自定义最大间隔时间。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/281936?spm=5176.28261954.J_7341193060.493.40c22f3d058OAB&scm=20140722.S_community@@%E9%97%AE%E7%AD%94@@281936._.ID_281936-RL_mqtt%E5%8D%8F%E8%AE%AE-LOC_search~UND~community~UND~item-OR_ser-V_3-P0_28


问题二:MQTT协议pub消息payload格式是怎么样的?


MQTT协议pub消息payload格式是怎么样的?


参考回答:

物联网平台没有制定pub消息payload的具体字段有那些。您根据应用场景制定自己的协议,然后以JSON格式放到pub消息载体里面传给服务端。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/279052?spm=5176.28261954.J_7341193060.498.40c22f3d058OAB&scm=20140722.S_community@@%E9%97%AE%E7%AD%94@@279052._.ID_279052-RL_mqtt%E5%8D%8F%E8%AE%AE-LOC_search~UND~community~UND~item-OR_ser-V_3-P0_29


问题三:如何用MQTT协议搭建一个物联网空调的服务器


想问一下,如何用MQTT协议搭建一个物联网空调的服务器,刚开始学这些东西还有很多不懂的,希望大佬教一下,谢谢


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/231711?spm=5176.28261954.J_7341193060.502.40c22f3d058OAB&scm=20140722.S_community@@%E9%97%AE%E7%AD%94@@231711._.ID_231711-RL_mqtt%E5%8D%8F%E8%AE%AE-LOC_search~UND~community~UND~item-OR_ser-V_3-P0_30


问题四:MQTT协议pub消息payload格式是怎么样的?


设备端SDK使用问题 MQTT连接


参考回答:


阿里云IoT套件没有制定pub消息payload具体字段有那些,需要客户根据应用场景制定自己的协议,然后以JSON格式放到pub消息载体里面传给服务端。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/130330?spm=5176.28261954.J_7341193060.509.40c22f3d058OAB&scm=20140722.S_community@@%E9%97%AE%E7%AD%94@@130330._.ID_130330-RL_mqtt%E5%8D%8F%E8%AE%AE-LOC_search~UND~community~UND~item-OR_ser-V_3-P0_31


问题五:阿里云利用MQTT协议,如何多个手机同时在线控制一个设备?


阿里云利用MQTT协议,如何多个手机同时在线控制一个设备?


参考回答:

MQTT是一个轻量级的消息发布/订阅协议,它是实现基于手机客户端的消息推送服务器的理想解决方案。   我们可以从这里下载该项目的实例代码,并且可以找到一个采用PHP书写的服务器端实现。   架构如下所示:   wmqtt.jar 是IBM提供的MQTT协议的实现。你可以从如下站点下载它。你可以将该jar包加入你自己的Android应用程序中。   Really Small Message Broker (RSMB) ,他是一个简单的MQTT代理,同样由IBM提供。缺省打开1883端口,应用程序当中,它负责接收来自服务器的消息并将其转发给指定的移动设备。   SAM是一个针对MQTT写的PHP库。你可以从这个下载它.   send_mqtt.php是一个通过POST接收消息并且通过SAM将消息发送给RSMB的PHP脚本。   实例代码:   Ø 采用XMPP协议实现Android推送   这是我在项目中采用的方案。事实上Google官方的C2DM服务器底层也是采用XMPP协议进行的封装。   XMPP(可扩展通讯和表示协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息。   androidpn是一个基于XMPP协议的java开源Android push notification实现。它包含了完整的客户端和服务器端。经过源代码研究我发现,该服务器端基本是在另外一个开源工程openfire基础上修改实现的,不过比较郁闷的是androidpn的文档是由韩语写的,所以整个研究过程基本都是读源码。它的实现示意图如下:   androidpn客户端需要用到一个基于java的开源XMPP协议包asmack,这个包同样也是基于openfire下的另外一个开源项目smack,不过我们不需要自己编译,可以直接把androidpn客户端里面的asmack.jar拿来使用。客户端利用asmack中提供的XMPPConnection类与服务器建立持久连接,并通过该连接进行用户注册和登录认证,同样也是通过这条连接,接收服务器发送的通知。   androidpn服务器端也是java语言实现的,基于openfire开源工程,不过它的Web部分采用的是spring框架,这一点与openfire是不同的。Androidpn服务器包含两个部分,一个是侦听在5222端口上的XMPP服务,负责与客户端的XMPPConnection类进行通信,作用是用户注册和身份认证,并发送推送通知消息。另外一部分是Web服务器,采用一个轻量级的HTTP服务器,负责接收用户的Web请求。服务器架构如下:   最上层包含四个组成部分,分别是SessionManager,Auth Manager,PresenceManager以及Notification Manager。SessionManager负责管理客户端与服务器之间的会话,Auth Manager负责客户端用户认证管理,Presence Manager负责管理客户端用户的登录状态,NotificationManager负责实现服务器向客户端推送消息功能。   服务器端界面如下,分别对应了上述的几个功能模块:   发送以后,我们可以在手机端看到接收的消息:

答案来源网络,供参考,希望对您有帮助


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/136565?spm=5176.28261954.J_7341193060.514.40c22f3d058OAB&scm=20140722.S_community@@%E9%97%AE%E7%AD%94@@136565._.ID_136565-RL_mqtt%E5%8D%8F%E8%AE%AE-LOC_search~UND~community~UND~item-OR_ser-V_3-P0_32


问题六:有用esp32 刷microPython 用mqtt协议连上 接入物联网的么?


环境

esp32 wroom-32

microPython v1.12

simple.py MQTTClient

控制台已经配置好了。

mqttClientId

mqttUsername

mqttPassword

三个值使用 MQTT.qx客户端可以连上(在控制台可以看见) ,但是用microPython 报

raceback (most recent call last):

File "boot.py", line 53, in

File "simple.py", line 86, in connect

IndexError: bytes index out of range


参考回答:

网络上已经有使用python 模拟设备接入阿里云,手里刚好有块ESP32的小板子,在上面跑过Alios Things,然后接入阿里云。但是终究感觉麻烦,有的时候只是做一个很简单的应用,跑os确实不太方便。使用micropython直接操作ESP32很是方便,就想着如果能通过micropython 直接接入物联网,那就方便多了。可以非常简单地接入云端,而且操作简单。先放上主干部分,有时间再补充细节

from umqtt.simple import MQTTClient
import usocket as socket
import time
import wifi
 
wifi.connect()
 
#Demo_01
ProductKey = "a1Mf4HZ5k**"
ClientId = "1234|securemode=3,signmethod=hmacsha1|"
DeviceName = "Demo_01"
DeviceSecret = "****************************"
 
strBroker = ProductKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com"
Brokerport = 1883
 
user_name = "Demo_01&a1Mf4HZ5k**"
user_password = "***************************************"
 
print("clientid:",ClientId,"\n","Broker:",strBroker,"\n","User Name:",user_name,"\n","Password:",user_password,"\n")
 
 
def connect():
  client = MQTTClient(client_id = ClientId,server= strBroker,port=Brokerport,user=user_name, password=user_password,keepalive=60) 
  #please make sure keepalive value is not 0
  
  client.connect()
 
  temperature =25.00
  while temperature < 30:
    temperature += 0.5    
  
    send_mseg = '{"params": {"IndoorTemperature": %s},"method": "thing.event.property.post"}' % (temperature)
    client.publish(topic="/sys/a1Mf4HZ5kET/Demo_01/thing/event/property/post", msg=send_mseg,qos=1, retain=False)
    
    time.sleep(3)
 
  while True:
    pass
 
  #client.disconnect()

连接成功后和可以在设备运行状态下看到上传的温度数据

bad8af1f5f8ab29423b767426d8d5261b2490592

demo中做了一个温度递增的上传,以下是数据记录:

1efed9107b0c5b3a6e1c579d12a76fed099b9e84

做的过程中参考了一下链接,放在这里,读者可以阅读,以获得更多细节:

子设备接入

https://help.aliyun.com/document_detail/66641.html

ESP8266 and MicroPython - Part 2

https://www.home-assistant.io/blog/2016/08/31/esp8266-and-micropython-part2/

使用MQTT客户端连接阿里云MQTT服务器

https://yq.aliyun.com/articles/592279

使用Python模拟设备接入阿里云物联网的MQTT服务器

https://yq.aliyun.com/articles/162978


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/282972?spm=5176.28261954.J_7341193060.518.40c22f3d058OAB&scm=20140722.S_community@@%E9%97%AE%E7%AD%94@@282972._.ID_282972-RL_mqtt%E5%8D%8F%E8%AE%AE-LOC_search~UND~community~UND~item-OR_ser-V_3-P0_33


问题七:用MQTT协议接收消息时乱码


最近在用阿里的MQ收发消息,两边的项目都是UTF-8的,发送成功的消息,在控制台下载看了是正常。接收时中文就乱码了,请问一下是怎么回事?


参考回答:

是否显示问题,可以先把字节流打印出来比较一下,理论上都是字节流传输,MQTT和MQ的body是对应的,没有特殊转换处理


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/86129?spm=5176.28261954.J_7341193060.525.40c22f3d058OAB&scm=20140722.S_community@@%E9%97%AE%E7%AD%94@@86129._.ID_86129-RL_mqtt%E5%8D%8F%E8%AE%AE-LOC_search~UND~community~UND~item-OR_ser-V_3-P0_34

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
相关文章
|
2月前
|
消息中间件 缓存 物联网
MQTT常见问题之MQTT发送消息到阿里云服务器被拒如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
2月前
|
消息中间件 网络协议 物联网
MQTT常见问题之物联网设备端申请动态注册时MQTT服务不可用如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
2月前
|
XML 编解码 JSON
【开源视频联动物联网平台】协议包管理
【开源视频联动物联网平台】协议包管理
35 1
|
2月前
|
消息中间件 边缘计算 物联网
【开源视频联动物联网平台】如何解决物联网协议多样性问题
【开源视频联动物联网平台】如何解决物联网协议多样性问题
59 0
|
2月前
|
Java Maven
【开源视频联动物联网平台】J2mod库写一个Modbus RTU 服务器
【开源视频联动物联网平台】J2mod库写一个Modbus RTU 服务器
72 0
|
2月前
|
负载均衡 网络协议 安全
【开源视频联动物联网平台】SIP协议的特点
【开源视频联动物联网平台】SIP协议的特点
37 1
|
18天前
|
网络协议 Java 物联网
阿里云服务器上搭建 MQTT服务
阿里云服务器上搭建 MQTT服务
|
23天前
|
弹性计算 前端开发 Java
使用阿里云 mqtt serverless 版本超低成本快速实现 webscoket 长链接服务器
使用阿里云 MQTT Serverless 可轻松实现弹性伸缩的 WebSocket 服务,每日成本低至几元。适用于小程序消息推送的 MQTT P2P 模式。前端需注意安全,避免 AK 泄露,采用一机一密方案。后端通过调用 `RegisterDeviceCredential` API 发送消息。示例代码包括 JavaScript 前端连接和 Java 后端发送。
234 0
|
2月前
|
监控 网络性能优化 网络安全
【MODBUS】Modbus主站为边缘设备通过MQTT协议上云
【MODBUS】Modbus主站为边缘设备通过MQTT协议上云
34 1
|
2月前
|
Java API Maven
【开源视频联动物联网平台】JAIN-SIP库写一个SIP服务器
【开源视频联动物联网平台】JAIN-SIP库写一个SIP服务器
86 0

相关产品

  • 物联网平台