marco.markl Geschrieben August 11, 2017 at 03:37 Geschrieben August 11, 2017 at 03:37 Hallo! Bei meinem aktuellen Projekt ermittle ich die jeweiligen UIDs erst zur Laufzeit mittels ipcon.register_callback(IPConnection.CALLBACK_ENUMERATE, cb_enumerate) ipcon.enumerate() Anschließend setze ich z.B. für einen Temperature Bricklet einen Callback device = BrickletTemperature(uid, ipcon) device.register_callback(BrickletTemperature.CALLBACK_TEMPERATURE, cb_temperature) device.set_temperature_callback_period(1000) Habe ich eine beliebige Anzahl an Temperature Bricklets im Stack und setze immer die selbe Callback Funktion, funktioniert das zwar, aber ich habe keine Information über den Bricklet der gerade auslöst. Meine Lösung: Man leitet eine eigene Klasse von IPConnection ab und überschreibt die Methode .dispatch_packet mit einem angepassten Code. class MyIPConnection(IPConnection): def dispatch_packet(self, packet): ... if function_id in device.registered_callbacks: cb = device.registered_callbacks[function_id] form = device.callback_formats[function_id] if len(form) == 0: cb(uid) elif len(form) == 1: cb(uid, self.deserialize_data(payload, form)) else: cb(uid, *self.deserialize_data(payload, form)) def cb_temperature(uid, temperature): print(uid) print(str(temperature)) Aber vielleicht gibt es eine elegantere Variante? Liebe Grüße Marco Zitieren
borg Geschrieben August 11, 2017 at 08:02 Geschrieben August 11, 2017 at 08:02 Du könntest sowas machen wie def cb_temperature(temperature, device): .... und dann registrieren mit enumerate_cb(uid, ...): device = BrickletTemperature(uid, ipcon) device.register_callback(BrickletTemperature.CALLBACK_TEMPERATURE, lambda x: cb_temperature(x, device)) Das NFC/RFID Bricklet "Scan For Tags"-Beispiel nutzt das so: https://www.tinkerforge.com/de/doc/Software/Bricklets/NFCRFID_Bricklet_Python.html#scan-for-tags Zitieren
marco.markl Geschrieben August 12, 2017 at 07:31 Autor Geschrieben August 12, 2017 at 07:31 Danke! Funktioniert und ist sicherlich die elegantere Lösung Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.