Ich habe diesen Prozess viele Male geschrieben und bin schließlich auf die Idee gekommen, ihn wiederzuverwenden. Das Bild sieht wie in der folgenden Abbildung aus: Links für Thema A abonnieren und rechts für Thema B veröffentlichen.
Im Skript wird das Thema links als "SUB_TOPIC" und das Thema rechts als "PUB_TOPIC" ausgedrückt. Übrigens kann der Host auf der SUB-Seite und der PUB-Seite unterschiedlich sein, daher habe ich versucht, die Verbindungsinformationen auf der SUB-Seite bzw. der PUB-Seite zu haben.
So was.
sample.py
#!/usr/bin/python
# encoding:utf-8
import paho.mqtt.client as mqtt
import re
import sys
#Themenbezogene Einstellungen, die dieses Skript abonniert
SUB_TOPIC = "subtopic"
SUB_USERNAME = 'username'
SUB_PASSWORD = 'password'
SUB_HOST = 'localhost'
SUB_PORT = 1883
#Themenbezogene Einstellungen, die dieses Skript veröffentlicht
PUB_TOPIC = "pubtopic"
PUB_USERNAME = 'username'
PUB_PASSWORD = 'password'
PUB_HOST = 'localhost'
PUB_PORT = 1883
#Wenn dieses Schlüsselwort im Thema "Unterseite" angezeigt wird, wird es in das Thema "Kneipenseite" ausgegeben
KEYWORD = "TEST"
#Flags für die Debug-Ausgabesteuerung
ISDEBUG = True
def sub_on_connect(client, userdata, flags, rc):
client.subscribe(SUB_TOPIC)
def sub_on_message(client, userdata, msg):
#Die empfangene Nachricht ist msg.In Nutzlast gespeichert
debug_echo(msg.payload)
match = re.match(KEYWORD, msg.payload)
if match is None:
debug_echo("Not Match")
else:
debug_echo("Match")
publish("OK")
def publish(msg):
pub_client.publish(PUB_TOPIC, msg)
pass
def debug_echo(msg):
if ISDEBUG :
print msg
sys.stderr.write(msg+"\n")
if __name__ == '__main__':
#Vorbereiten des sendenden Clients
pub_client = mqtt.Client(protocol=mqtt.MQTTv311)
pub_client.username_pw_set(PUB_USERNAME, password=PUB_PASSWORD)
pub_client.connect(PUB_HOST, port=PUB_PORT, keepalive=60)
#Vorbereitung des Empfängers
sub_client = mqtt.Client(protocol=mqtt.MQTTv311)
sub_client.on_connect = sub_on_connect
sub_client.on_message = sub_on_message
sub_client.username_pw_set(SUB_USERNAME, password=SUB_PASSWORD)
sub_client.connect(SUB_HOST, port=SUB_PORT, keepalive=60)
#Empfangsschleife starten
sub_client.loop_forever()
Nachtrag: Geändert, um den Debug-Inhalt in die Standardfehlerausgabe auszugeben.