[PYTHON] Wenn ein Schlüsselwort in einem von MQTT abonnierten Thema angezeigt wird, veröffentlichen Sie es in einem anderen Thema

【Überblick】

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.

Kobito.jocseL.png

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.

【Skript】

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.

Recommended Posts

Wenn ein Schlüsselwort in einem von MQTT abonnierten Thema angezeigt wird, veröffentlichen Sie es in einem anderen Thema
Was tun, wenn eine Warnung zur Python-Integration in Neovims CheckHealth angezeigt wird?
[openpyxl] Was tun, wenn IllegalCharacterError in pandas.DataFrame.to_excel angezeigt wird?
Beachten Sie beim Initialisieren einer Liste in Python
Wenn Sie in der for-Anweisung plt.save möchten
Veröffentlichen / Hochladen einer in Python erstellten Bibliothek in PyPI
Was tun, wenn in Python "SSL: CERTIFICATE_VERIFY_FAILED _ssl.c: 1056" angezeigt wird?
Was tun, wenn in Django "Ungültiger HTTP_HOST-Header" angezeigt wird?
[Unterprozess] Wenn Sie ein anderes Python-Programm in Python-Code ausführen möchten
Zeitzonenspezifikation beim Konvertieren einer Zeichenfolge in einen Datums- / Uhrzeittyp mit Python
[Python] Wenn Sie alle Variablen in einer anderen Datei verwenden möchten
Beim Erstellen einer Matrix in einer Liste
Beim Schreiben eines Programms in Python
[Memorandum] Was tun, wenn nach dem Ausführen der Pip-Liste eine Warnung angezeigt wird?
So schreiben Sie eine Zeichenfolge, wenn Python mehrere Zeilen enthält
Was tun, wenn eine Warnmeldung in der Pip-Liste angezeigt wird?