PHP Funktion Rückgabewert kommt über ReceiveData

Hallo,

kann ich mich irgendwie aus einer eigenen PHP Funktion an ReceiveData hängen?

Als Beispiel:
In dem Tasmota Modul sende ich per Funktion (Tasmota_sendMQTTCommand) einen Befehl ab.
Nun würde ich gerne als Rückgabewert eine Antwort mit dem Ergebnis erhalten, das Ergebnis bekomme ich aber in der ReceiveData Funktion.

Gibt es eine Möglichkeit darauf zuzugreifen?
Ich hoffe die Frage ist verständlich. :smiley:

Grüße,
Kai

Du schreibst in ForwardData in einen Buffer, dann must Du warten bis von RecieveData der Buffer ausgelesen wurde und mit der Antwort ergänzt wurde. Wenn sich der Buffer verändert hat gibst Du die Daten als return von Foward Data zurück. Wie der Buffer strukturiert ist hängt individuell davon ab was Du für Daten schickst bzw. wie das Protokoll aussieht. Du brauchst halt einen Indentifier mit dem Du im Buffer das Result zuordnen kannst.

Mit ForwardData schicke ich die Daten doch an eine übergeordnete Instanz weiter, das will ich ja gar nicht, oder habe ich dich falsch verstanden?

Grüße,
Kai

Ja aber ForwardData wurde ja von Deiner Instanz aufgerufen also must Du auch aus der Methode mit return die Antwort an die aufrufende Instanz zurück geben. Das heist Du must mit Foward Data so lange warten bis der Response von RecieveData in den Buffer geschrieben worden ist.

Hab gerade einen Thread von dir gefunden: Wie nehme ich Daten in einem PHP Modul in einer Funktion über den Datenfluss entgegen

Du hast ja mal das selbe gefragt. :slight_smile:
Ich versuche mein Glück einfach mal.

Grüße,
Kai

@Fonzo hast du dafür ein Beispiel?

Grüße,
Kai

Darf ich auch :wink:
SymconTest/module.php at ea0d216e3a60c7b7a81e5d3469a4d2c6b39cc1a6 · symcon/SymconTest · GitHub
Dort wird an den Child das Ergebnis zurückgegeben.
Oder hier:

Da sendet ein Child an einen ModBus-Splitter und bekommt dann auch die Antwort.
Michael

Ich glaube dann reden wir aneinander vorbei.

In der Instanz IPS-Tasmota gibt es die Funktion: Tasmota_sendMQTTCommand
Von dort wird an den MQTT Client (Splitter) ein MQTT Command gesendet.
Das Ergebnis davon kommt in IPS-Tasmota in ReceiveData ja wieder an. Ich will also nicht im Splitter auf irgendwas reagieren sondern möchte in IPS-Tasmota im ReceiveData das Ergebnis abfangen und bei Tasmota_sendMQTTCommand als Rückgabewert ausgeben.

Ich glaube aber das mein Vorhaben so überhaupt nicht funktioniert. :banghead:

Ich hoffe ich habe es verständlich erklärt. Bzw. hoffe ich dein Beispiel nicht falsch verstanden zu haben.

Grüße,
Kai

Geht schon, ist aber eigentlich Aufgabe des Splitter.
Musst du halt so wie Fonzo es beschrieben hat im Device lösen.
Beispiel dafür:
Xiaomi-Smart-Home/module.php at 60be38965bf6b0770346a9a89b65ab3c893de10c · Nall-chan/Xiaomi-Smart-Home · GitHub

Schema wie Fonzo schrieb:
Senden:

  • Einen Slot in einer Queue vorbereiten.
  • Queue in Buffer schreiben
  • Daten versenden
  • Schleife welche die Queue prüft ob der Slot jetzt Daten enthält
  • Daten zurückgeben

ReceiveData:

  • Daten prüfen ob sie in die Queue gehören
  • Slot in der Queue aktualisieren

Michael

Danke Michael, aber das macht man eigentlich im Splitter. :smiley: :stuck_out_tongue:
Spaß beiseite, ich glaube das hilft mir, danke!

Grüße,
Kai

Habe eben noch oben etwas ergänzt.
Irgendwie war das Forum gerade 5 Minuten down :confused:
Michael

Ja, habe ich auch gemerkt.
Ich denke ich habe verstanden wie es funktioniert. Danke für die ausführliche Antwort. :slight_smile:

Grüße,
Kai

Danke Fonzo und Michael, ich habe es gestern noch hinbekommen. :slight_smile:

Grüße,
Kai