首页 > 其他分享 >【汇总】EMQX 函数API、安装与使用说明

【汇总】EMQX 函数API、安装与使用说明

时间:2024-07-17 18:42:39浏览次数:16  
标签:userdata mqttc 4.3 汇总 client topic API EMQX 客户端

前言全局说明

EMQX 函数说明


一、说明


二、Client的基本使用流程

创建客户端实例
使用 connect*() 函数之一连接到代理
调用 loop*() 函数之一来维护与代理的网络流量
使用 subscribe() 订阅主题并接收消息
使用 publish() 将消息发布到代理
使用 disconnect() 断开与代理的连接

三、Client类与方法

3.1 Client的构建与重置

3.1.1 原型:
Client(client_id="", clean_session=True, userdata=None, protocol=MQTTv311, transport="tcp")
reinitialise(client_id="", clean_session=True, userdata=None)
3.1.2 使用示例如下:
import paho.mqtt.client as mqtt
# 构建一个Client
mqttc = mqtt.Client()
# 重置一个Client
mqttc.reinitialise()
3.1.3 参数说明
client_id:
连接到代理时使用的唯一客户端 ID 字符串。如果 client_id 为零长度或 None ,则将随机生成一个。在这种情况下,clean_session 参数必须为 True。

clean_session:
确定客户端类型的布尔值。如果为 True,代理将在断开连接时删除有关此客户端的所有信息。如果为 False,则客户端是持久客户端,并且在客户端断开连接时将保留订阅信息和排队消息。
注意,客户端永远不会在断开连接时丢弃自己的传出消息。调用 connect() 或 reconnect() 将导致消息被重新发送。使用 reinitialise() 将客户端重置为其原始状态。

userdata:
作为 userdata 参数传递给回调的任何类型的用户定义数据。稍后可能会使用 user_data_set() 函数对其进行更新。

protocol:
用于此客户端的 MQTT 协议版本。可以是 MQTTv31 或 MQTTv311

transport:
设置为“websockets”以通过 WebSockets 发送 MQTT。保留默认值“tcp”以使用原始 TCP。

3.2 连接至代理/重新连接/与代理断开连接

3.2.1 原型:
connect(host, port=1883, keepalive=60, bind_address="")
reconnect()
disconnect()

3.2.2 使用示例如下:
# 已构建一个Client:mqttc
mqttc.connect("mqtt.eclipseprojects.io") 
# 使用reconnect与disconnect之前必须已经调用过connect
mqttc.reconnect()
mqttc.disconnect()
3.2.3 参数说明
host:
远程代理的主机名或 IP 地址
port:
要连接的服务器主机的网络端口。 默认为 1883。请注意,基于 SSL/TLS 的 MQTT 的默认端口为 8883,因此如果您使用 tls_set() 或 tls_set_context(),则可能需要手动提供端口
keepalive:
与代理通信之间允许的最长间隔(以秒为单位)。 如果没有其他消息正在交换,这将控制客户端向代理发送 ping 消息的速率。

需要指出,MQTT协议规定,在 1.5倍的keepalive时间内,如果代理没有收到来自客户端的任何数据包,那么代理将认为它和这个客户端之间的连接已经断开;而如果客户端没有收到来自 代理的任何数据包,那么这个客户端会认为它和代理之间的连接已经断开。为维持正常的连接,如果代理与客户端之间没有其他数据传输,客户端会每隔keepalive时间向代理发送一次ping消息(由loop()来维护)。keepalive的缺省时间是60s。

bind_address:
假设存在多个接口,要将此客户端绑定到的本地网络接口的 IP 地址

3.3 网络回路控制

3.3.1 原型:
loop(timeout=1.0, max_packets=1)
loop_start()
loop_stop(force=False)
loop_forever(timeout=1.0, max_packets=1, retry_first_connection=False)
3.3.2 使用示例如下:
3.3.3 参数说明
mqttc.connect("mqtt.eclipseprojects.io")
mqttc.loop_start()
# do something else
while True:
    temperature = sensor.blocking_read()
    mqttc.publish("paho/temperature", temperature)

mqttc.loop_stop()

3.4 订阅/取消订阅

3.4.1 原型:
subscribe(topic, qos=0)
unsubscribe(topic)
3.4.2 使用示例如下:
mqttc.subscribe(("my/topic", 1))
mqttc.subscribe([("my/topic", 0), ("another/topic", 2)])
mqttc.unsubscribe("my/topic")
mqttc.unsubscribe(["my/topic", "another/topic"])
3.4.3 参数说明
topic:
一个字符串,指定要订阅的订阅主题。
qos:
订阅所需的服务质量(quality of service)级别。 默认为 0,可选0,1,2。

3.5 发布

3.5.1 原型:
publish(topic, payload=None, qos=0, retain=False)
3.5.2 使用示例如下:
mqttc.publish(topic="my/topic", payload=None, qos=0, retain=True)
3.5.3 参数说明
topic:
消息应该发布到的主题
payload:
要发送的实际消息。 如果没有给出,或者设置为 None 将使用零长度消息。 传递 int 或 float 将导致有效负载转换为表示该数字的字符串。 如果您希望发送真正的 int/float,请使用 struct.pack() 创建您需要的有效负载。
qos:
要使用的服务质量(quality of service)水平,默认为 0,可选0,1,2。
retain:
如果设置为 True,则该消息将被设置为该主题的保留消息。保留消息的作用是使新订阅某个主题的客户端能够收到该主题中上一次发布的消息。

四、回调

4.1 连接

4.1.1 原型:
on_connect(client, userdata, flags, rc)
4.1.2 使用示例如下:
def on_connect(client, userdata, flags, rc):
    print("Connection returned result: "+connack_string(rc))

mqttc.on_connect = on_connect
...
4.1.3 参数说明
client:
此回调的客户端实例
userdata:
在 Client() 或 user_data_set() 中设置的私有用户数据
flags:
代理发送的响应标志
rc:
连接结果

4.2 断开连接

4.2.1 原型:
on_disconnect(client, userdata, rc)
4.2.2 使用示例如下:
def on_disconnect(client, userdata, rc):
    if rc != 0:
        print("Unexpected disconnection.")

mqttc.on_disconnect = on_disconnect
...
4.2.3 参数说明
client:
此回调的客户端实例
userdata:
在 Client() 或 user_data_set() 中设置的私有用户数据
flags:
代理发送的响应标志
rc:
断开结果

4.3 收到消息

4.3.1 原型:
on_message(client, userdata, message)
message_callback_add(sub, callback)
message_callback_remove(sub)
4.3.2 使用示例如下:
def on_message(client, userdata, message):
    print("Received message '" + str(message.payload) + "' on topic '"
        + message.topic + "' with QoS " + str(message.qos))

mqttc.on_message = on_message
...
4.3.3 参数说明
client:
此回调的客户端实例
userdata:
在 Client() 或 user_data_set() 中设置的私有用户数据
message:
MQTTMessage信息实例,这是一个包含成员 topic、payload、qos、retain 的类。
sub:
特定主题
callback:
定义的callback函数

4.4 发布消息

4.3.1 原型:
on_publish(client, userdata, mid)
4.3.2 使用示例如下:

4.3.3 参数说明

4.5 订阅主题

4.3.1 原型:
on_subscribe(client, userdata, mid, granted_qos)
4.3.2 使用示例如下:

4.3.3 参数说明

4.6 取消订阅

4.3.1 原型:
on_unsubscribe(client, userdata, mid)
4.3.2 使用示例如下:

4.3.3 参数说明

4.6 收到日志

4.3.1 原型:
on_log(client, userdata, level, buf)
4.3.2 使用示例如下:

4.3.3 参数说明



免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。




参考、来源:
https://github.com/emqx/MQTT-Client-Examples (官方源码)
https://docs.emqx.com/zh/cloud/latest/connect_to_deployments/python_sdk.html (官方说明)
https://www.cnblogs.com/steven-dou/articles/13921825.html (paho-mqtt 模块使用和API分析)
https://blog.csdn.net/zbgjhy88/article/details/98112017 (API使用)
https://wenku.csdn.net/answer/c4f5f24eff7949e983a21ccdaaa7638e
https://blog.csdn.net/qq_45664055/article/details/135497850
https://blog.51cto.com/u_16213324/11147532
https://www.jb51.net/article/160686.htm



标签:userdata,mqttc,4.3,汇总,client,topic,API,EMQX,客户端
From: https://www.cnblogs.com/wutou/p/18308062

相关文章

  • 利用FastAPI和OpenAI-Whisper打造高效的语音转录服务
    最近好久没有写博客了,浅浅记录下如何将OpenAI-Whisper做成Web服务吧......
  • 周报 | 24.7.8-24.7.14文章汇总
    为了更好地整理文章和发表接下来的文章,以后每周都汇总一份周报。AI生成未来|大语言模型的前世今生:万字长文完整梳理所有里程碑式大语言模型(LLMs)-CSDN博客计算机视觉研究院|智慧建筑:基于YOLOv7的建筑外墙缺陷检测_国外无人机外墙检测-CSDN博客周报|24.7.1-24.7.7文章汇......
  • WebAPI公开接口请求签名验证
    前言现在的系统后端开发的时候,会公开很多API接口对于要登录认证后才能访问的接口,这样的请求验证就由身份认证模块完成但是也有些接口是对外公开的,没有身份认证的接口我们怎么保证接口的请求是合法的,有效的.这样我们一般就是对请求的合法性做签名验证.实现原理为保证接......
  • Java中的RESTful API设计与实现
    Java中的RESTfulAPI设计与实现大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!一、引言在现代Web开发中,RESTfulAPI已经成为数据传输的标准方式。REST(RepresentationalStateTransfer)是一种基于资源的架构风格,广泛应用于互联网服务中。本文将详细介绍......
  • 使用Spring Boot和GraphQL构建灵活的API服务
    使用SpringBoot和GraphQL构建灵活的API服务大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!一、引言在现代Web应用中,API服务是前后端数据交互的桥梁。传统的RESTfulAPI虽然强大,但在复杂查询场景中显得有些笨重。GraphQL作为一种新型API查询语言,提供了......
  • SAP中MIR4使用的BAPI是什么,如何使用?
    在SAP系统中,MIR4是一个用于采购发票校验的事务代码,它允许用户处理与采购订单相关的发票。关于MIR4使用的BAPI(BusinessApplicationProgrammingInterface,业务应用程序编程接口),并没有一个特定的、直接对应MIR4的BAPI名称,因为BAPI通常是针对SAP系统中特定的业务对象或功能而......
  • SAP中MR8M调用的BAPI是什么,如何使用?
    在SAP系统中,针对MR8M(通常与采购发票冲销相关)的操作,并没有直接命名为BAPI_MR8M的标准BAPI。然而,对于发票冲销这一功能,SAP提供了BAPI_INCOMINGINVOICE_CANCEL这一BAPI,它可以用于冲销传入的发票。BAPI_INCOMINGINVOICE_CANCEL的使用BAPI_INCOMINGINVOICE_CANCELBAPI是用于......
  • API引用在Element UI (Vue 2)和Element Plus (Vue 3)中的不同
    API变动样式类名变化:一些组件的样式类名有所变动,可能需要更新你的自定义样式。事件名和属性名变化:某些组件的事件名和属性名发生了变化,需要检查ElementPlus文档以了解详细信息。使用setup函数:在Vue3中,可以使用CompositionAPI(如setup函数)来组织代码,而......
  • Python办公自动化:效率飞跃,自动化批量汇总Excel到Word
    Python办公自动化:效率飞跃,自动化批量汇总Excel到Word原创 丹心向阳 数海丹心 2024年06月23日07:30 山东摘要:每个月底,是许多数据分析师的梦魇,尤其是当他们需要从成百上千的Excel报表中汇总数据到Word时。本文将讲述小李如何使用Python自动化技术,几秒钟完成原本需要通宵达旦......
  • 【利用Python进行数据分析8】Pandas入门(描述性统计的汇总与计算)
    导包importyfinanceasyfimportpandasaspdimportnumpyasnp1.描述性统计的汇总与计算#1.描述性统计的汇总与计算#数值型数据df=pd.DataFrame([[1.4,np.nan],[7.1,-4.5],[np.nan,np.nan],[0.75,-1.3]],index=["a","b","c","d"],......