Ich habe eine Frage zu Message Sink und die zeitliche Abfolge bei Auslösung.
IP-Symcon 5.1, Ubuntu, 03.05.2019, c9a193b6b44
Beispiel:
Ich habe in einem Modul eine Liste mit Handsendern und der zugehörigen Aktion, was passieren soll.
Die Handsender sind mit RegisterMessage auch für Message Sink registriert.
Mein Message Sink sieht so aus:
public function MessageSink($TimeStamp, $SenderID, $Message, $Data)
{
// Send debug
$this->SendDebug('MessageSink', 'Message from SenderID ' . $SenderID . ' with Message ' . $Message . "
Data: " . print_r($Data, true), 0);
switch ($Message) {
case IPS_KERNELSTARTED:
$this->KernelReady();
break;
case VM_UPDATE:
// Remote controls
$remoteControls = json_decode($this->ReadPropertyString('RemoteControls'), true);
if (!empty($remoteControls)) {
if (array_search($SenderID, array_column($remoteControls, 'ID')) !== false) {
$this->DetermineRemoteControlButton($SenderID);
}
}
break;
}
}
Generell funktioniert das auch, was mich nur wundert, ist die zeitliche Abfolge und die Visualisierung im Webfront.
In meiner Methode DetermineRemoteControlButton wird anhand der Handsenderliste geprüft, welche Aktion ausgeführt werden soll.
Ist dies ermittelt wird eine weitere Methode ausgeführt, z.B.
$this->ToggleAbsenceMode(false, 'Test');
Rufe ich die Methode DetermineRemoteControlButton (z.B. im Skript Editor) direkt auf so passiert auch der Ablauf den ich geplant habe, Visualisierung im WebFront passt auch.
Wir die Methode per Message Sink aufgerufen, wird auch alles ausgeführt, aber die Visualisierung im WebFront z.B. mit $this->SetValue(‚Abwesend‘, true); Variable passiert erst am Ende mit zeitlicher Verzögerung auch dann erfolgt erst der SendDebug Eintrag.
Verstehe ich nicht ganz. Ich bin davon ausgegangen, dass die registrierte Variable auslöst, der SendDebug wird geschrieben und dann geguckt, welche Methode ausgeführt werden soll.
Dies scheint bei mir nicht der Fall zu sein.
Ideen?
Uli