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

ブローカーにメッセージを送信すると永続性が設定され、メッセージはデフォルトでは持続しません。

4番目のパラメータを追加しますclient.publish()。つまり、メッセージの品質、つまり耐久性をtrue設定します。retain

おすすめ記事