marco.markl Posted August 11, 2017 at 03:37 AM Share Posted August 11, 2017 at 03:37 AM 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 Quote Link to comment Share on other sites More sharing options...
borg Posted August 11, 2017 at 08:02 AM Share Posted August 11, 2017 at 08:02 AM 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 Quote Link to comment Share on other sites More sharing options...
marco.markl Posted August 12, 2017 at 07:31 AM Author Share Posted August 12, 2017 at 07:31 AM Danke! Funktioniert und ist sicherlich die elegantere Lösung Quote Link to comment Share on other sites More sharing options...
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.