python Mqtt 的安装及使用




简介&安装

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的


,这些特点使它适用范围非常广泛.可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消


息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有


较广泛的应用。


MQTT 提供两个核心功能:


三种级别的消息发布服务质量

基于订阅/发布的消息转发服务。

有三种消息发布服务质量:


"至多一次",消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,


环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要普通APP的推


送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。


"至少一次",确保消息到达,但消息重复可能会发生。


"只有一次",确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中


,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推


送,确保用户收到且只会收到一次。


安装方式见官网介绍:http://mosquitto.org/download/

Mac 安装方式非常简单

brew install mosquitto


新梦想技术分享


安装完成,可以见它的配置文件为地址在 /usr/local/etc/mosquitto/mosquitto.conf 下


启动MQTT服务命令为

mosquitto -c /usr/local/etc/mosquitto/mosquitto.conf 即可开启服务

如果提示 mosquitto 命令未找到,就添加一下环境变量


MOSQUITTO_HOME=/usr/local/Cellar/mosquitto/1.6.9/sbin

export MOSQUITTO_HOME

export PATH=$PATH:$MOSQUITTO_HOME 

启动服务 brew services start mosquitto

停止服务 brew services stop mosquitto


发送消息命令

mosquitto_pub -h 127.0.0.1 -p 1883 -t "mytopic" -m "222"

表示向 主题为 mytopic 发送一条 内容为 222的消息


添加订阅主题命令

mosquitto_sub -h 127.0.0.1 -p 1883 -t "mytopic" -v

表示向 mqtt中添加 一个主题为 mytopic 的监听


新梦想技术分享

以上是命令的方式测试及验证相关功能,那么在python中代码如何调用呢


Python 使用MQTT

MqttClient.py


 


import datetime

import paho.mqtt.client as mqtt

# 服务器地址

strBroker = "localhost"

# 通信端口

port = 1883

# 用户名

username = 'username'

# 密码

password = 'password'

# 订阅主题名

topic = 'topic'


def on_connect(mqttc, obj, rc):

    print("OnConnetc, rc: " + str(rc))


def on_publish(mqttc, obj, mid):

    print("OnPublish, mid: " + str(mid))


def on_subscribe(mqttc, obj, mid, granted_qos):

    print("Subscribed: " + str(mid) + " " + str(granted_qos))


def on_log(mqttc, obj, level, string):

    print("Log:" + string)


def on_message(mqttc, obj, msg):

    curtime = datetime.datetime.now()

    strcurtime = curtime.strftime("%Y-%m-%d %H:%M:%S")

    print(strcurtime + ": " + msg.topic + " " + str(msg.qos) + " " + str(msg.payload))

    on_exec(str(msg.payload))


def on_exec(strcmd):

    print

    "Exec:", strcmd

# =====================================================

if __name__ == '__main__':

    mqttc = mqtt.Client("test")

    mqttc.>

    mqttc.>

    mqttc.>

    mqttc.>

    mqttc.>


    # 设置账号密码

    # mqttc.username_pw_set(username, password=password)


    mqttc.connect(strBroker, port, 60)

    mqttc.subscribe(topic, 0)

    mqttc.loop_forever()



MqttServer.py


 


import sys

import datetime

import socket, sys

import paho.mqtt.publish as publish


'''

发送消息

'''

def transmitMQTT(strMsg):

    strMqttBroker = "localhost"

    strMqttTopic = "topic"

    publish.single(strMqttTopic, strMsg, hostname=strMqttBroker)


if __name__ == '__main__':

    msg = "Hello,MQTT 2020!"

    transmitMQTT("msg")

    print("Send msg = [", msg, "] ok.")



ps :如果Homebrew 更新太慢,可以替换Homebrew 源,具体参见这个文章


请使用浏览器的分享功能分享到微信等