Geschrieben November 3, 2020 at 12:473. Nov 2020 Hallo, ich versuche gerade mehrere IO16 Module mit angeschloßenen Tastern auszuwerten, dazu möchte ich Callbacks verweden. Wenn ich bei den Callbacks bei jedem Modul also die selbe Funktion angebe bekomme ich in der Funktion ja nicht mit von welchem Modul jetzt der Aufruf gekommen ist oder? Mein Workaround wäre jetzt gewesen für jedes Modul eine eigene Fuction zu schreiben welche im Grunde die Callbackfuntion mit der UID nochmals aufruft. So kann ich das Modul identifizieren. Meine Frage geht das auch anders oder habe ich wiedermal etwas übersehen? Grüße Markus
Geschrieben November 3, 2020 at 13:223. Nov 2020 Moin, Die Callbacks werden intern den Devices zugeordnet. Du kannst also z.B. folgendes machen: def cb_1(channel, changed, value): print("1") def cb_2(channel, changed, value): print("2") io = BrickletIO16V2("UID1", ipcon) io2 = BrickletIO16V2("UID2", ipcon) io.register_callback(io.CALLBACK_INPUT_VALUE, cb_1) io2.register_callback(io.CALLBACK_INPUT_VALUE, cb_2) Dann wird dir eine 1 ausgegeben, wenn das erste IO-Bricklet das Callback ausgelöst hat, und eine 2 wenn es das zweite war. Du kannst dann noch cleverer sein und dir bei der Registrierung des Callbacks mitgeben, welches Device das ist, indem du einen Lambda-Ausdruck benutzt, z.b. so: def cb(device, channel, changed, value): print("Ich bin {}".format(device)) print(channel, changed, value) io = BrickletIO16V2("UID1", ipcon) io2 = BrickletIO16V2("UID2", ipcon) io.register_callback(io.CALLBACK_INPUT_VALUE, lambda *args: cb("UID1", *args)) io2.register_callback(io.CALLBACK_INPUT_VALUE, lambda *args: cb("UID2", *args)) Das ganze kannst du soweit führen, dass du dir statt der UID gleich das Device-Objekt in das Callback reingibst, falls du direkt mit dem Bricklet etwas machen willst (z.B. wenn Pin 1 sich ändert Pin 2 auch ändern o.Ä.)
Geschrieben November 10, 2020 at 09:0810. Nov 2020 Autor Moin, danke für deine Antwort, komme leider erst jetzt dazu deine Antwort umzusetzen. Ist es ein Problem wenn ich die Registrierung von Callbacks für ein Modul mehrfach ausführe? Wird dann der Callback mehrfach ausgeführt? Danke.
Geschrieben November 10, 2020 at 12:1210. Nov 2020 Das hängt von den Bindings ab. Bei den Python-Bindings kannst du pro Device und Callback-ID nur ein Callback registrieren. Wenn du die Registrierung mehrfach ausführst, werden die älteren Registrierungen überschrieben.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.