使用Python连接华为云物联网服务器与服务器完成数据交互

news2024/12/25 23:43:16

一、前言

随着物联网技术的快速发展,越来越多的设备和系统需要通过网络进行连接和数据交换,以实现智能化管理和控制。华为云物联网平台作为业界领先的物联网解决方案提供商,提供了稳定可靠的MQTT服务器,使得设备能够轻松接入云端,实现数据的实时上传和下发。

当前决定开发一个基于Python的MQTT客户端项目,利用paho-mqtt库与华为云物联网MQTT服务器进行通信。该项目实现设备数据的定时上传功能,确保设备状态和数据能够及时被云端系统获取并处理。同时,项目还具备接收服务器下发消息的能力,使得设备能够根据云端指令进行相应的操作或响应。

通过本项目,能够构建一个高效、稳定的物联网通信框架,为设备的远程监控、控制和管理提供有力支持。通过定时上传数据,可以实时了解设备的运行状态、环境参数等关键信息,从而及时发现并解决潜在问题。同时,接收服务器下发消息的功能也使得设备能够灵活响应云端指令,实现更加智能化的控制和管理。

本项目通过Python的paho-mqtt库与华为云物联网MQTT服务器进行通信,实现设备数据的定时上传和服务器消息的接收处理,为物联网设备的远程监控、控制和管理提供可靠的技术支持。

image-20240612142441300

二、Python代码编写

2.1 安装Paho MQTT库

打开自己电脑的Python安装目录。

如果不知道自己的Python安装目录在哪里。

可以使用 whichwhere 命令

  • 在Linux或macOS上,打开终端并输入:

    which python3
    
  • 在Windows上,打开命令提示符并输入:

    where python
    

这些命令会显示Python可执行文件的路径。

例如:

C:\Users\11266>where python
C:\Users\11266\AppData\Local\Programs\Python\Python311\python.exe
C:\Users\11266\AppData\Local\Microsoft\WindowsApps\python.exe

找到pip.exe文件的路径。

image-20240612140125093

在文件路径里输入cmd按下回车键,打开命令行。

image-20240612140255011

在命令行输入pip install paho-mqtt 安装 paho-mqtt 库。

例如:

C:\Users\11266\AppData\Local\Programs\Python\Python311\Scripts>pip install paho-mqtt
Collecting paho-mqtt
  Downloading paho_mqtt-2.1.0-py3-none-any.whl (67 kB)
     ---------------------------------------- 67.2/67.2 kB 1.2 MB/s eta 0:00:00
Installing collected packages: paho-mqtt
Successfully installed paho-mqtt-2.1.0

[notice] A new release of pip is available: 23.1.2 -> 24.0
[notice] To update, run: python.exe -m pip install --upgrade pip

C:\Users\11266\AppData\Local\Programs\Python\Python311\Scripts>

image-20240612140328300

2.2 paho-mqtt库介绍

paho-mqtt 是一个Python客户端库,用于与MQTT代理服务器进行通信。MQTT(Message Queuing Telemetry Transport)是一种轻量级的、发布-订阅模式的消息传输协议,常用于物联网(IoT)应用和实时数据传输。paho-mqtt 库提供了在Python中实现MQTT客户端的功能,使你可以连接到MQTT代理服务器、订阅主题、发布消息等。

特性

  • 支持MQTT 3.1和3.1.1版本的协议规范。
  • 提供同步和异步的消息发布和订阅功能。
  • 支持TLS/SSL加密连接,以确保安全的通信。
  • 具有遗嘱消息和保持活动功能,以增强连接的稳定性。
  • 可以设置用户名和密码进行连接认证。
  • 提供灵活的回调函数机制,用于处理连接、订阅和接收消息等事件。

安装

可以使用pip来安装 paho-mqtt 库:

pip install paho-mqtt

总结

paho-mqtt 库提供了一个方便的方式来在Python应用程序中实现MQTT客户端功能。它支持多种MQTT特性,并且易于使用。通过这个库,你可以轻松地构建与MQTT代理服务器进行通信的应用程序,从而实现实时数据传输、远程控制和监控等功能。

2.3 我的华为云MQTT服务器信息

MQTT服务器IP地址: 117.78.5.125
MQTT端口号:  1883
客户端ID:65ec636771d845632aff9496_dev1_0_0_2024052901
用户名:65ec636771d845632aff9496_dev1
登录密码:a6e312275a031e7629e3133fefeac555dbce6dc06b56c039dd8a224084ee5b44
订阅主题:$oc/devices/65ec636771d845632aff9496_dev1/sys/messages/down
发布主题:$oc/devices/65ec636771d845632aff9496_dev1/sys/properties/report
发布的消息:{"services": [{"service_id": "stm32","properties":{"MQ135":60,"DHT11_T":24,"DHT11_H":60,"SOIL_H":50,"motor":1,"FLAME":0,"GPS":{"lon":120.21,"lat":30.19}}}]}

2.4 实现代码

import paho.mqtt.client as mqtt
import json
import time
from threading import Timer

# MQTT 配置信息
MQTT_SERVER = "117.78.5.125"
MQTT_PORT = 1883
CLIENT_ID = "65ec636771d845632aff9496_dev1_0_0_2024052901"
USERNAME = "65ec636771d845632aff9496_dev1"
PASSWORD = "a6e312275a031e7629e3133fefeac555dbce6dc06b56c039dd8a224084ee5b44"
SUBSCRIBE_TOPIC = "$oc/devices/65ec636771d845632aff9496_dev1/sys/messages/down"
PUBLISH_TOPIC = "$oc/devices/65ec636771d845632aff9496_dev1/sys/properties/report"
PUBLISH_INTERVAL = 10  # 定时器间隔,单位:秒

# 要发布的消息内容
message_payload = {
    "services": [
        {
            "service_id": "stm32",
            "properties": {
                "MQ135": 60,
                "DHT11_T": 24,
                "DHT11_H": 60,
                "SOIL_H": 50,
                "motor": 1,
                "FLAME": 0,
                "GPS": {
                    "lon": 120.21,
                    "lat": 30.19
                }
            }
        }
    ]
}

# 回调函数 - 当连接到服务器时被调用
def on_connect(client, userdata, flags, rc):
    print(f"Connected with result code {rc}")
    client.subscribe(SUBSCRIBE_TOPIC)

# 回调函数 - 当收到服务器下发的消息时被调用
def on_message(client, userdata, msg):
    print(f"Received message from topic '{msg.topic}': {msg.payload.decode()}")

# 定时发布消息
def publish_message():
    client.publish(PUBLISH_TOPIC, json.dumps(message_payload))
    print(f"Published message: {json.dumps(message_payload)}")
    # 设置定时器,以继续定期发布消息
    Timer(PUBLISH_INTERVAL, publish_message).start()

# 创建MQTT客户端并设置回调函数
client = mqtt.Client(CLIENT_ID, protocol=mqtt.MQTTv311)
client.username_pw_set(USERNAME, PASSWORD)
client.on_connect = on_connect
client.on_message = on_message

# 连接到MQTT服务器
client.connect(MQTT_SERVER, MQTT_PORT, 60)

# 启动网络循环
client.loop_start()

# 启动定时发布消息
publish_message()

# 主线程保持运行状态
try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    print("Disconnecting from MQTT server...")
    client.loop_stop()
    client.disconnect()

代码说明

  1. 配置部分:设置了MQTT服务器信息、客户端ID、用户名、密码、订阅主题和发布主题等。
  2. 回调函数:
    • on_connect: 在连接成功后订阅指定的主题。
    • on_message: 收到消息时打印消息内容。
  3. 定时发布消息:使用 Timer 类定时发布消息到指定的主题。
  4. 主程序:创建并配置MQTT客户端,连接到MQTT服务器,启动网络循环和定时发布消息的功能。

运行代码

运行此代码后,将:

  • 连接到指定的MQTT服务器。
  • 订阅 $oc/devices/65ec636771d845632aff9496_dev1/sys/messages/down 主题。
  • 每10秒钟向 $oc/devices/65ec636771d845632aff9496_dev1/sys/properties/report 主题发布一次消息。
  • 打印所有从服务器接收到的消息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1983644.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构(其四)--特殊矩阵的存储

目录 11.特殊矩阵的压缩存储 (1).一维数组的储存结构 (2).二维数组的存储结构 (3).普通矩阵的存储 (4).特殊矩阵的压缩存储 i.对称矩阵 ii.三角矩阵 iii.三对角矩阵 iiii.稀疏矩…

上位机 OPC协议、KepServerEX

OPC 全称 OLE For Process Control 》》OPC(Open Platform Communications,以前称为 OLE for Process Control)是一组软件技术 opc出现之前,软件和硬件是分开的, 如果要与不同的设备通信,需要用各个厂商的…

DepthB2R【附代码】(权限提升)

靶机下载地址: https://www.vulnhub.com/entry/depth-1,213/https://www.vulnhub.com/entry/depth-1,213/ 1. 主机发现端口扫描目录扫描 1.1. 主机发现 nmap -sn 192.168.43.0/24|grep -B 2 08:00:27:08:B4:07 1.2. 端口扫描 nmap -p- 192.168.43.112 1.3. 目录…

NoSQL 数据库之MongoDB

MongoDB 是一个开源的 NoSQL 数据库,由 MongoDB Inc. 研发和维护。它采用文档存储模型,使用 JSON 类似的 BSON(二进制 JSON)格式来存储数据。MongoDB 具有高性能、易扩展和高可用性等特点,广泛应用于现代 web 应用程序…

Linux学习笔记:iptables命令管理

1、iptables简介 其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构。 语法格式:iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION -t&#…

sqllabs通关

sqllabs5:(报错注入) ?id1 回显You are in........... ?id2-1 回显You are in........... ?id1 回显 1 LIMIT 0,1 判断是字符型,闭合。?id1order by 3-- //页面显示正常我们试了4行得出是报错注入 我们先爆库名 http://127.0.0.1/sqli-labs-master/L…

技术详解:视频美颜SDK与直播美颜插件开发指南

本篇文章,小编将详细探讨如何开发视频美颜SDK以及如何将其集成到直播应用中。 一、视频美颜SDK的基本原理 视频美颜SDK其实现的基本步骤如下: 1.图像采集与预处理:从相机或视频流中获取原始图像帧,进行必要的预处理如色彩空间转…

IoTDB 入门教程 基础篇②——IoTDB 企业版比开源版本值在哪?

文章目录 一、前文二、功能对比三、可视化控制台四、白名单五、审计日志六、数据备份七、机器学习八、总结 一、前文 IoTDB入门教程——导读 二、功能对比 由天谋科技官网得知,IoTDB(开源版)与TimechoDB(企业版)的功能…

Android Studio Gradle多渠道打包

原理使用Android Studio打一次渠道包,用反编译工具反编译后,修改渠道信息重新编译 准备文件 分渠道配置文件:channel.txt ↓ # 多渠道配置里“统计平台”、“市场名称”、“渠道编号”分别代表什么意思? # 统计平台:…

Java 后端接收HTML等标签数据,到后端标签丢失

文章目录 前言一、修改Xss配置总结 前言 一开始以为是接收参数出了问题,后面看了RequestBody注解并不会改变参数, 最后发现是xss的配置问题。 一、修改Xss配置 把enabled: true改成false就好了 #xss配置,防止xss攻击 xss:#过滤开关:enable…

简单的docker学习 第10章 docker管理监控平台

第10章 Docker管理监控平台 当 Docker引擎中管理的镜像、容器、网络等对象数量变得越来越多时,通过简单的 docker命令来管理已经显得使人力不从心了。于是就出现了很多的 Docker 可视化管理平台。我们这里对现在较流行的、使用较多的几种平台进行介绍。 10.1 Dock…

【Python】torch.nn模块中函数详解和示例(一)

前言 在深度学习日益成为解决复杂问题重要工具的今天,PyTorch凭借其灵活性和易用性,成为了众多研究者与开发者的首选框架。本系列博客 将对torch中的nn模块中186个函数进行介绍,以函数首字母从a到z的排序开展,包含函数原理、原型…

【css】 CSS3+JS做一个酷炫的仪表进度条3d进度条

创建一个动态进度环组件 在现代网页设计中,进度环是一种常见的视觉元素,用于展示任务的完成度或加载状态。本文将介绍如何使用Vue.js和Less创建一个动态进度环组件,该组件不仅具有美观的视觉效果,还能够根据用户输入动态改变颜色…

「链表」Floyd判环法(弗洛伊德判圈法|龟兔赛跑法)/ LeetCode 141(C++)

给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(…

【C++】C++11的新特性 — function 包装器 , bind包装器

有些人的生活,可以轻轻松松,有些人的生活就是奥运会,生下来就在跑道上,如果不去全力奔跑,注定会被淘汰,更何况,即使努力奔跑,也未必能战胜很多人。 -- 傅首尔 -- C11的新特性 1 fun…

判断字符串是否接近:深入解析及优化【字符串、哈希表、优化过程】

本文将详细解析解决这个问题的思路,并逐步优化实现方案。 问题描述 给定两个字符串 word1 和 word2,如果通过以下操作可以将 word1 转换为 word2,则认为它们是接近的: 交换任意两个现有字符。将一个现有字符的每次出现转换为另…

SQL进阶技巧:多行转列问题中如何保证不同字段内容有序性及一一对应?【collect_list函数有序性保证问题】

目录 0 问题描述【小红书面试题】 1 数据准备 2 问题分析 3 小结 0 问题描述【小红书】 有如下需求,需要将左边的表变换成右边的表,注意字段内容的顺序及对应内容的一致性。 第一个字段为name,第二个字段为subject,第三个字段为score,变换后要求subject按照语文、数学…

android13 禁止某个app接口某个广播 禁止应用接受开机广播 禁止应用接收广播

总纲 android13 rom 开发总纲说明 目录 1.前言 2.问题分析 3.代码更改 4.彩蛋 1.前言 我们在定制系统的过程中,有时候,有些客户的应用的一些表现,并不能满足需求。例如应用接收了开机广播,然后做了一些事情,起调了某些activity。或者接受了某个广播,做了一些操作等…

网络安全第一次作业(ubuntuan安装nginx以及php部署 and sql注入(less01-08)))

ubuntuan安装nginx以及php部署 1.安装依赖包 rootadmin123-virtual-machine:~# apt-get install gcc libpcre3 libpcre3-dev zliblg zliblg-dev openssl libssl-dev2.安装nginx 到https://nginx.org/en/download.html下载nginx 之后将压缩包通过xtfp传输到ubuntu的/usr/loc…