Geschrieben August 11, 2017 at 03:3711. Aug 2017 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
Geschrieben August 11, 2017 at 08:0211. Aug 2017 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
Geschrieben August 12, 2017 at 07:3112. Aug 2017 Autor Danke! Funktioniert und ist sicherlich die elegantere Lösung
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.