MQTT에서 지속성을 구성할 수 없는 것 같습니다.

MQTT에서 지속성을 구성할 수 없는 것 같습니다.

Raspbian을 실행하는 Raspberry Pi에서 MQTT를 시험해 보고 있습니다. 기본 설정은 작동하지만 지속성을 구성할 수 없는 것 같습니다.

다음과 같은https://tutorials-raspberrypi.com/raspberry-pi-mqtt-broker-client-wireless-communication/

설치했습니다mosquitto mosquitto-clients

paho-mqtt연결된 센서의 온도 및 습도 판독값을 게시하기 위해 백그라운드 프로세스에서 다음 스크립트를 설치 하고 실행했습니다.

#!/usr/bin/python3
import os
import time
import sys
import Adafruit_DHT as dht
import paho.mqtt.client as mqtt
import json
import datetime
#
# Sensor should be set to Adafruit_DHT.DHT11, Adafruit_DHT.DHT22, or Adafruit_DHT.AM2302.
sensor = dht.DHT11
pin = 4

BROKER = 'localhost'

# Data capture and upload interval in seconds.
INTERVAL=15

sensor_data = {'date': 0, 'temperature': 0, 'humidity': 0}

next_reading = time.time()

client = mqtt.Client()

# Connect to BROKER using default MQTT port and 60 seconds keepalive interval
client.connect(BROKER, 1883, 60)

client.loop_start()

try:
    while True:
        humidity,temperature = dht.read_retry(sensor, pin)
        humidity = round(humidity, 2)
        temperature = round(temperature, 2)
        print(u"Temperature: {:g}\u00b0C, Humidity: {:g}%".format(temperature, humidity))
        sensor_data['temperature'] = temperature
        sensor_data['humidity'] = humidity
        sensor_data['date'] = datetime.datetime.now().replace(microsecond=0).isoformat()

#         client.publish('test_channel', json.dumps(sensor_data), 1)
        client.publish('test_channel', json.dumps(sensor_data), 2)

        next_reading += INTERVAL
        sleep_time = next_reading-time.time()
        if sleep_time > 0:
            time.sleep(sleep_time)
except KeyboardInterrupt:
    pass

client.loop_stop()
client.disconnect()

이것은 작동하고 다른 Pi에서 메시지를 볼 수 있지만 mosquitto_sub -h IPaddress -v -t test_channel프로세스가 실행되는 동안에만 작동합니다. 구독자가 연결될 때까지 브로커가 메시지를 보관하기를 원합니다.

파일에 "persistence true"를 추가했는데 /etc/mosquitto/conf.d/Milliways.conf로그 파일에 다음 메시지가 표시되었습니다.

1547597521: Saving in-memory database to /var/lib/mosquitto/mosquitto.db.

데이터베이스에 관련 데이터가 포함되어 있지 않은 것 같습니다.

나는에 관한 문서를 읽었습니다.https://pypi.org/project/paho-mqtt/#publishing그리고 man모기.

답변1

브로커에 메시지를 보낼 때 지속성이 설정되며, 메시지는 기본적으로 지속되지 않습니다.

네 번째 매개변수를 추가합니다 client.publish(). 즉, 메시지의 품질, 즉 내구성을 true설정합니다 .retain

관련 정보