[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]