• [应用专区] mqtt指令获取不到宿主机ip
    订阅mqtt消息mosquitto_sub -t "esdk/get/response/app1/ipaddr" -d &获取ipmosquitto_pub -t "app1/get/request/esdk/ipaddr" -m '{"token": "12345","timestamp": "2018-03-28T08:33:43Z","body":{"dev": "FE0"}}'在平高板上拿到ip,执行正常,上图:但是在华为板上订阅不到ip消息
  • [问题求助] mqtt接入类型:一机一密,一型一密。一型一密,取消了吗?
    搜了一下,没有找到 一型一密的mqtt接入介绍。一型一密,取消了吗?谢谢
  • [问题求助] MQTT password怎样生成
    【功能模块】    设备连接华为云IoT MQTT【操作步骤&问题现象】1、通过MQTT.fx,用工具生成password可以连接上,设备端怎样生成password【截图信息】Password必选String(256)加密后的设备密钥。Password的值为使用“HMACSHA256”算法以时间戳为密钥,对secret进行加密后的值。secret为注册设备时平台返回的secret。【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] 在云服务器(Ubuntu)下安装MQTT服务器以及更改连接权限
    >本文仅供学习参考,通过自己在云服务器搭建Mqtt服务器,更深入的了解MQTT协议。 # 一、效果 - 在云服务器上安装EMQ服务器,实现MQTT服务器的搭建 - 更改EMQ默认密码 - 更改连接权限,进行数据库认证 # 二、准备工作 ## 1.购买云服务器 >本地服务器也可以。但是为了设备接入以及操作的方便,还是建议在云服务器进行。 买一个低配置的服务器就可以,比如我购买的是轻量应用服务器,CentOS Ubuntu18.04、1核、内存2G、系统盘40G。 ## 2.开放相应的端口号、允许远程连接。 使用EMQ,至少需要开放的端口号:1883、18083、8083、8883、8084。可以在控制台里面的防火墙(安全组)设置。 同时,为了在本地通过ssh连接服务器,需要开放端口号22,同时允许远程连接。 ## 3.连接自己的云服务器。 建议直接通过Cmd进行SSH连接(windows用户)。 即ssh root@ip (ip为你云服务器的公网ip) 输入密码时,是不会有字符显示的哦~ ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202004/12/1335518afnnqake9dut6wb.png) # 三、部署EMQ >以下是通过docker安装,详细内容请参考[EMQ官网](#) ## 1.配置docker CE >Ubuntu操作系统,其他操作系统可以自行百度配置。 连接服务器后,只需要6个命令,通过apt-get安装docker(阿里云镜像),步骤如下: ``` # step 1:更新 sudo apt-get update # step 2: 安装必要的系统工具 sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common # step 3: 安装GPG证书 curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - # step 4: 写入软件源信息 sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" # step 5: 更新 sudo apt-get -y update # step 6:安装Docker-CE sudo apt-get -y install docker-ce ``` 成功安装后,输入docker -v可查看docker版本。 ## 2.获取镜像 执行命令:$ docker pull emqx/emqx:v4.0.0 即让docker下载emq镜像,存储在硬盘中。 下载完成后,输入 docker images 可以已经拥有的镜像。 ## 3.启动emq 执行命令:$ docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:v4.0.0 启动emq,成功启动后,执行 docker ps 可以看到emq容器正在运行 ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202004/12/1405446fbfbnu3fh185wdz.png) ---- **EMQ自带有一个前端页面,可以通过 ip:18083进入。默认账号:admin;密码:public** **大功告成,emq已经完成部署,接入设备试一下吧~** ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202004/12/140735fi4oue8wzpydrbt6.png) # 四、更改默认账户密码 进入服务器控制台页面(IP:18083),默认账号:admin,密码:public。 点击ADMIN,可以在Setting中切换语言为中文。 在ADMIN->Users选项中,设置自己的新密码 ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202004/13/1935235prhkvlyejykuu6d.png) # 五、连接数据库 ##1.数据库新建表 通过mysql新建一个用户表格 ``` CREATE TABLE `mqtt_user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(100) DEFAULT NULL, `password` varchar(100) DEFAULT NULL, `salt` varchar(35) DEFAULT NULL, `is_superuser` tinyint(1) DEFAULT 0, `created` datetime DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `mqtt_username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` ## 2.修改配置文件 ### a.关闭匿名登录。 修改emq.conf(文件在安装EMQ目录的./etc中) ``` mqtt.allow_anonymous = false // 修改为false ``` ### b.修改默认mysql配置 >mysql版本为mysql5,mysql8会有不同! 进入etc/plugins/emqx_auth_mysql.conf,修改emqx_auth_mysql.conf ``` ## 服务器地址 auth.mysql.server = 127.0.0.1:3306 ## 连接池大小 auth.mysql.pool = 8 auth.mysql.username = emqx auth.mysql.password = public auth.mysql.database = mqtt auth.mysql.query_timeout = 5s ``` 只需修改为你的msyql信息即可。(ip:port、username、password) ---注意:如果你是通过docker安装,进入emq目录方式为:docker exec -ti emqx /bin/sh 退出:ctrl + P + Q![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202004/13/202329hoqutvmhdqk3p9xf.png) --- ### 三、设置连接权限 添加插件,在web控制页面中,选择 MANAGEMENT->Plugins,找到emqx_auth_mysql 让他running ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202004/13/202653fbw2gt2dsvmdcoj9.png) 此时,你再连接你的mqtt服务器时,你发现你会连接失败!说明你已经设置成功Mysql认证,在数据库里面添加你需要接入设备的ID、密码即可~ --- # 六、容器的开启、停止 - 查看:docker ps / docker images - 停止:docker stop emqx - 打开:docker start emqx --- **好了,此时你就已经拥有了自己的MQTT服务器,同时其他人未经允许也不能够轻易的访问或使用你的MQTT服务器,快去尝试吧~~**
  • [问题求助] IOT设备以MQTT方式接入平台,平台支持在线固件升级吗?
    【功能模块】IOT设备接入【操作步骤&问题现象】1、请问IOT设备以MQTT方式接入平台,平台支持在线固件升级吗?2、我看平台有固件升级的选项,新建任务时要求产品配置为支持固件升级,请问在哪里配置?3、另外有相关配置指导文档吗?【截图信息】
  • [知识分享] 【第一课】EMQ: 物联网 MQTT Broker 安装
    摘要本实验以 EMQ X MQTT Broker 为例,指导用户快速完成物联网消息服务器搭建。实验属性l  难易程度:初级l  实验时长:120分钟实验目标与基本要求使用户掌握 EMQ X 安装流程,了解 EMQ X 基本配置以及启动方式,通过自行选择并下载安装包完成安装、启动、测试步骤。实验摘要1.     选择并下载安装包2.     安装并启动 EMQ X3.     接入使用 EMQ X实验步骤0.    领取代金券,购买测试云服务器。            领券链接:https://bbs.huaweicloud.com/forum/thread-73912-1-1.html            购买云服务器:https://www.huaweicloud.com/product/ecs.html    此处选择ubuntu服务器。1.     选择并下载安装包1.1 安装方式对于 Linux 环境,EMQ X 提供两种方式的安装。    一是基于各 linux 发布的安装包。用安装包安装 EMQ X 以后,可以方便的使用系统管理工具来启停 EMQ X 服务。    二是使用 zip 压缩打包的通用包。安装 zip 包只需解压 zip 文件即可。使用 zip 包可以实现在同一个系统下安装多套 EMQ X。在开发/实验室环境下使用 zip 包安装 EMQ X 非常实用。1.2 下载安装包本地打开浏览器,输入 https://www.emqx.io/cn/downloads。选择 EMQ X Broker 或 EMQ X Enterprise,选择 EMQ X 版本与操作系统类型。此实验中选择 EMQ X Broker 最新版 4.1.1,操作系统选择 Linux > Ubuntu 16.04,选择安装包类型为 zip。进入购买的云服务器的控制页面,打开命令行,执行 wget https://www.emqx.io/cn/downloads/enterprise/v4.1.1/emqx-ee-ubuntu16.04-4.1.1-aarch64.zip获取安装包。 2.     安装并启动 EMQ X2.1 解压安装包打开命令行,使用命令切换至下载目录cd /home/user/Downloads/使用命令解压安装包。 unzip emqx-ubuntu16.04-v4.1.1.zip解压之后会得到 ./emqx 文件夹,进入该文件夹即可。 2.2 启动 EMQ X使用 ./bin/emqx start 命令启动 EMQ X,启动成功后使用 ./bin/emqx_ctl status 或 ./bin/emqx ping 命令查看启动状态:./bin/emqx startemqx 4.1.1 is started successfully!./bin/emqx_ctl statusNode 'emqx@127.0.0.1' is startedemqx 4.1.1 is running 运行中的 EMQ X 可以使用 ./bin/emqx stop 命令停止:./bin/emqx stopok2.3 Console 模式启动使用 console 模式启动可以获得 EMQ X 启动信息,日志将在控制台输出,非常适用于初次启动排错、开发调试等。使用 ./bin/emqx console 命令即可以 Console 模式启动 EMQ X:./bin/emqx consoleStarting emqx on node emqx@127.0.0.1Start http:management listener on 8081 successfully.Start http:dashboard listener on 18083 successfully.Start mqtt:tcp listener on 127.0.0.1:11883 successfully.Start mqtt:tcp listener on 0.0.0.0:1883 successfully.Start mqtt:ws listener on 0.0.0.0:8083 successfully.Start mqtt:ssl listener on 0.0.0.0:8883 successfully.Start mqtt:wss listener on 0.0.0.0:8084 successfully.EMQ X Broker 4.1.1 is running now!Eshell V10.7.1  (abort with ^G)(emqx@127.0.0.1)1> 3.     接入使用 EMQ X3.1 使用 EMQ X DashboardEMQ X 提供了 Dashboard 以方便用户管理设备与监控相关指标。通过 Dashboard,你可以查看服务器基本信息、负载情况和统计数据,可以查看某个客户端的连接状态等信息甚至断开其连接,也可以动态加载和卸载指定插件。除此之外,EMQ X Dashboard 还提供了规则引擎的可视化操作界面,同时集成了一个简易的 MQTT 客户端工具供用户测试使用。 EMQ X 正常启动的情况下,在浏览器中输入网址 http://EIP:18083 即可访问 EMQ X Dashboard,默认的用户名和密码分别为 admin/public。EIP为云服务器的公网IP,另外云服务器的安全组需要打开18083端口。3.2 建立 MQTT 连接登录 Dashboard 后,依次点击 工具 -> WebSocket 打开 WebSocket 测试工具,在该页面输入 MQTT 连接信息,点击连接按钮即可连接至 EMQ X。输入待订阅的主题并进行订阅,输入主题、消息进行发布、选择 QoS 发布一条消息,消息发出之后,订阅消息列表应当能立即收到发出的消息。 3.3 结束实验关闭浏览器,按照 2.2 中的步骤停止 EMQ X 完成实验。结束实验之后,请及时删除云服务器,避免继续扣费。 
  • [技术干货] 关于mqtt调试工具遇到的问题
    publish没问题  可以正常发放到云平台。但是subscribe有点疑问。首先已经正常订阅到云平台的topic就是发放命令的时候,必须从这儿发送命令,调试助手才能接收到但是从调试界面却怎么也收不到如图的设备调试界面这个发送我点了好多次  助手一直接收不到  
  • [问题求助] 【物联网知识竞赛】+LiteOS如果要将数据转存到本地MySQL及云端MySQL上(每次40个字符,MQTT),对通信负载影响?
    LiteOS如果要将数据转存到本地MySQL及云端MySQL上(每次40个字符,MQTT),对通信负载影响多大?
  • [问题求助] 利用MQTT传输传感器数据,需要下载几个软件
    利用MQTT传输传感器数据,需要下载几个软件
  • [问题求助] 如何利用MQTT把STM32和华为云服务器传输图片数据
    最近在做一个智能家居方面的项目,想知道怎么能利用MQTT以STM32为MCU把摄像头拍摄的图片传输到华为云上
  • [技术干货] 小熊派如何使用ESP8266接入”设备接入“
    我之前参加LiteOS训练营比赛写过一个基于ESP8266使用MQTT协议传输数据的Demo,大家可以参考下,已上传到附件。一、修改iot_config.h文件中的wifi名称和密码为你自己的。二、修改MQTT的ID和密码为你自己定义的注意:MQTT_ID是设备ID,不是设备标识码。ESP8266的设备标识码是自己定义的,不是通过AT指令获取的,只有NB-IoT使用LWM2M/COAP协议连接物联网平台需要去获取IMEI号码。保存,重新编译后,即可完成接入!
  • [技术干货] 【经验分享】如何搭建本地MQTT服务器(Windows ),并进行上下行调测
    网上查了资料,实际动手的时候踩了很多坑,现在把我的经验分享给大家:一、安装和启动使用EMQTT,下载完直接到bin目录下执行emqttd start就可以了,简单方便下载地址:https://www.emqx.io/cn/downloads#broker大家下载2.X.X版本,不要下载最新版本,最新版本有修改,使用上述方法测试不通(也可能是本人使用的方法不对,如果有人测试过了可以悄悄告诉我 :)打开http://127.0.0.1:18083/#/就可以进入dashboard界面,默认登录账号密码是admin/public,这个账号密码是在 安装目录\etc\plugins的emq_dashboard.conf中配置的:Dashboard界面:二、使用mqtt client进行测试服务器搭好后就可以测试我们的client端了。本人搭建这个MQTT服务器是为了调测client端的代码。在client端配置好服务器对接地址,端口是1883(MQTT非加密协议端口是1883),用户名和密码这时可以随便写,因为EMQTT默认不对用户名密码进行验证。如果客户端和服务器在同一台机器上,那么serverIp_也可以设置为127.0.0.1运行客户端程序后就可以在Dashboard看到publish的主题:订阅的主题:client端的数据上报成功了(Dashboard上没找到具体的数据,但从client端和dashboard上的主题和消息数量看是成功了),下一步就是从broker给我的client发消息了,这一步没在网上找到攻略或指导,是我自己尝试出来的...进入Websocket页面,点击连接(不要修改上面的连接参数,直接点击连接即可):当状态变成已连接后,在下面的消息中,修改主题,主题要使用client端订阅的主题之一(否则client收不到),修改消息内容和Qos(服务质量),点击发送即可此时可以在client端收到消息:如果要在Websocket客户端中看到我用代码写的客户端发的消息,可以在Websocket订阅我的client端发的消息主题:当我的client端发送消息时就可以在下面的订阅消息列表中看到消息内容了:MQTT的主体有三种角色:这里的代理(Broker)就是我们搭建的EMQTT服务器,发布者和订阅者可以相互转换:A发布消息,B订阅 <--> B发布消息,A订阅上面的例子中有除了代理,还有两个角色,一个是我自己写的代码程序客户端,另一个是Dashboard上起的Websocket客户端,这两个客户端就是发布者和订阅者。
  • [技术干货] 4G cat1模块(ML302)采用MQTT协议接入华为云设备接入服务(AT指令)
    本贴需要用的资料都在附件中,请大家根据需求下载。由于最近项目需要,采用基于MQTT协议采用4G cat1模块接入华为设备接入服务,我大概查阅了一下资料和华为设备,发现没有太多这类的教程,所以我今天在这里写一篇给大家参考。一、在设备接入IOTDA中创建产品并注册设备①填写各类信息(这里略过)②选择MQTT协议③数据格式为JSON,之前因为使用COAP+NB-IOT设备所以选二进制码流。我们选择了JSON格式的数据后,就不需要再开发编解码插件了,设备所上传的数据可以直接供应用使用。二、注册设备①点击“设备”-->“所有设备”-->"注册设备"②单设备注册,这里的设备标识码可以自定义,我推荐使用模组的IMEI号作为设备标识码,便于后期查找设备和管理设备,设置一个密钥长度为8位。③系统会为我们分配一个设备ID,待会注册的时候就是用这个设备ID生成clientId、username、password。二、使用华为提供的mqttClientIDGenerator软件生成clientId、username、password①下载该软件,我已经把该软件放到附件中了,下载解压后即可使用,无需安装。②填入设备ID、设备密钥,点击生成,生成这类信息的算法请参见该说明文档:连接鉴权三、使用ML302模组接入IOTDA设备接入服务,关于该模组的详细指令信息可以查阅附件中的PDF手册①检测SIM卡状态AT+CPIN?+CPIN:READYOK②查询协议栈是否打开,也可以理解为射频吧AT+CFUN?+CFUN:1OK③查询信号质量AT+CSQ+CSQ:31,99OK④设置APN,该参数取决于物联卡的供应商,我是移动的卡AT+CSTT=”CMIOT”,””,””OK⑤激活PDPAT+CGACT=1,1+CGACT:1,1OK⑥尝试获取ipAT+CGPADDR=1你将得到一个ip(如果是0.0.0.0则代表为获取到ip)⑦设置MQTT接入信息AT+MQTTCFG=<host>,<port>,<id>,<keepAlive>,<user>,<passwd>,<clean>,<version>,<encrypt>    //MQTT连接host:服务器信息,ip或者域名都可以,例如:iot-mqtts.cn-north-4.myhuaweicloud.comport:端口 加密8883,非加密1883,为了便于测试这里使用1883id:填写刚才获取的clientID  5ed2300fba112802c7beb9be_123456_0_0_2020053123keepAlive:保活时间user:填写刚才生成到的用户名(username) 5ed2300fba112802c7beb9be_123456passwd:填写刚才生成的密码  cc53cd73f480d354b74526d7121c29fc229b4b16191ee09d416801d1252339acclean:是否清楚会话信息,以后再解释,这里暂且写为1吧version和encrypt可以不写,默认7个参数或者9个参数最终组合之后的命令为:AT+MQTTCFG="iot-mqtts.cn-north-4.myhuaweicloud.com",1883,"5ed2300fba112802c7beb9be_123456_0_0_2020053123",100,"5ed2300fba112802c7beb9be_123456","cc53cd73f480d354b74526d7121c29fc229b4b16191ee09d416801d1252339ac",1⑧设置MQTT相关连接标志并连接AT+MQTTOPEN=<usrFlag>,<pwdFlag>,<willFlag>,<willRetain>,<willQos>,<will-topic>,<will-mesg>AT+MQTTOPEN=1,1,0,0,0,"",""发送完上一条指令后,如果一切正确你将得到如下提示,说明以及成功连接现在就可以开始订阅和发布主题啦!
  • [问题求助] 关于ROMALink的南向接口,部分MQTT指令的疑问?
    您好:                  我们公司正在对接华为的ROMALINK平台,在南向接口中,帮助文件未给出部分MQTT指令的详细说明,请贵公司及时提供给我们,                  以下指令是我们急待要知道的。这是我们帮助文件中的指令说明(没有query指令):
  • [交流分享] NB-IOT模块(M5311)通过MQTT协议对接华为云IOT平台
    说明:最近做项目要用到M5311模块对接华为云,遇到了不少坑。最后成功了。关于这个网上资料很少,我几乎没找到很有用的资料。做的过程中就想着等做出来了写篇教程。本文目的:1、让大家避坑,节省时间。2、分享技术。        刚开始要着手解决这个问题的时候很懵。首先买了M5311模块(NB-IOT模块的一种),拿到模块相关资料之后,感觉好像没有针对我的应用的资料。然后资料中各种内容一大堆,表示看不太懂。。。后来,就有了这篇文章。技术关键词:NBIOT、M5311、MQTT协议、华为云、JSON数据格式、STM32单片机、USART通信。一、简介我要实现的功能:用STM32F1控制M5311模块通过MQTT协议(MQTT协议模块内部已经集成了,我们只需要调用相关AT指令就可以了)对接华为云平台,实现数据的上传与下发。针对我的应用的主要资料:(1) M5311的AT指令(包括MQTT有关的AT指令)(2) 华为云平台官方的开发指南二、AT流程-----------基础AT指令--------------模块开机|AT| res: OK\r\nATE0  //关闭AT指令回显,节省单片机接收缓冲区的空间| res:OK\r\nAT+CMSYSCTRL=0,2   //设置LED指示网络状态| res: OK\r\nAT+SM=LOCK_FOREVER //设置不休眠模式| res:OK\r\nAT+CLPLMN    //清除注网记录| res: +CLPLMN:空格0\r\n \r\n OK\r\nAT+CEDRXS=0,5  //关闭eDRX功能| res:  OK\r\nAT+CPSMS=2,,,"01001111","00100010" //关闭PSM功能| res: OK\r\nAT+CIMI  //确认读SIM卡正常| res:460043193208917\r\n \r\n OK \r\n  AT+CSQ   //查询信号质量| res:+CSQ:空格9,0\r\n \r\nOK\r\nAT+CEREG?  //确认基站注册状态 (第二位:1本地已注册,5**已注册)| res: +CEREG:空格0,1\r\n\r\nOK\r\nAT+CGATT?  //确认PDP激活状态(1已激活,0未激活)| res: +CGATT: 空格1\r\n\r\nOK\r\nAT+CEREG=5  //For a UE that wants to apply PSM, enable network registration| res:OK\r\nAT+CEREG?   //确认 PSM 参数是否设置成功| res: +CEREG:空格5,1,"3FE9","0CA3D416",9,"00",0,0,"00100010","11100000"\r\n\r\nOK\r\n注意:有关MQTT的AT指令的参数需要根据自己的实际情况修改。-------------MQTT协议AT指令------------------------AT+MQTTCFG="iot-mqtts.cn-north-4.myhuaweicloud.com",1883,"5eaaa3ed3766a6040511451a_123_0_0_2020043018",120,"5eaaa3ed3766a6040511451a_123","35415eb57f16397205d0056ca4269fa90fc17c4dbcbc8a8f717b48dcea70d3a3",1(说明:1、第三个参数”客户端ID“必须按照华为云平台要求的格式,即:设备ID+下划线+0或1+下划线+0或1+下划线+时间戳 (具体参考平台官方文档中:”文档首页 > 设备接入 IoTDA > API参考> 设备侧MQTT接口参考> 设备连接鉴权“有关内容 )           2、第四个参数”用户名“即华为云平台中的设备ID          3、第五个参数”密码“的值为使用“HMACSHA256”算法以时间戳为密钥,对平台密钥(创建设备时你自己设置的)进行加密后的值。)| res:OK\r\nAT+MQTTOPEN=1,1,0,0,0,"","" //发送连接建立请求| res:OK\r\n\r\n+MQTTOPEN:空格OK\r\n//注意:从这里往下的内容就有老版本和新版本之分了,我下边的示例都是用的新版本V5版本的topic(topic即主题),若需要老版本V3版本的topic可以去开发文档里找。新老版本的主要区别之一就是平台默认的topic不同。AT+MQTTSUB="$oc/devices/5eaaa3ed3766a6040511451a_123/sys/commands/#",0 //订阅平台命令下发topic|AT+MQTTSUB="$oc/devices/5eaaa3ed3766a6040511451a_123/sys/properties/set/#",0 //订阅平台设置属性主题(订阅这个topic的目的是,你在平台上修改设备影子的期望值后,设备能够收到平台下发的期望值)----------------------------------设备上报属性:AT+MQTTPUB="$oc/devices/5eaaa3ed3766a6040511451a_123/sys/properties/report",0,1,0,116,7B227365727669636573223A5B7B22736572766963655F6964223A227331222C2270726F70657274696573223A7B224461746131223A2253544D333220636F6E74726F6C204D3533313120636F6E6E65637420746F2048554157454920636C6F756420544553542042592048575121227D7D5D7D平台命令下发响应:AT+MQTTPUB="$oc/devices/5eaaa3ed3766a6040511451a_123/sys/commands/response/request_id={request_id}",0,1,0,18,7B22726573756C745F636F6465223A20307D平台设置属性响应:AT+MQTTPUB="$oc/devices/5eaaa3ed3766a6040511451a_123/sys/properties/set/response/request_id={request_id}",0,1,0,18,7B22726573756C745F636F6465223A20307D-----------平台下发的数据(示例)-----------------//平台下发命令+MQTTPUBLISH: 0,0,0,0,$oc/devices/5eaaa3ed3766a6040511451a_123/sys/commands/request_id=9343402b-7cb0-490c-805d-c2c93ad28c85,68,{"paras":{"parm1":"VV"},"service_id":"s1","command_name":"command1"}//平台修改设备属性+MQTTPUBLISH: 0,0,0,0,$oc/devices/5eaaa3ed3766a6040511451a_123/sys/properties/set/request_id=2ba841f9-dbeb-4bab-9d04-6e8a89183f07,159,{"services":[{"properties":{"Data1":"11111111112222222223333333"},"service_id":"s1"}]}三、注意事项华为云部分:1、MQTT协议的端口有两个,1883是针对MQTT协议的,8883是针对MQTTS协议的。(我用的MQTT端口1883)2、华为物联网平台上的MQTT接口有新老版本之分,老版本是V3版本,新版本是V5版本。(由于开发文档东西有点多,我在看开发文档的时候,没有意识到这个问题,后来才发现的)平台的开发文档中说的是新老版本的接口不同,但我的感觉应该就是两个版本默认定义的topic不同。新版本topic比较多,功能也比老版本多。具体参见官方的开发文档。(这里我之说设备侧的开发,应用侧的开发我没研究)3、平台有关IOT的开发文档我觉的有点乱,大类有两个,一个是“设备接入 IoTDA”的开发文档,另一个是“设备管理 IoTDM”的开发文档。刚开始我都不知道还有两个文档。貌似”设备接入 IoTDA”的开发文档是针对新版本V5的,而另一个是针对老版本的V3的,只是说貌似。(这么说的依据是这个目录“ 文档首页 > 设备接入 IoTDA > API参考> 设备侧MQTT接口参考> Topic定义 ”和这个目录“ 文档首页 > 设备管理 IoTDM > API参考> 设备侧MQTT接口参考> 使用前必读 ”中定义的topic不同 。具体我也不清楚,自己看吧)4、平台上下行数据方式有JSON数据格式和二进制码流之分。(但是我在创建产品的时候数据传输方式只有JSON一个选项) 如果上报的格式是JSON则不用自己开发插件,如果是用二进制码流的格式则需要自己开发插件来解析数据。老版本的topic有个参数能选择上报数据时的方式,但是新版本的topic好像不能选择(我没看到怎么选择),默认的是JSON格式。5、关于JSON数据格式可以自己网上找一下资料。并不难。6、不按照JSON格式上报的数据平台不会显示(当然不包括采用老版本的二进制码流格式),只能在平台的消息跟踪里边看到相关的提示。M5311模块部分:1、模块AT指令的参数中不能含有逗号。而华为云要用的JSON格式中必须要有逗号。所以要用16进制的形式发送。具体内容见手册中的AT+MQTTPUB指令的说明。M5311模块对接平台部分:1、建议先通过电脑的串口调试助手连接并控制M5311模块(用USB转串口模块或者单片机开发板自带的USB转串口模块),对接成功之后再去编程实现功能。2、平台连接在发送完 “AT+MQTTOPEN=1,1,0,0,0,"","" ”之后如果连接成功会返回 “+MQTTOPEN: OK”。(注意,只返回“OK”的话不代表连接成功,必须是“+MQTTOPEN: OK)3、设备断开连接之后,以前订阅的主题全都没了,需要重新订阅主题。4、设备标识码可以不用模块的IMEI号(虽然有些地方说让设置为NB模块的IMEI号),自己随便设置即可。5、设备必须订阅命令下发的主题之后才能在平台上发送命令(没有提前订阅topic就下发命令,会平台提示发送失败)6、开发文档中给出的默认topic中,需要自己配置的参数用大括号括起来了,但是改这个参数的时候大括号要去掉,例如:平台给出的默认topic形式“$oc/devices/{device_id}/sys/commands/response/request_id={request_id} ”,你自己改的时候要改成这样“$oc/devices/123/sys/commands/response/request_id=456 ”(123,456只是示例,具体根据实际情况改)7、设备的影子有个期望值,平台上说的是修改期望值之后,如果正常连接,平台会下发期望值到设备。但是我用老版本的接口订阅了命令下发的默认topic,然后修改影子的期望值NBIOT模块并没有收到下发的数据,后来我改用新版本的接口,订阅了平台设置属性的topic,修改设备影子中的期望值,设备端收到了数据。(所以可能老版本的接口不支持修改设备影子中的期望值后,平台下发期望值的操作。新版本的能支持)8、(1)设备不在线,更改设备影子期望值,等设备上线,并且订阅了平台设置属性topic后,平台并不会下发之前修改的设备影子期望值。     (2)设备没有提前订阅平台设置属性topic时,等更改完设备影子期望值后又订阅了该topic,平台并不会下发之前修改的设备影子期望值。     (3)当设备上报的属性值与影子中的期望值不一致时,平台会下发影子中的期望值。但是当设备上报一次与影子中的期望值相同后,若影子中的期望值一直保持不变,再上报与影子中不同的值,平台不会再下发影子中的期望值。        前两点与平台的开发文档中描述不太一致,不清楚是平台的bug还是我的操作有问题。(如果想等设备上线时把影子中的数据同步到设备可以考虑用“设备侧获取平台的设备影子数据”的方法,平台开发文档有详细介绍)9、平台下发数据到设备之后,设备需要返回应答,至于没有应答的后果,,,一段时间之内没有进行应答,会导致连接断开。但是我的测试有时候设备没有进行应答并不会断开连接,但有时候会断开连接,具体原因不太清楚。所以还是建议进行应答。结束语:1、如果需要STM32控制M5311模块对接华为云平台源码的可以留言或者联系Q1693794917(注明来意)2、如果遇到实在解决不了的问题可以在平台上创建工单,咨询平台工程师。3、华为云平台以及NBIOT模块功能很多也有点复杂,我并没有全面的了解、测试。所以本文的观点可能会有些片面、不当、错误之处,望各位谅解、指正。未完待续。。。。。。。。。。。。