기사 디렉토리
1. 소개
https://pypi.org/project/paho-mqtt/
MQTT 프로토콜은 M2M(기계 간)/"사물 인터넷" 연결 프로토콜입니다. 이는 매우 가벼운 게시/구독 메시징 전송으로 설계되었으며, 작은 코드 공간이 필요하거나 네트워크 대역폭이 중요한 원격 위치에 연결하는 데 유용합니다.
MQTT는 낮은 대역폭, 높은 대기 시간 또는 불안정한 네트워크 환경에 특히 적합한 경량 게시/구독 통신 프로토콜입니다. 높은 효율성과 낮은 소비량으로 인해 MQTT는 IoT 통신의 표준이 되었습니다.
MQTT는 특히 매우 제한된 조건에서 예측 유지 관리를 위해 산업 자산, 시스템 및 애플리케이션 데이터를 빠르고 안정적으로 전송하도록 설계된 표준 바이너리 게시-구독 메시징 프로토콜입니다. 제한 사항에는 신뢰할 수 없는 네트워크 연결, 제한된 대역폭 또는 제한된 배터리 전원이 포함될 수 있습니다. MQTT는 인터넷에서 네트워크 장치를 연결하기 위해 선호되는 통신 프로토콜인 TCP/IP를 기반으로 구축되었습니다. 따라서 MQTT는 IIoT에 매우 적합하며 이벤트 중심 아키텍처를 지원합니다.
MQTT 기술은 기업 내 수천 개의 원격 자산, 시스템 및 애플리케이션에 데이터를 푸시하고 데이터를 얻도록 설계되었습니다. MQTT Sparkplug는 MQTT 위에 위치하여 산업 데이터에 더 많은 컨텍스트를 추가하는 프레임워크입니다. MQTT 클라이언트가 다양한 산업 데이터를 통합하고 데이터 모델을 정의하여 컨텍스트를 제공할 수 있는 프레임워크를 제공하는 오픈 소스 소프트웨어 사양입니다. 이는 제조 장비 제조업체와 소프트웨어 제공업체에 예측 유지 관리 데이터가 풍부해진 상황별 플랜트 데이터를 공유할 수 있는 일관된 방법을 제공합니다.
MQTT를 사용하면 차량을 실시간으로 추적하여 최신 위치 및 상태 업데이트를 제공할 수 있습니다. 이 기능은 배송 일정을 모니터링 및 개선하고 경로를 최적화하며 전체 차량 효율성을 높이는 데 도움이 됩니다.
MQTT의 가장 큰 장점 중 하나는 다양한 시스템(예: 공장 기계, 품질 시스템, MES, ERP)의 모든 OEE 데이터에 대한 단일 진실로서 UNS(통합 네임스페이스)를 가질 수 있다는 것입니다. 등) 그런 다음 소스를 사용하고 작업할 수 있는 응용 프로그램에서 소스를 사용할 수 있게 됩니다. (다양한 데이터 유형 및 데이터 속도 지원)
2. 설치
pip install paho-mqtt
# pip3 install -i https://pypi.doubanio.com/simple paho-mqtt
# or
git clone https://github.com/eclipse/paho.mqtt.python
cd paho.mqtt.python
python setup.py install
3. 기본 코드
3.1 Apollo 서비스 기준
- 서버측 구성:
https://archive.apache.org/dist/activemq/activemq-apollo/1.7.1/ - 다음과 같이 대상을 추출하고 엽니다:
pollo 미들웨어는 실제로 설치가 무료입니다. apache-apollo-1.7.1-windows-distro.zip만 다운로드하면 됩니다. 그런 다음 특정 폴더에 압축을 푼다. 여기에서는 D:\soft\apache-apollo-1.7.1에 압축을 풀었습니다.
(1) 먼저 apollo 디렉토리로 이동하여 cd D:\soft\apache-apollo-1.7.1
(2) D:\soft\apache -apollo -1.7.1\bin
(3) apollo create myapollo 명령 실행
'D:\phpStudy\apache-apollo-1.7.1\bin\mybroker\etc\apollo.xml' 구성 파일을 로드하는 중 다음 오류가 발생했습니다.
시작 실패: java . lang.NoClassDefFoundError: javax/xml/bind/ValidationEventHandler
답변: jdk1.8 버전으로 변경하면 됩니다.
apollo-broker.cmd run
백그라운드 관리에 들어가서 웹 페이지를 열고 ip +: 61680을 입력하여 백그라운드 관리에 들어가십시오. 기본 사용자 이름은 admin이고 비밀번호는 비밀번호입니다(예: 127.0.0.1:61680).
http://127.0.0.1:61680
- 주제 구독
import time
import paho.mqtt.client as mqtt
# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("连接成功")
print("Connected with result code " + str(rc))
def on_message(client, userdata, msg):
print(msg.topic + " " + str(msg.payload))
client = mqtt.Client(protocol=3)
client.username_pw_set("admin", "password")
client.on_connect = on_connect
client.on_message = on_message
client.connect(host="127.0.0.1", port = 61613, keepalive=60) # 订阅频道
time.sleep(1)
# client.subscribe("public")
client.subscribe([("public", 0), ("test", 2)])
client.loop_forever()
- 주제 게시
import paho.mqtt.client as mqtt
import time
import sys
def on_connect(client, userdata, flags, rc):
print("Connected with result code " + str(rc))
def on_subscribe(client,userdata,mid,granted_qos):
print("消息发送成功")
client = mqtt.Client(protocol=3)
client.username_pw_set("admin", "password")
client.on_connect = on_connect
client.on_subscribe = on_subscribe
client.connect(host="127.0.0.1", port = 61613, keepalive=60) # 订阅频道
time.sleep(1)
i = 0
while True:
try:
# 发布MQTT信息
sensor_data = "test" + str(i)
client.publish(topic="public", payload=sensor_data, qos=0)
time.sleep(5)
i += 1
except KeyboardInterrupt:
print("EXIT")
client.disconnect()
sys.exit(0)
위 스크립트를 실행한 후:
3.2 공공 서비스 기반
여기서는 EMQX에서 제공하는 무료 MQTT 공용 서버를 사용하기로 선택했지만 다른 MQTT 브로커를 선택할 수도 있습니다.
Broker: broker.emqx.io
TCP Port: 1883
Websocket Port: 8083
- 메시지 게시 코드, pub.py
# python 3.6
import random
import time
from paho.mqtt import client as mqtt_client
broker = 'broker.emqx.io'
port = 1883
topic = "/python/mqtt"
# generate client ID with pub prefix randomly
client_id = f'python-mqtt-{
random.randint(0, 1000)}'
def connect_mqtt():
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected to MQTT Broker!")
else:
print("Failed to connect, return code %d\n", rc)
client = mqtt_client.Client(client_id)
client.on_connect = on_connect
client.connect(broker, port)
return client
def publish(client):
msg_count = 0
while True:
time.sleep(1)
msg = f"messages: {
msg_count}"
result = client.publish(topic, msg)
# result: [0, 1]
status = result[0]
if status == 0:
print(f"Send `{
msg}` to topic `{
topic}`")
else:
print(f"Failed to send message to topic {
topic}")
msg_count += 1
def run():
client = connect_mqtt()
client.loop_start()
publish(client)
if __name__ == '__main__':
run()
- 메시지 구독 코드, sub.py
# python3.6
import random
from paho.mqtt import client as mqtt_client
broker = 'broker.emqx.io'
port = 1883
topic = "/python/mqtt"
# generate client ID with pub prefix randomly
client_id = f'python-mqtt-{
random.randint(0, 100)}'
def connect_mqtt() -> mqtt_client:
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected to MQTT Broker!")
else:
print("Failed to connect, return code %d\n", rc)
client = mqtt_client.Client(client_id)
client.on_connect = on_connect
client.connect(broker, port)
return client
def subscribe(client: mqtt_client):
def on_message(client, userdata, msg):
print(f"Received `{
msg.payload.decode()}` from `{
msg.topic}` topic")
client.subscribe(topic)
client.on_message = on_message
def run():
client = connect_mqtt()
subscribe(client)
client.loop_forever()
if __name__ == '__main__':
run()
4. 추가 코드(플라스크)
4.1 플라스크_mqtt 라이브러리 설치
pip install flask_mqtt
4.2 플라스크_mqtt 스크립트 작성
코드 작성:
from flask import Flask, request, jsonify
from flask_mqtt import Mqtt
app = Flask(__name__)
# 代理地址
app.config['MQTT_BROKER_URL'] = 'broker.emqx.io'
# 端口
app.config['MQTT_BROKER_PORT'] = 1883
# 当需要验证用户名和密码时,请设置该项
app.config['MQTT_USERNAME'] = 'user'
# 当需要验证用户名和密码时,请设置该项
app.config['MQTT_PASSWORD'] = '123456'
# 设置心跳时间,单位为秒
app.config['MQTT_KEEPALIVE'] = 60
# 如果服务器支持 TLS,则设置为 True
app.config['MQTT_TLS_ENABLED'] = False
# 主题
topic = '/flask/mqtt'
# 实例化
mqtt_client = Mqtt(app)
@app.route('/')
def index():
# 初始路由
return "Welcome mqtt_flask"
@mqtt_client.on_connect()
def handle_connect(client, userdata, flags, rc):
"""连接回调函数"""
if rc == 0:
print('Connected successfully')
# 订阅主题
mqtt_client.subscribe(topic)
else:
# 连接失败
print('Bad connection. Code:', rc)
@mqtt_client.on_message()
def handle_mqtt_message(client, userdata, message):
""" 消息回调函数 """
# 定义接受到的消息
data = dict(
# 主题
topic=message.topic,
# 内容
payload=message.payload.decode()
)
# 打印输出接收到的消息
print('Received message on topic: {topic} with payload: {payload}'.format(**data))
@app.route('/publish', methods=['POST'])
def publish_message():
""" 消息发布接口(实际应用中,该接口可能需要处理一些复杂业务逻辑) """
# 格式化数据
request_data = request.get_json()
# 发布消息
publish_result = mqtt_client.publish(request_data['topic'], request_data['msg'])
return jsonify({
'code': publish_result[0]})
if __name__ == '__main__':
# app.run()
app.run(host='127.0.0.1', port=5000)
Flask 애플리케이션이 시작되면 MQTT 클라이언트는 서버에 연결하고 /flask/mqtt 주제를 구독합니다.
4.3 MQTTX 설치(MQTT 클라이언트)
https://mqttx.app/zh/downloads
기본 인터페이스는 다음과 같이 표시됩니다.
4.4 테스트 메시지 수신
- 연결 만들기
Host:为代码中定义好的 broker.emqx.io
Port:为代码中定义好的 1883
用户名、密码根据需要添加
- 구독 추가
주제: /flask/mqtt
- MQTTX에 메시지 게시
Flask 콘솔에서 수신된 메시지:
4.5 테스트 메시지 공개
- 메시지 수신을 이용한 구독
주제는 /flask/mqtt
Postman을 사용하여 /publish 인터페이스를 호출합니다. Flask에서 Hello 메시지를 /flask/mqtt 주제로 보냅니다.
Flask에서 보낸 메시지를 MQTTX로 볼 수 있습니다.
Flask에서 보낸 메시지를 Python으로 볼 수 있습니다.
결론
如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;
╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地
//(ㄒoㄒ) //,就在评论处留言,作者继续改进;
o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;
(✿◡‿◡)
感谢各位大佬童鞋们的支持!
( ´ ▽´ )ノ ( ´ ▽´)! ! !