[Python-de] Re: paho-mqtt und vorgegebene Callback-Funktione n in einer Klasse.
Stefan Clauß <[email protected]> Wed, 21 Jun 2023 14:01:52 +0200
| Newsgroups | gmane.comp.python.general.german |
|---|---|
| Message-ID | <op.16v01ec0q0n66g@desktop-ekoajh9> |
Hallo, versuche es mit self.on_connect und self.on_message jeweils auf der rechten Seite der Zuweisung. VG Stefan Am .06.2023, 19:12 Uhr, schrieb Marc Haber <[email protected]>: > Hallo, > > ich habe hier das abgespeckte, nicht lauffähige Teilprogramm: > > |#!/usr/bin/python > | > |import paho.mqtt.client as mqtt > | > |class ApplianceMonitor: > | """the main ApplianceMonitor object""" > | > | def __init__(self): > | # do something intelligent > | > | def on_connect(self, client, userdata, flags, rcode): > | client.subscribe('tele/wama/SENSOR') > | > | def on_message(self, client, userdata, msg): > | # do something intelligent with msg > | > | def main(self): > | client = mqtt.Client() > | client.on_connect = on_connect > | client.on_message = on_message > | > | client.connect('mqtt.local', 1883, 60) > | > | client.loop_start() > | > | while True: > | time.sleep(30) > | # do something intelligent with the accumulated data > | > | > |if __name__ == "__main__": > | amon = ApplianceMonitor(args) > | amon.main() > | > |# end of file > > Ich habe die ganze Applikation in eine Klasse ApplianceMonitor > ausgelagert als Ergebnis der Diskussion von vor einem halben Jahr, > weil ich so ohne globale Statusvariablen auskomme und die in der > Klasse verstecken kann (hier nicht sichtbar weil sie der Minimierung > des Codes zum Opfer gefallen sind). > > Leider haben die beiden Callbackfunktionen von paho eine vorgegebene > Signatur und können deswegen keine Methoden des ApplianceMonitor sein. > Wenn ich die Initialisierung des MQTT-Moduls ins Hauptprogramm > verlagere, bin ich auf ein einziges Applikationsobjekt limitiert (was > in der Tat blöd ist weil ich vielleicht später das Monitoring mehrerer > MQTT-Topics mit mehreren Objekten des Applikationstyps machen möchte. > Oder geht das sowieso nicht weil ich nur eine client.loop pro Programm > haben kann? > > Ist das paho-Modul blöd oder ich? Oder geht das halt nicht anders? > > Grüße > Marc -- Erstellt mit Operas E-Mail-Modul: http://www.opera.com/mail/ _______________________________________________ python-de Mailingliste -- [email protected] Zur Abmeldung von dieser Mailingliste senden Sie eine Nachricht an [email protected] https://mail.python.org/mailman3/lists/python-de.python.org/ Mitgliedsadresse: [email protected]