gestern hatte ich leider nur ein paar Minuten Zeit, das Ergebnis ist aber mehr als beeindruckend!
Statt bisher >2 Sek bis der Befehl ausgeführt wurde bin ich nun <0,2 Sek!
Was ich auf die Schnelle nicht verifizieren konnte, ist ob die Rückmeldungen - die irgendwie über p3 kommen sollen - auch registriert werden…
Result enthält true wenn der Befehl ausgeführt wurde.
Nicht die Antwort der Gegenseite.
Dafür braucht es die RegisterVariable oder ein Modul mit ReceiveData Methode.
Das war dass was ich mit ‚senden und empfangen in unterschiedlichen PHP-Threads‘ meinte.
Da du ja vermutlich die Daten immer anfordern musst und nicht periodisch bekommst, verzichtet auf den ClientSocket und sende es direkt per PHP. http://php.net/manual/de/function.socket-create.php
Michael
public function ReceiveData($JSONString)
{
// Empfangene Daten vom I/O
$data = json_decode($JSONString);
IPS_LogMessage("ReceiveData", utf8_decode($data->Buffer));
// Hier werden die Daten verarbeitet
// Weiterleitung zu allen Gerät-/Device-Instanzen
//$this->SendDataToChildren(json_encode(Array("DataID" => "{66164EB8-3439-4599-B937-A365D7A68567}", "Buffer" => $data->Buffer)));
}
das übergeordnete Modul ist der Client Socket.
Wenn ich die Abfrage sende, antwortet der Server wie erwartet. Nun muss ich diesen jedoch weiterverarbeiten.
Zunächst sollte er dann wohl mit
unpack
bearbeitet werden. Jedoch sehe ich - zumindest im Log nur ein leerer Feld (vielleicht liegt es ja auch nur daran, das IPS im Log diese Bitfolge nicht darstellen kann?).
Korrekt daran wird es liegen
Aber nimm anstatt LogMessage doch SendDebug.
Dann landen deine Daten im Debug Fenster deines Splitters. Und der kann auch Rohdaten darstellen.
Michael
Michael gab mir den Tipp, nicht den IPS-Client-Server zu nutzen, sondern bei dem was ich vor habe selbst einen zu erstellen. Das hat mich überzeugt, weil es mir m.E. einige Dinge erleichtert - wenn man denn einmal soweit ist!
The unpacked data is stored in an associative array. To accomplish this you have to name the different format codes and separate them by a slash /. If a repeater argument is present, then each of the array keys will have a sequence number behind the given name.