概述 #
本文以Python语言为例,介绍通过MQTTS/MQTT协议接入平台,基于平台接口实现“属性上报”、“订阅接收命令”等功能。
说明:
本文中使用的代码为样例代码,仅用于体验平台通信功能,如需进行商用,可以参考资源获取获取对应语言的IoT Device SDK进行集成。
前提条件 #
- 已安装python,若未安装请参考安装python。
- 已在管理控制台获取设备接入地址。获取地址的操作步骤,请参考平台对接信息。
- 已在管理控制台创建产品和设备。创建产品和设备的具体操作细节,请参考创建产品、注册单个设备或批量注册设备。
准备工作 #
- 安装python
- 访问python官网,选择合适系统的版本下载并安装。(本文以windows系统为例,安装python3.8.2)。
- 下载完成后,运行exe文件进行安装。
- 勾选“Add python 3.8 to PAYTH”(如无勾选,需手动配置环境变量),单击“Customize installation”,按照界面提示安装。
- 检查python是否安装成功。Win键 + r –>输入 cmd–>回车,进入命令行窗口,输入python –V,回车后显示python版本即表示安装成功。
完整代码 #
# -*- coding: utf-8 -*- import paho.mqtt.client as mqtt import json import threading # MQTT 服务器地址 MQTT_BROKER = "iot.modbus.cn" # MQTT 端口号 MQTT_PORT = 1883 # MQTT 客户端 ID MQTT_CLIENT_ID = "4QR8TZ9ThuL4G" # MQTT 用户名 MQTT_USERNAME = "ceshi" # MQTT 密码 MQTT_PASSWORD = "Abc123456" # 订阅的主题 MQTT_TOPIC_SUBSCRIBE = "/server/coo/4QR8TZ9ThuL4G" # 发布的主题 MQTT_TOPIC_PUBLISH = "/dev/coo/4QR8TZ9ThuL4G" # 创建 MQTT 客户端 client = mqtt.Client(client_id=MQTT_CLIENT_ID) client.username_pw_set(MQTT_USERNAME, MQTT_PASSWORD) # 连接成功回调函数 def on_connect(client, userdata, flags, rc): print("Connected with result code " + str(rc)) # 订阅主题 client.subscribe(MQTT_TOPIC_SUBSCRIBE) # 接收消息回调函数 def on_message(client, userdata, msg): print("Received message: " + msg.topic + " " + msg.payload.decode()) # 发布消息 def publish_message(client, topic, payload): client.publish(topic, payload) # 心跳函数 def send_heartbeat(): print("Sending heartbeat") # 发送心跳消息 publish_message(client, MQTT_TOPIC_PUBLISH, "heartbeat") # 定时调用自身 threading.Timer(60, send_heartbeat).start() # 定时上报函数 def report_data(): print("Reporting data") # 待上报的数据 message = [ {"sensor_device_id": 1, "port_id": 1, "sdata": 33}, {"sensor_device_id": 1, "port_id": 2, "sdata": 60} ] payload = json.dumps(message) # 发布数据 publish_message(client, MQTT_TOPIC_PUBLISH, payload) # 定时调用自身 threading.Timer(10, report_data).start() # 设置回调函数 client.on_connect = on_connect client.on_message = on_message # 连接 MQTT 服务器 client.connect(MQTT_BROKER, MQTT_PORT, 60) # 启动心跳定时器 send_heartbeat() # 启动定时上报定时器 report_data() # 循环监听消息 client.loop_forever()
备注:从设备地址是sensor_device_id ,寄存器是port_id,数据数值是Sdata ,具体稍后有具体说明。
MQTT基本信息
Topic | 权限 | 说明 |
Broker Address | iot.modbus.cn | MQTT地址 |
Broker Port | 1883 | MQTT端口号 |
Client ID | 4QR8TZ9ThuL4G | 设备号SN(请替换为自己的) |
MQTT账号密码
Topic | 权限 | 说明 |
User Name | ceshi | 用户账户 |
Password | 123456 | 用户密码 |
MQTT 主题一览 #
Modbus物联网平台 作为物联网 PaaS 云平台,对设备 MQTT 接入提供了内置的访问协议规范,让设备和云平台的消息通信更加有章可循,大大简化了物联网项目的开发难度,缩短了产品的开发周期。
不同于普通的 MQTT 使用方式,我们提供了标准的内置主题,这足以实现绝大多数的物联网应用场景。
Topic | 权限 | 说明 |
/dev/coo/4QR8TZ9ThuL4G | 发布 | 上行通信:设备通过该Topic向物联网平台发送消息。 |
/server/coo/4QR8TZ9ThuL4G | 订阅 | 下行通信:设备通过订阅该Topic,获取从物联网平台下发的消息。 |
4QR8TZ9ThuL4G为示例设备号SN,请替换为自己的!
详解介绍 #
- 导入必要的库和模块:
pythonCopy code import paho.mqtt.client as mqtt import json import threading
此外,请确保您已经安装了paho-mqtt库。您可以使用以下命令安装它:
pip install paho-mqtt
- 定义 MQTT 相关的参数:
pythonCopy code MQTT_BROKER = "cloud.modbus.cn" MQTT_PORT = 1883 MQTT_CLIENT_ID = "4QR8TZ9ThuL4G" MQTT_USERNAME = "ceshi" MQTT_PASSWORD = "Abc123456" MQTT_TOPIC_SUBSCRIBE = "/server/coo/4QR8TZ9ThuL4G" MQTT_TOPIC_PUBLISH = "/dev/coo/4QR8TZ9ThuL4G"
- 创建 MQTT 客户端:
pythonCopy code client = mqtt.Client(client_id=MQTT_CLIENT_ID) client.username_pw_set(MQTT_USERNAME, MQTT_PASSWORD)
- 定义连接成功的回调函数:
pythonCopy code def on_connect(client, userdata, flags, rc): print("Connected with result code " + str(rc)) client.subscribe(MQTT_TOPIC_SUBSCRIBE)
- 定义接收消息的回调函数:
pythonCopy code def on_message(client, userdata, msg): print("Received message: " + msg.topic + " " + msg.payload.decode())
- 定义发布消息的函数:
pythonCopy code def publish_message(client, topic, payload): client.publish(topic, payload)
- 定义心跳函数:
pythonCopy code def send_heartbeat(): print("Sending heartbeat") publish_message(client, MQTT_TOPIC_PUBLISH, "heartbeat") threading.Timer(60, send_heartbeat).start()
- 定义定时上报函数:
pythonCopy code def report_data(): print("Reporting data") message = [ {"sensor_device_id": 1, "port_id": 1, "sdata": 33}, {"sensor_device_id": 1, "port_id": 2, "sdata": 60} ] payload = json.dumps(message) publish_message(client, MQTT_TOPIC_PUBLISH, payload) threading.Timer(10, report_data).start()
- 设置客户端的连接成功和消息接收的回调函数:
pythonCopy code client.on_connect = on_connect client.on_message = on_message
- 连接 MQTT 服务器:
pythonCopy code client.connect(MQTT_BROKER, MQTT_PORT, 60)
- 启动心跳定时器:
pythonCopy code send_heartbeat()
- 启动定时上报定时器:
pythonCopy code report_data()
- 进入消息监听循环:
pythonCopy code client.loop_forever()