現在、MQTT、Python、および OpenHab を使用して簡単なアプリケーションを作成しようとしています。したがって、MQTT サーバーに接続し、トピックにサブスクライブして、そこに配置されたデータ/メッセージを読み取りたいだけです。すべてが正常に機能しますが、「制限」があります。MQTT への接続、サブスクライブ、および... BOOM に接続できる Python クライアント 何もない!サブスクライブしたトピックからメッセージを読み取ることはできますが、クライアント接続後にトピックを更新する必要があります。クライアント接続後にトピック データを再更新しないと、実際のデータがあっても何も表示されません。つまり、簡単に言えば
- Python クライアント (paho MQTT 1.3v) は MQTT (mosquitto) サーバーに接続します
- 指定されたトピックを購読します (ここで現在のトピック データを表示したい)
- 誰かがトピックを再更新するまで何も起こりません。
そのトピックを再更新せずにトピック データを読み取るにはどうすればよいですか?
これが私のコードクラス MQTTBroker(object) です:
def __init__(self, Trigger, ipAddress, userName, password, fileNameTopic, volumeTopic, enabledTopic):
self.ipaddress = ipAddress
self.username = userName
self.password = password
self.topic = topic
self.fileNameTopic = fileNameTopic
self.volumeTopic = volumeTopic
self.enabledTopic = enabledTopic
self.state = 0
self.client = mqtt.Client()
self.client.on_connect = self.on_connect
self.client.on_message = self.on_message
self.logger = logging.getLogger(__name__)
self.client.enable_logger(logger)
self.client.connect(self.ipaddress, 1883, 60)
self.client.loop_start()
def __exit__(self, exc_type, exc_val, exc_tb):
self.client.loop_stop()
# The callback for when the client receives a CONNACK response from the server.
def on_connect(self, client, userdata, flags, rc):
print("Connected with result code " + str(rc))
# Subscribing in on_connect() means that if we lose the connection and
# reconnect then subscriptions will be renewed.
self.client.subscribe(self.fileNameTopic, 0)
self.client.subscribe(self.volumeTopic, 0)
self.client.subscribe(self.enabledTopic, 0)
# The callback for when a PUBLISH message is received from the server.
def on_message(self, client, userdata, msg):
self.state = msg.payload
if msg.topic == self.fileNameTopic:
Trigger.change_file_name(msg.payload)
elif msg.topic == self.volumeTopic:
Trigger.change_volume(msg.payload)
elif msg.topic == self.enabledTopic:
Trigger.change_state(msg.payload)