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[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àngphiên bản máy khách cho cuộc gọi lại này
dữ liệu người dùngdữ 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
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 đangchỉ 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
def on_connect[client, userdata, flags, rc]:
print["Connection returned result: "+connack_string[rc]]
mqttc.on_connect = on_connect
...
on_disconnect[client, userdata, rc]
Được gọi khi client ngắt kết nối với broker
khách hàngphiên bản máy khách cho cuộc gọi lại này
dữ liệu người dùngdữ liệu người dùng riêng tư như được đặt trong Client[] hoặc user_data_set[]
rckế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
def on_disconnect[client, userdata, rc]:
if rc != 0:
print["Unexpected disconnection."]
mqttc.on_disconnect = on_disconnect
...
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àngphiên bản máy khách cho cuộc gọi lại này
dữ liệu người dùngdữ liệu người dùng riêng tư như được đặt trong Client[] hoặc user_data_set[]
thông điệpmộ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
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
...
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]
subbộ 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ạicuộ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]
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]
subbộ lọc đăng ký để loại bỏ
Đượ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[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
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
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
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
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
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