Senden von Hexadecial über SendDataToParent an Serial Port möglich?

Hallo,

ich habe derzeit ein wenig zeit und versuche grade meine Solaranlage mittels Serial Port auszulesen.
Ich habe derzeit das Problem das der String den ich sende direkt als String und nicht als Hexadezimal gesendet wird.

Hier wäre der Hexadecimal wert zur abfrage der Daten (QPIGS<CRC><cr> ):

\x51\x50\x49\x47\x53\xb7\xa9\x0D

Ist es möglich Hexadezimal über SendDataToParent zu senden so das diese direkt an die Anlage weitergeleitet werden?
Danke für eure Hilfe.

Swen
[b]
Update: Hab die Lösung selber rausgefunden.

Habe mir die entsprechenden Werte aus der ASCII Tabelle rausgesucht. Hätte ich auch selber drauf kommen können.[/b]

Leider muss ich nochmal stören.

Derzeit sende ich die Befehle wie folgt:


protected function SendToIO(string $payload)
        {
            //an Socket schicken
            $result = $this->SendDataToParent(json_encode(Array("DataID" => "{79827379-F36E-4ADA-8A95-5F8D1DC92FA9}", "Buffer" => $payload)));
            return $result;
        }

$this->SendToIO(hex2bin("4D4E4348474330313130250B0D"));//Max. LS 110 | 4D 4E 43 48 47 43 30 31 31 30 25 0B 0D             MNCHGC0110%.

Leider lässt sich so nicht werte mit xASCII(ANSI) zwischen 128-191 Dez darstellen. Bekomme nämlich so einen blöden Json-Parse Fehler.

Habt ihr eine Idee wie das realisieren kann?

Swen

Json kann nur UTF8
Also immer schön nach UTF8 codieren :slight_smile:

Michael

Danke für die Hilfe jetzt klapp´s.

Manchmal kann es so einfach sein.

Swen

Muss leider noch einmal eine frage zum ReciveData stellen.
Ist es möglich das man beim empfangen der Daten genau zuordnen kann welcher Befehl gesendet wurde, oder das mann eine Prüfsumme mitschickt?
Bezieht sich auf das Serial Port Modul.

Swen

Du meinst ob man erkennen kann worauf sich die empfangenen Daten beziehen?
Nein, das geht bei ‚Stream‘ IOs nicht.
Das musst du selber umsetzen.
Bei einigen IOs (Homematic) oder Splittern (z.b. ModBus) bekommst du die Antwort direkt als Rückgabewert von SenddataToParent.
Hier aber nicht.
Geht auch nicht, weil die Hardware ja auch so spontan Daten senden könnte, IPS kennt den Inhalt und Aufbau nicht und kann dort also nichts selber zuordnen.
Michael

Danke für die Info. Dann muss ich das über die Anzahl der Zeichen machen. die Ausgabe ist ja standardisiert.

Swen

Nur zählen ist schlecht. Kurz den Stecker ziehen und stecken und dein Code zählt bis zum IPS Neustart immer falsch.
Besser ist auf bestimmtes Startzeichen zu achten, und dann zu zählen.
Michael

ne ich zähle immer nur die Zeichen die Empfangen wurden.
Mal sind es 115, mal nur 5, mal 10.
Dann ist funktioniert es auch nach einen Neustart.

die Startzeichen sind immer gleich und nach der Checksumme kann ich auch nicht gehen.

Swen

Dann das immer als Beginn einer Antwort nutzen.
Ich meine das jetzt dahingehend, das du sicherstellen kannst dann immer sauber Datenpaket zu erhalten.
Ich meine nicht die Zuordnung der Antwort zur Anfrage.
Michael

Ah:eek:, jetzt hab ich es verstanden, das werde ich dann so umsetzen.

Swen