我在我的 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
有人知道帮忙吗?干杯