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
--
-------------------------------------- !! No courtesy copies, please !! -----
Marc Haber | " Questions are the | Mailadresse im Header
Mannheim, Germany | Beginning of Wisdom " |
Nordisch by Nature | Lt. Worf, TNG "Rightful Heir" | Fon: *49 621 72739834