问题一:设备端SDK是否支持MQTT协议的断线重连?
设备端SDK是否支持MQTT协议的断线重连?
参考回答:
支持。
测试场景描述:开发板通过Wi-Fi连接路由器。把网线拔掉后,MQTT协议的设备端会自动尝试和服务器重新建立连接。重连尝试时间间隔是1s、2s、4s、8s、…。C SDK重试的最大间隔时间默认是60秒,即断网超过60s后仍未连接成功,设备端会每隔60秒尝试与服务器进行重连。您可以自定义最大间隔时间。
Android和Java SDK最大间隔时间为128秒,不支持自定义最大间隔时间。
问题二:MQTT协议pub消息payload格式是怎么样的?
MQTT协议pub消息payload格式是怎么样的?
参考回答:
物联网平台没有制定pub消息payload的具体字段有那些。您根据应用场景制定自己的协议,然后以JSON格式放到pub消息载体里面传给服务端。
问题三:如何用MQTT协议搭建一个物联网空调的服务器
想问一下,如何用MQTT协议搭建一个物联网空调的服务器,刚开始学这些东西还有很多不懂的,希望大佬教一下,谢谢
问题四:MQTT协议pub消息payload格式是怎么样的?
设备端SDK使用问题 MQTT连接
参考回答:
阿里云IoT套件没有制定pub消息payload具体字段有那些,需要客户根据应用场景制定自己的协议,然后以JSON格式放到pub消息载体里面传给服务端。
问题五:阿里云利用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负责实现服务器向客户端推送消息功能。 服务器端界面如下,分别对应了上述的几个功能模块: 发送以后,我们可以在手机端看到接收的消息:
答案来源网络,供参考,希望对您有帮助
问题六:有用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
问题七:用MQTT协议接收消息时乱码
最近在用阿里的MQ收发消息,两边的项目都是UTF-8的,发送成功的消息,在控制台下载看了是正常。接收时中文就乱码了,请问一下是怎么回事?
参考回答:
是否显示问题,可以先把字节流打印出来比较一下,理论上都是字节流传输,MQTT和MQ的body是对应的,没有特殊转换处理