Hallo zusammen, auch an @DirkG , der an der Diskussion auch beteiligt war.
Die Frage ist schon etwas älter, aber vermutlich immer noch aktuell. Dazu wollte ich zumindest eine kleine Erklärung liefern, warum sich der Flow ggf. anders verhält als erwartet.
In diesem Fall sind mehrere Aktionen “nacheinander” geschaltet. Das muss aber erstmal nichts heißen. Der Ablauf hängt primär davon aub, wie die Aktionen in der App programmiert sind:
- asynchroner Aufruf (die Regel): Dabei wird mit Ausführen der Karte ein asynchroner Aufruf gestartet (z.B. Sound abspielen, Lampe schalten). D.h. die App schickt einfach einen Befehl an das Gerät und damit ist die Aktion beendet. Wann dann die Lampe tatsächlich schaltet ist nicht gewiss. Der Sound wird dann auch irgendwann abgespielt - und zwar parallel zum weiteren Flow-Ablauf.
- synchroner Ablauf (bei Rückgabetoken und auf AdvancedFlow angepasste Aktionen): Dabei “wartet” die Aktionsverarbeitung auf das Ergebnis und beendet die Aktionskarte erst dann. Der folgende Aufruf findet also tatsächlich nach Abarbeitung der vorherigen statt.
Das gleiche betrifft den aufgerufenen Flow. Der Flow wird asynchron gestartet und dessen Aktionen auch. Es kann also sein, dass die Flow-Aktionen vor der Sondausgabe ausgefĂĽhrt werden oder auch nach Aktivieren der Lampe. Die ersten drei Aktionen (incl. der Flow-Aktionen) laufen also alle irgendwie parallel in ungewisser Reihenfolge ab.
Es wird nur wenige Aktionen geben, die bereits auf AdvancedFlow angepasst sind. Das sind u.a. die Homey-eigenene JSON-Konvertierungen. Die laufen synchron. D.h. die Aktionskarte wartet auf die Verarbeitung und ist erst dann beendet, wenn die Konvertierung abgeschlossen ist und man das Ergebnis als Token im nächsten Schritt weiter verwenden kann.
Ich musste das z.B. bei Blink oder der SQL-App auch ergänzen.
Beispiel: [APP][PRO] MySQL-Client - #42 by RonnyW
Hier wartet die Aktion “SQL-Befehl ausführen” auf das Ergebnis der Abfrage und liefert die Daten als Token zurück. Die nächste Karte wird erst danach ausgeführt.
Zuvor lief das auch asynchron und nach der AusfĂĽhruing wurde ein Ereignis getriggert.
Bei Aktionen ohne definiertes Ergebnis (Token), sollte man also von einer asynchronen/parallelen Verarbeitung ausgehen. Die Reihenfolge der Verarbeitung ist damit nicht sicher.
Beide Varianten wären also identisch:

