Das interessante daran ist, dass die Funktion alle 10 Sekunden aufgerufen wird, der Fehler aber nur bei jedem zweiten Mal auftaucht. #52127 ist die ID der Modulinstanz selbst. Ich verstehe halt nicht, wie die Funktion hexdec diesen Fehler auslöst?
Lass dir doch mal mit IPS_LogMessage ausgeben, was in $Data drin ist. Da sind bestimmt jedes 2. Mal Zeichen dir, die nicht Hexadezimal dekodiert werden können.
Ja, der Splitter liefert da in der Tat gelegentlich Datenmüll. Kann ich das irgendwie unterbinden bzw. den Fehler abfangen, damit der mir nicht das Log zumüllt.
class SeplosSplitter extends IPSModule
{
public function Create()
{
//Never delete this line!
parent::Create();
//These lines are parsed on Symcon Startup or Instance creation
//You cannot use variables here. Just static values.
$this->RequireParent("{3CFF0FD9-E306-41DB-9B5A-9D06D38576C3}"); // I/O
}
public function ApplyChanges()
{
//Never delete this line!
parent::ApplyChanges();
}
// Data an Child weitergeben
// Type String, Declaration can be used when PHP 7 is available
//public function ReceiveData(string $JSONString)
public function ReceiveData($JSONString)
{
// Empfangene Daten vom I/O
$data = json_decode($JSONString);
$dataio = json_encode($data->Buffer);
$this->SendDebug("Splitter ReceiveData:",$dataio,0);
// Hier werden die Daten verarbeitet
// Weiterleitung zu allen Gerät-/Device-Instanzen
$this->SendDataToChildren(json_encode(Array("DataID" => "{FB6BD06E-1499-1676-AB5F-3FB88C340926}", "Buffer" => $data->Buffer))); // Splitter Interface GUI
}
// Type String, Declaration can be used when PHP 7 is available
//public function ForwardData(string $JSONString)
public function ForwardData($JSONString)
{
// Empfangene Daten von der Device Instanz
$data = json_decode($JSONString);
$datasend = $data->Buffer;
$datasend = json_encode($datasend);
$this->SendDebug("Splitter Forward Data:",$datasend,0);
// Hier würde man den Buffer im Normalfall verarbeiten
// z.B. CRC prüfen, in Einzelteile zerlegen
// Weiterleiten zur I/O Instanz
$result = $this->SendDataToParent(json_encode(Array("DataID" => "{79827379-F36E-4ADA-8A95-5F8D1DC92FA9}", "Buffer" => $data->Buffer))); // TX GUI
return $result;
}
}
Ich hab den Code im eigentlichen Modul mal umgeschrieben, so dass er die Daten vorab auf korrekte Länge prüft. Da kommt der Fehler nur noch ganz sporadisch.
erstmal Danke vor ab für die Arbeit. Ich habe das Modul mal installiert. Jetzt fällt mir aber auf das man einen SocketClient als Splitter benötigt. Würde denn auch ein Splitter Zugriff auf einen SeriellenPort funktionieren ?
Andere Frage noch wäre, den Intervall habe ich eingestellt mit 10Sek. Es kommen aber Werte nur alle 5Minuten ? Woran könnte das liegen ?