Zu deinen drei Optionen
1.) Nutzersicht (also der User der das Kommando sendet)
A) setState mit ack=false
B) Warten gibts an sich nicht …bzw entspricht einem "subscribe" auf den Datenpunkt wo man die Änderung erwartet
C) Idealerweise der asynchrone Callback mit dem "subscribe"
1.) Adaptersicht
A) der Adapter macht faktisch nichts, ausser das er einen subscribe auf den State hat sodass er auf Änderungen reagieren kann. Wenn eine Änderung kommt kann der Adapter müsste das "ack=false" ist und dann die entsprechende Aktion ausführen. Alle geänderten Werte schreibt er mit "ack=true"
2.) siehe 1.) Weil am Ende ja nicht der gleiche Datenpunkt von einem Kommando aktualisiert werden muss. Oder auch nichts. User sendet mit "ack=false" das Kommando, Adapter tut was er tun muss. Fertig. Wenn das so ist. ist eine Rückmeldung vom Adapter ja nicht nötig ... oder im Zuge von "GPIO"-Kram will man vllt den entsprechenden kanal als Wert auf das neu gesetzte aktualisieren
3.) User macht subscribe auf die Werte und verarbeitet nur alles mit "ack=true"