Ich habe nun per „RegisterVariable“ die Daten vom seriellen Port abgeholt und per Skript in einen Variable geschrieben.
Hier mein Testscript:
<?
switch($IPS_SENDER)
{
case "RegisterVariable":
SetValue (50944 /*[Server\Akkulader mit ser.-Schnittstelle\Daten-Server-Akkulader]*/ , $IPS_VALUE);
echo ("$IPS_VALUE");
break;
}
?>
Soweit so gut, nur bekomme ich in die Variable immer nur die letzten 8Bit, da die serielle Schnittstelle von IPS nur in 8Bit Stückchen liefert. Siehe Anlage „dump“
Die 8Bit Datenstückchen passen auch nicht mit den Dateninhalten zusammen.
Wie kann ich die einzelnen Daten auf einzelne Variablen verteilen?
Noch eine Frage, wie könnte ich per Script die Daten in einzelne Variablen zerteilen?
das ist nicht IPS, welches nur bis 8 bit zählen kann. Die Ursache solltest Du im Prozessor der Ladestation suchen, schau Dir nur einmal die zeitlichen Abstände der eingehenden Meldungen an.
Wenn Du die HEX Ansicht aktivierst, werden die letzten beiden Bytes vermutlich ein CR/LF hervorzaubern, dieses würde ich als Erkennungsmerkmal der „stotternden“ Prozessornachricht nutzen: hier hat er das Ende der Nachricht markiert. Vorher hilft nur eines: die Bruchstücke der Nachricht mit dem Append Befehl (wenn es den denn gibt unter PHP, habe noch keine Ahnung) sammeln und das Datenpuzzle zusammenfügen. Erst danach sollte die komplette Nachricht in die einzelnen Variablen zerlegt werden.
mfg
BerndJ
PS: ein Link zu dem Stotterkandidaten wäre nicht schlecht.