首页 > 编程语言 >2021-11-14-MQTT的python应用

2021-11-14-MQTT的python应用

时间:2023-09-17 19:59:45浏览次数:53  
标签:11 14 python publish sign client connect import ID

layout: post
title: MQTT的python应用
categories: 日志
tags: 
    - 日志
    - 大二
BGImage: 'https://github.xutongxin.me/https://raw.githubusercontent.com/xutongxin1/PictureBed/master/img0/20220310123346.png'
jekyll-theme-WuK:
    musicid: '34367899'

这一天

很复杂

电赛的实际效果和结局

虽然已经能猜到这个结局

但是还是停不下自我的指责和对自己的谩骂

或许都是我咎由自取吧

首先是Python包,安装

pip install paho-mqtt

官方文档:

https://www.eclipse.org/paho/index.php?page=clients/python/docs/index.php

例程

import paho.mqtt.client as mqtt
import struct
import json
import base64
import hmac
import time
from urllib.parse import quote

DEV_ID = "first"  # 设备ID
PRO_ID = "    "  # 产品ID
DEV_NAME = 'first'
accesskey = "   "


def token(id, access_key):  # 官方文档给出的核心秘钥计算算法

    version = '2018-10-31'

    res = 'products/%s' % id  # 通过产品ID访问产品API

    # 用户自定义token过期时间
    et = str(int(time.time()) + 3600)

    # 签名方法,支持md5、sha1、sha256
    method = 'sha1'

    # 对access_key进行decode
    key = base64.b64decode(access_key)

    # 计算sign
    org = et + '\n' + method + '\n' + res + '\n' + version
    sign_b = hmac.new(key=key, msg=org.encode(), digestmod=method)
    sign = base64.b64encode(sign_b.digest()).decode()

    # value 部分进行url编码,method/res/version值较为简单无需编码
    sign = quote(sign, safe='')
    res = quote(res, safe='')

    # token参数拼接
    token = 'version=%s&res=%s&et=%s&method=%s&sign=%s' % (version, res, et, method, sign)
    return token


def on_connect(client, userdata, flags, rc):
    print("连接结果:" + mqtt.connack_string(rc))


# 从服务器接收发布消息时的回调。
def on_message(client, userdata, msg):
    print(str(msg.payload, 'utf-8'))


# 当消息已经被发送给中间人,on_publish()回调将会被触发
def on_publish(client, userdata, mid):
    print(str(mid))
def on_subscribe(client, userdata, mid, granted_qos):
    print(str(mid))

if __name__ == '__main__':
    passw = token(PRO_ID,accesskey)
    print(passw)
    client = mqtt.Client(DEV_NAME, protocol=mqtt.MQTTv311)
    # client.tls_set(certfile='/Users/mryu/PycharmProjects/MyProject/onenet/MQTTS-certificate.pem') #鉴权证书
   
    client.on_connect = on_connect
    client.on_publish = on_publish
    client.on_message = on_message
    #client.on_subscribe = on_subscribe
    client.connect('183.230.102.116', port=1883, keepalive=60)
    client.username_pw_set(PRO_ID, passw)


    client.loop_start()
    i=0
    while True:
        client.subscribe("$sys/oA8jn8R554/first/thing/property/post/reply",0)
        time.sleep(1)
        i+=1
        data='{"id": "123","version": "1.0","params": {"consumption": {"value": '+str(i)+'},"lightIntensity": {"value": 233}}}'
        client.publish("$sys/oA8jn8R554/first/thing/property/post",data)

要点:

先注册回调函数实例

	client.on_connect = on_connect
    client.on_publish = on_publish
    client.on_message = on_message
    #client.on_subscribe = on_subscribe

再启动连接

client.connect('183.230.102.116', port=1883, keepalive=60)
client.username_pw_set(PRO_ID, passw)

最后client.loop_start()即可不阻塞运行客户端

测试软件

MQTTX不太好用

还是用了MQTT.fx软件

不过这个软件快下载不了了,因此存档到云盘上了

以上

2021年11月14日16:14:46

标签:11,14,python,publish,sign,client,connect,import,ID
From: https://www.cnblogs.com/xutongxin/p/17709607.html

相关文章

  • 2020-8-18-python分应用调整音量
    layout:posttitle:python分应用调整音量categories:pythontag:pythonpython分应用调整音量注:本文为此文铺垫我在网上找了一圈又一圈,从中文到英文,都没有找到我想要的用python调整windows音量合成器的方式我知道可以用调dll的方式,但是我怎么会呢?最终我阴差阳错的找到了......
  • [ARC119F] AtCoder Express 3
    题目链接观察样例1的解释,发现切换类型的方法是比较单一的这种就是直接走一段换一段,我们可以人为钦定换乘时最多走一步,因为相邻的同色也可以视作走车站这种情况复杂一些,需要往回走一段,但是依然可以发现往回走也至多一步,因为如果走了两步说明往回走了一步到达的车站依......
  • 2020-12-10-xtx第14周开发日志
    layout:posttitle:xtx第14周开发日志categories:日志tags:-日志-2020日志BGImage:'https://cdn.jsdelivr.net/gh/xutongxin1/xutongxin1.github.io@bebc52fb1b67a08f8db0026051b9716a88a37900/asset/%E6%97%A5%E5%BF%97/75065066_p0.jpg'jekyll-theme-Wu......
  • 2020-11-27-myy12周日志
    layout:posttitle:myy通讯录日志categories:日志tags:-日志-2020日志jekyll-theme-WuK:background_music:'<iframeframeborder="no"border="0"marginwidth="0"marginheight="0"width=100%height=86sr......
  • 2020-11-23-第12周开发日记
    layout:posttitle:xtx第12周开发日志categories:日志tags:-日志-2020日志BGImage:'https://cdn.jsdelivr.net/gh/xutongxin1/xutongxin1.github.io@a09d6cce1e133e1819736340f4016f10a0226969/asset/background/75006825_p0.jpg'jekyll-theme-WuK:m......
  • (数据科学学习手札154)geopandas 0.14版本新特性一览
    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes1简介大家好我是费老师,就在前两天,Python生态中的GIS运算神器geopandas发布了其0.14.0新版本,在这次新版本更新中,不仅是新增了许多矢量计算API,还开始为日后正式发布1.0版本做准备,对......
  • vim插件使用python编写+AXI非对齐传输如何发送+verdi配置搜索顺序+verible和verilator
    vim插件使用python编写虽然vim有自己的一套语法格式,但是学习成本放着呢,语言那么多,啥都学哪学的过来嘛。不过vim确实是支持python的,但是是python2,而不是python3,因此语法上的一些问题要兼容下。这个是官方手册,正确而可靠的部分。https://vimdoc.sourceforge.net/htmldoc/if_pyth......
  • ES14新特性揭秘,对前端开发有哪些影响?
    ECMAScript2023也就是ES14已经发布3个月了,还有好多小伙伴没有关注到ES14有哪些变化,本文将为大家梳理下ES14最新规范新增功能:对数组的新增功能,对shebang的支持,对弱引用集合的符号键的扩展。这个版本的都是一些细微的改进,我们一起看看有哪些变更目录Array.prototype.toSortedAr......
  • 20211312徐元琦学习笔记2
    第9章I/O库函数——教材知识点归纳9.1~9.2系统调用和I/O库函数系统调用:操作系统中,进程以两种不同的方式运行:内核模式(Kmode)和用户模式(Umode)。Umode权限有限,特殊权限的操作需要在Kmode下进行。系统调用(SystemCall)机制允许进程进入Kmode,执行更高权限的操作。系统调用和I/O......
  • python语言基础与核心技巧知识点总结
    一、python语言基础python基础语言的详细操作演示1.1变量变量.png1.2数据类型数据类型.png1.3序列序列分类:可变序列list,不可变序列tuple、str。在python中,内建了6中序列:列表、元组、字符串、unicode字符串、buffer对象、xrange对象。(1)list列表list列表.png(2)tuple元祖tuple.png(......