MQTT on_publish 没有给出任何反馈并且连接每 90 秒丢失一次,尽管 keepalive=930

问题描述 投票:0回答:0

我在我的 python 脚本中使用 paho-mqtt,我的温度传感器的值每 15 分钟发布一次,所以这工作正常。但是仔细考虑我的日志文件,尽管我的 keepalive 值为 930(15 分 30 秒)(问题 1),但 mqtt 连接每 90 秒就会丢失一次。问题 2 是我没有得到有关已发布消息的任何日志记录。这是我的脚本:

import paho.mqtt.client as mqtt
import Adafruit_DHT
import time
import ssl
import logging

logging.basicConfig(level=logging.DEBUG, filename='/home/pi/Documents/mqtt.log', encoding='utf-8')

# Set up DHT22 sensor
dht_sensor = Adafruit_DHT.DHT22
dht_pin = 4  # GPIO pin number the sensor is connected to

username = 'master:mqttuser_karlsruhe'
secret = 'ifYsftrjtzktzkfDSc'
host = '192.168.0.52'
port = 8883
clientID = 'raspi_ka'
assetID = '3ndhrtjtz55rrGa'


def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    logging.info("Connected with result code "+str(rc))


def on_publish(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))
    logging.info(msg.topic+" "+str(msg.payload))


def on_disconnect(client, userdata, rc):
    if rc != 0:
        print("Unexpected disconnection.")
        logging.info("Unexpected disconnection.")


def on_log(client, userdata, level, buf):
    print("log: ", buf)
    logging.info("log: ", buf)


mqtt_client = mqtt.Client(clientID)
mqtt_client.username_pw_set(username, password=secret)
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
mqtt_client.tls_set_context(context)
mqtt_client.on_connect = on_connect
mqtt_client.on_disconnect = on_disconnect
mqtt_client.on_publish = on_publish
mqtt_client.on_log = on_log
mqtt_client.connect(host, port=port, keepalive=930)
mqtt_client.loop_start()

# Continuously read and send temperature values
while True:
    humidity, temperature = Adafruit_DHT.read_retry(dht_sensor, dht_pin)
    if humidity is not None and temperature is not None:
        mqtt_client.publish(f"master/{clientID}/writeattributevalue/temperature/{assetID}", temperature)
        mqtt_client.publish(f"master/{clientID}/writeattributevalue/humidity/{assetID}", humidity)
    else:
        print("Failed to read temperature sensor data")
    print(temperature)
    print("")
    time.sleep(900)

# Disconnect MQTT client
mqtt_client.disconnect()
mqtt_client.loop_stop()

问题 3 是以下日志记录错误:

-- Journal begins at Thu 2022-09-22 02:34:07 CEST, ends at Mon 2023-02-27 15:05:04 CET. --
Feb 27 15:03:15 raspberrypi python3[10320]: --- Logging error ---
Feb 27 15:03:15 raspberrypi python3[10320]: Traceback (most recent call last):
Feb 27 15:03:15 raspberrypi python3[10320]:   File "/usr/lib/python3.9/logging/__init__.py", line 1079, in emit
Feb 27 15:03:15 raspberrypi python3[10320]:     msg = self.format(record)
-- Journal begins at Thu 2022-09-22 02:34:07 CEST, ends at Mon 2023-02-27 15:05:04 CET. --
-- Journal begins at Thu 2022-09-22 02:34:07 CEST, ends at Mon 2023-02-27 15:05:04 CET. --
Feb 27 15:03:15 raspberrypi python3[10320]: --- Logging error ---
Feb 27 15:03:15 raspberrypi python3[10320]: Traceback (most recent call last):
Feb 27 15:03:15 raspberrypi python3[10320]:   File "/usr/lib/python3.9/logging/__init__.py", line 1079, in emit
Feb 27 15:03:15 raspberrypi python3[10320]:     msg = self.format(record)
Feb 27 15:03:15 raspberrypi python3[10320]:   File "/usr/lib/python3.9/logging/__init__.py", line 923, in format
Feb 27 15:03:15 raspberrypi python3[10320]:     return fmt.format(record)
Feb 27 15:03:15 raspberrypi python3[10320]:   File "/usr/lib/python3.9/logging/__init__.py", line 659, in format
Feb 27 15:03:15 raspberrypi python3[10320]:     record.message = record.getMessage()
Feb 27 15:03:15 raspberrypi python3[10320]:   File "/usr/lib/python3.9/logging/__init__.py", line 363, in getMessage
Feb 27 15:03:15 raspberrypi python3[10320]:     msg = msg % self.args

有人知道帮忙吗?干杯

python logging raspberry-pi mqtt publish
© www.soinside.com 2019 - 2024. All rights reserved.