Jump to content

Mehrere Callbacks auf eine Function UID abfragen? -- Python


Recommended Posts

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

Link zu diesem Kommentar
Share on other sites

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.Ä.)

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...