RequestAction überschrieben

Irgendwie stehe ich gerade auf dem Schlauch und komme auch mit der Suche nicht weiter.

In Module funktionierte es immer mit “RequestAction($idAnfahren, 100);” so sauber, wie auch, als wenn man Scripte im Baum erstellt.

Nun habe ich wegen Rückmeldeobjekte notwendiger Weise eine “public function RequestAction($Ident, $Value)” Funktion in der Klasse. Dann funktioniert der Aufruf von “RequestAction($idAnfahren, 100);” natürlich nicht mehr, da ich die Basiskallse überschrieben habe. Ich komme diversen versuchen nicht weiter. Die anzusteuernde ID ist eien ID eines anderen Moduls. “SetValue” hilft auch nicht, da bekomme ich ReadOnline. Jemand eine Idee was ich machen kann?

Bitte zeig mal den Code mit nachvollziehbaren Beispiel.
Weil selbstverständlich kannst du mit RequestAction andere Variablen schalten.
Eine Public Methode in einem PHP Modul verhindert dies nicht, weil das eine ist eine Funktion des SDK und das andere ist eine direkte Funktion von Symcon.
Michael

Das ist kein Problem. RequestAction ist im global Scope. Wenn du die Funktion auf der Klasse aufrufst, wäre dies immer $this->RequestAction.

paresy

Danke paresy.
Nur nochmal für die Anderen, falls Interesse.
Vereinfacht dargestellt:
Ein Modul welches eine Funktion bereitstellt mit Beispiel:
public function DeviceLook()
{
RequestAction(46381, 100);
}

Mit Hilfe eines anderen Moduls rufe ich diese Funktion auf.
Dadurch passiert:
RequestAction geht über den FlowHandler
FlowHandler sieht, dass das Telegramm vom anderer Modul kam
FlowHandler versucht es wieder an vom anderer Modul zu schicken
Anderes Modul ist aber noch beschäftigt, weil er deine Funktion ausführt
→ Deadlock → Timeout → Fehler
deshalb die Meldung: „Zeitüberschreitung beim Warten auf Antwort“

RequestAction() wird nur vom eigenen Modulaufruf verarbeitet.

Lösung wie von paresy vorgeschlagen:
”Du darfst RequestAction (wenn es für KNX ist) nicht in ReceiveData aufrufen, da du dort in der Empfangsschleife von KNX drin bist. Du müsstest das Senden dann über einen RegisterOnceTimer entkoppeln: RegisterOnceTimer”

Dieser asyncrone Aufruf funktioniert bei mir und löst das Problem.
Ich hatte zunächst versucht den Flow beim aufrufenden Modul wieder entgegenzunehmen aber da konnte ich nur „Idents“ empfangen, aber keine IDs.