Hallo zusammen,
mein Problem betrifft im Grunde schon programmtechnische Abläufe über Skripte, da ich festgestellt habe, das die Rückmeldungen von Homematic IP Aktoren zum Teil recht verzögert in Symcon ankommen bzw registriert werden.
Ich habe zB ein Skript, welches durch Änderung von ‚STATE‘ eines Aktors angetriggert wird. In diesem Skript wird dann der Status von ‚STATE‘ abgefragt. Wenn true, dann dieses, sonst jenes…
In meinem o.g. Beispiel ist es so, das es sich um einen Homematic IP UP-Aktor mit Tastwippen handelt. Zwischen den Wippen und dem integrierten Aktor besteht über eine CCU3 eine Direktverknüpfung.
Drücke ich nun die Wippe, dann wird der Aktor über die Direktverknüpfung angesteuert (Wechsel von false auf true, Änderung von ‚STATE‘).
Daraufhin wird das Symcon-Skript angetriggert, läuft aber über das Skript in den else-Zweig, also false. Obwohl der Aktor auf true steht.
Nun ist es so, das zwischen der Betätigung der Wippe und Änderung von ‚STATE‘ laut Symcon 4 Sekunden liegen.
Also laut Symcon zB
Betätigung der Wippe ‚Press Short‘ um 12:00:00 Uhr, Änderung von ‚STATE‘ um 12:00:04 Uhr.
Ich vermute nun folgendes:
Symcon registriert eine Änderung von ‚STATE‘ (ohne den genauen Zustand zu kennen). Dann läuft das Skript und obwohl der ‚STATE‘ des Aktors true ist, hat Symcon die Rückmeldung noch nicht und das Skript läuft in den else-Zweig…
Setze ich ‚STATE‘ des Aktors jedoch über die CCU3 (Aktor über CCU3-Webui schalten), läuft das Skript richtig durch, Symcon bekommt den Zustand anscheinend schneller übermittelt, was sich mir logisch nicht so ganz erschliesst… denn es dürfte keinen Unterschied machen ob ich den Aktor über die Tasterwippe schalte oder den Aktor über das Webui der CCU3.
Lege mal bitte in Symcon eine Variable mit Action Skript an, über welches Du einen Aktor ein- / ausschaltest.
Dann schalte über diese Variable im Webfront mal den Aktor und schau Dir einmal die Zeit in der CCU an und einmal die Zeit im Objektbaum von Symcon (beides mal die Zeiten, wann der Aktor geschaltet hat). Dann wirst Du einen nicht unerheblichen Unterschied zwischen den Zeiten feststellen.
Warum sollte ich das machen?
Ich schalte den Aktor direkt mit der Standardaktion aus dem WebFront.
Änderung in der Konsole kommt quasi sofort, und Status emulieren ist natürlich aus.
Michael
Selbst wenn ich den „STATE“ des Aktors direkt über das WF schalte, dann kommt die Rückmeldung des Status in Symcon um 4 Sekunden versetzt zur CCU. CCU bekommt die Rückmeldung sofort, Symcon 4 Sekunden später.
Status emulieren kann ich bei mir weder ein- noch ausschalten. Diesen Menüpunkt habe ich nicht. Zumindest nicht auf dem „STATE“ des Aktors.
Wieviel Gerät hast du denn insgesamt an der CCU dran? Hast du mal im Debug des HomeMatic Sockets geschaut wie viele Daten bei dir reinkommen? Sind das evtl. zu viele?
Nein, den Statusausgang verwende ich nicht, dieser eilt ja generell nach (selbst in der Webui der CCU).
Ich frage den Wert der Variable ‚STATE‘ ab, also dem eigentlichen Aktor-Schaltausgang.
@Kronos
Wie funktioniert das denn?
Und was genau bewirkt das? Den Kanal 3 frage ich ja in keinem Skript ab…
Was mich nur wundert: Wieso stimmt der Zeitstempel in Symcon (Kanal 4) mit dem Zeitstempel der CCU (Kanal 3) überein?
Nicht das hier der Fehler liegt, das der Symcon Kanal4-Zeitstempel in Wirklichkeit der CCU-Kanal3-Zeitstempel ist (was ich nämlich gerade vermute)
Auf der CCU unter „Geräte“ den Aktor suchen und in die „Einstellungen“ gehen. Die Default Latenz (3 Sekunden) + die Zufallsverzögerung (1 Sekunde) entspricht in etwa der von Euch festgestellten Verzögerung. Daher mein Verdacht.
@kronos
Habe sowohl die Event- als auch die Zufallszeit auf „inaktiv“ gesetzt.
Beim Versuch auf 2 Schaltaktoren mit den oben genannten Einstellungen zeitgleich ein RequestAction auf den „STATE“ Kanal 4 abzusetzen, schmiert der Homematic Socket ab…
Aber wie gehe ich nun mit dem Problem um? Gibt es hier eine Lösung / Lösungsweg?
Ich schalte per Direktverknüpfung (Taster -> Aktor 1, Taster -> Aktor 2) also über einen Taster 2 Schaltaktoren ein/aus
Per Skript frage ich den Zustand der Aktoren ab, angetriggert wird dieses Skript über Zustandsänderung von beiden Aktoren.
Über das Skript wird dann je nach Zustand der Aktoren die beleuchtete Wippe ein/ausgeschaltet.
Beide Aktoren ein = grün, 50% Helligkeit
Einer von beiden Aktoren ein = blau, 50% Helligkeit
Sonst = Aus, 0% Helligkeit
Das Problem sind eigentlich nun 2 Probleme:
Anscheinend werden die Aktoren minimal verzögert über die Direktverknüpfung angesteuert (meinetwegen Millisekunden-Bereich)
Demzufolge wird das Skript nicht ordentlich abgearbeitet.
Ich stelle es mir das Prozedere so vor (um es mal etwas aufzudröseln:
Druck auf den Taster
Aktor 1 ändert den Zustand, das Skript wird angetriggert
Über Skript werden die Zustände von Aktor 1 und Aktor 2 abgefragt
Symcon erkennt, das Aktor 1 und Aktor 2 AUS sind (Aktor 1 ist zwar AN, hat jedoch den Status noch nicht übermittelt)
Das Skript läuft in den ELSE-Zweig = Tasterwippe nicht beleuchtet
Ein paar Millisekunden nach Punkt 2 ändert Aktor 2 seinen Zustand
Das Skript wird erneut angetriggert
Da Aktor 1 mittlerweile seinen Zustand übermittelt hat (AN), Aktor 2 jedoch nicht…
Das Skript fragt die Zustände von Aktor 1 und Aktor 2 ab
Aktor 1 wird als AN erkannt, Aktor 2 als AUS (obwohl er an ist)
Die Tasterwippe leuchtet blau (würde bedeutet nur 1 Aktor ist an), in Wirklichkeit sind aber beide an.
Die o.g. Punkte laufen natürlich im Bruchteil einer Sekunde ab, ich habe es mal versucht so aufzudröseln, damit ihr das Problem nachvollziehen könnt.