Làm cách nào để kết nối với mqtt trong python?

Eclipse Paho Python [mở cửa sổ mới] là một thư viện máy khách ngôn ngữ Python trong dự án Eclipse Paho, có thể kết nối với Nhà môi giới MQTT để xuất bản tin nhắn, đăng ký chủ đề và nhận tin nhắn đã xuất bản

Cài đặt bằng công cụ quản lý gói PyPi

Ví dụ sử dụng Paho Python

Ví dụ này chứa mã hoàn chỉnh của Paho Python trong Python kết nối với EMQX Broker, gửi và nhận tin nhắn

Bạn có thể sử dụng lớp máy khách như một thể hiện, trong một lớp hoặc bằng cách phân lớp. Quy trình sử dụng chung như sau

Các cuộc gọi lại sẽ được gọi để cho phép ứng dụng xử lý các sự kiện khi cần thiết. Những cuộc gọi lại được mô tả dưới đây

gọi lại

on_connect[]
on_connect[client, userdata, flags, rc]

Được gọi khi nhà môi giới phản hồi yêu cầu kết nối của chúng tôi

khách hàng

phiên bản máy khách cho cuộc gọi lại này

dữ liệu người dùng

dữ liệu người dùng riêng tư như được đặt trong Client[] hoặc user_data_set[]

cờ

cờ phản hồi được gửi bởi nhà môi giới

rc

kết quả kết nối

flags là một lệnh chứa các cờ phản hồi từ nhà môi giới. cờ [‘hiện tại phiên’] - cờ này hữu ích cho các khách hàng đang

chỉ sử dụng phiên sạch được đặt thành 0. Nếu một khách hàng có phiên sạch = 0, kết nối lại với một nhà môi giới mà nó đã kết nối trước đó, cờ này cho biết liệu nhà môi giới có còn thông tin phiên cho khách hàng hay không. Nếu 1, phiên vẫn tồn tại

Giá trị của rc cho biết thành công hay không

0. Kết nối thành công 1. Kết nối bị từ chối - giao thức không chính xác phiên bản 2. Kết nối bị từ chối - số nhận dạng ứng dụng khách không hợp lệ 3. Kết nối bị từ chối - máy chủ không khả dụng 4. Kết nối bị từ chối - tên người dùng hoặc mật khẩu không hợp lệ 5. Kết nối bị từ chối - không được phép 6-255. Hiện chưa sử dụng

Ví dụ về Kết nối
def on_connect[client, userdata, flags, rc]:
    print["Connection returned result: "+connack_string[rc]]

mqttc.on_connect = on_connect
...
on_disconnect[]
on_disconnect[client, userdata, rc]

Được gọi khi client ngắt kết nối với broker

khách hàng

phiên bản máy khách cho cuộc gọi lại này

dữ liệu người dùng

dữ liệu người dùng riêng tư như được đặt trong Client[] hoặc user_data_set[]

rc

kết quả ngắt kết nối

Tham số rc cho biết trạng thái ngắt kết nối. Nếu MQTT_ERR_SUCCESS [0], cuộc gọi lại được gọi để phản hồi cuộc gọi ngắt kết nối []. Nếu bất kỳ giá trị nào khác thì việc ngắt kết nối là không mong muốn, chẳng hạn như có thể do lỗi mạng gây ra

Ví dụ về ngắt kết nối
def on_disconnect[client, userdata, rc]:
    if rc != 0:
        print["Unexpected disconnection."]

mqttc.on_disconnect = on_disconnect
...
on_message[]
on_message[client, userdata, message]

Được gọi khi một tin nhắn đã được nhận về một chủ đề mà khách hàng đăng ký và tin nhắn không khớp với cuộc gọi lại bộ lọc chủ đề hiện có. Sử dụng message_callback_add[] để xác định cuộc gọi lại sẽ được gọi cho các bộ lọc chủ đề cụ thể. on_message sẽ đóng vai trò dự phòng khi không khớp

khách hàng

phiên bản máy khách cho cuộc gọi lại này

dữ liệu người dùng

dữ liệu người dùng riêng tư như được đặt trong Client[] hoặc user_data_set[]

thông điệp

một phiên bản của MQTTMessage. Đây là một lớp học với chủ đề thành viên, trọng tải, qos, giữ lại

Ví dụ về tin nhắn
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
...
message_callback_add[]

Chức năng này cho phép bạn xác định các cuộc gọi lại xử lý các tin nhắn đến cho các bộ lọc đăng ký cụ thể, bao gồm cả các ký tự đại diện. Ví dụ, điều này cho phép bạn đăng ký cảm biến/# và có một lệnh gọi lại để xử lý cảm biến/nhiệt độ và một cuộc gọi khác để xử lý cảm biến/độ ẩm

message_callback_add[sub, callback]
sub

bộ lọc đăng ký để khớp với cuộc gọi lại này. Chỉ một cuộc gọi lại có thể được xác định cho mỗi chuỗi con bằng chữ

gọi lại

cuộc gọi lại được sử dụng. Có cùng dạng với cuộc gọi lại on_message

Nếu sử dụng message_callback_add[] và on_message, chỉ những tin nhắn không khớp với bộ lọc đăng ký cụ thể mới được chuyển đến cuộc gọi lại on_message

Nếu nhiều sub khớp với một chủ đề thì mỗi callback sẽ được gọi [e. g. cảm biến phụ/# và phụ +/độ ẩm đều khớp với thông báo có chủ đề cảm biến/độ ẩm, vì vậy cả hai lệnh gọi lại sẽ xử lý thông báo này]

message_callback_remove[]

Xóa cuộc gọi lại chủ đề/đăng ký cụ thể đã đăng ký trước đó bằng message_callback_add[]

message_callback_remove[sub]
sub

bộ lọc đăng ký để loại bỏ

on_publish[]________số 8

Được gọi khi một tin nhắn được gửi bằng lệnh gọi publish[] đã hoàn thành việc truyền tới nhà môi giới. Đối với các tin nhắn có QoS mức 1 và 2, điều này có nghĩa là quá trình bắt tay thích hợp đã hoàn tất. Đối với QoS 0, điều này đơn giản có nghĩa là tin nhắn đã rời khỏi máy khách. Biến mid khớp với biến mid được trả về từ lệnh gọi publish[] tương ứng, để cho phép theo dõi các tin nhắn gửi đi

Cuộc gọi lại này rất quan trọng vì ngay cả khi cuộc gọi xuất bản [] trả về thành công, điều đó không phải lúc nào cũng có nghĩa là tin nhắn đã được gửi

on_subscribe[]
on_subscribe[client, userdata, mid, granted_qos]

Được gọi khi nhà môi giới trả lời yêu cầu đăng ký. Biến mid khớp với biến mid được trả về từ lệnh gọi subscribe[] tương ứng. Biến Grant_qos là danh sách các số nguyên cung cấp mức QoS mà nhà môi giới đã cấp cho từng yêu cầu đăng ký khác nhau

on_unsubscribe[]
def on_connect[client, userdata, flags, rc]:
    print["Connection returned result: "+connack_string[rc]]

mqttc.on_connect = on_connect
...
0

Được gọi khi nhà môi giới trả lời yêu cầu hủy đăng ký. Biến mid khớp với biến mid được trả về từ lệnh gọi unsubscribe[] tương ứng

on_log[]
def on_connect[client, userdata, flags, rc]:
    print["Connection returned result: "+connack_string[rc]]

mqttc.on_connect = on_connect
...
1

Được gọi khi client có thông tin log. Xác định để cho phép gỡ lỗi. Biến cấp độ cho biết mức độ nghiêm trọng của thông báo và sẽ là một trong MQTT_LOG_INFO, MQTT_LOG_NOTICE, MQTT_LOG_WARNING, MQTT_LOG_ERR và MQTT_LOG_DEBUG. Tin nhắn chính nó là trong buf

Điều này có thể được sử dụng cùng lúc với ghi nhật ký Python tiêu chuẩn, có thể được bật thông qua phương thức enable_logger

on_socket_open[]
def on_connect[client, userdata, flags, rc]:
    print["Connection returned result: "+connack_string[rc]]

mqttc.on_connect = on_connect
...
2

Được gọi khi socket đã được mở. Sử dụng điều này để đăng ký ổ cắm với vòng lặp sự kiện bên ngoài để đọc

on_socket_close[]
def on_connect[client, userdata, flags, rc]:
    print["Connection returned result: "+connack_string[rc]]

mqttc.on_connect = on_connect
...
3

Được gọi khi socket sắp đóng. Sử dụng công cụ này để hủy đăng ký ổ cắm khỏi vòng lặp sự kiện bên ngoài để đọc

on_socket_register_write[]
def on_connect[client, userdata, flags, rc]:
    print["Connection returned result: "+connack_string[rc]]

mqttc.on_connect = on_connect
...
4

Được gọi khi thao tác ghi vào ổ cắm thành công sau khi nó đã thất bại trước đó. Sử dụng điều này để hủy đăng ký ổ cắm khỏi vòng lặp sự kiện bên ngoài để ghi

URL nhà môi giới MQTT là gì?

mqttManager. gây xúc động mạnh. mqttGiao thông vận tải. quản lýConfig. nhà môi giớiURL. tcp. //máy chủ cục bộ. 1883 .

Lệnh nào có thể được sử dụng để cài đặt thư viện MQTT Python?

Tuy nhiên, Python sử dụng một lệnh PIP để cài đặt thư viện. Từ đó, tất cả các chương trình Python có thể nhập thư viện MQTT với đông.

MQTT có sử dụng địa chỉ IP không?

MQTT sử dụng TCP/IP để kết nối với nhà môi giới.

Chủ Đề