Hallo Zusammen,
ich habe mittlerweile einen US-Sensor bekommen um einen Tank auszulesen.
Jetzt habe ich eine Registervariable angelegt, den RS485 Com-Port als Instanz und ein Skript, welches den Auslesebefehl sendet. Dazu ist bei der RegVar das Skript als Ziel, die übergeordnete Instanz ist der Com-Port.
In der RegVar laufen nun irgendwie Daten auf, ich bekomme aber nicht mal mit „echo $data“ was zurück - ich habe das in allen Kombinationen probiert, aber die Rückgabe bleibt aus.
Dazu laufen bei einmaligem Ausführen in der RegVar mehrfach Daten auf, als ob das Skript mehrfach laufen würde.
Im Endeffekt will ich nur die Rückgabe weiterverarbeiten (von Hex zu ASCII und dann aus dem Text was aus & abschneiden. (In ASCII sollte „RL010012004C“ kommen, davon benötige ich die „1200“ (mm)).
Hier das Skript:
<?
$com =14246;
$reg=13446 /*[Messsystem\Heizöl\REG_VAR RS485]*/;
$code = "\x24\x52\x4C\x30\x31\x32\x33\x0D\x0A";
COMPort_SetOpen($com, true);
IPS_ApplyChanges($com);
RegVar_SetBuffer($reg, "");
COMPort_SendText ($com, $code.chr(13));
COMPort_SetOpen($com, false);
sleep (1);
IPS_ApplyChanges($com);
if ($IPS_SENDER == "RegisterVariable")
{
// bereits im Puffer der Instanz vorhandene Daten in $data kopieren
$data = RegVar_GetBuffer($reg);
// neu empfangene Daten an $data anhängen
$data = $IPS_VALUE;
// Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
RegVar_SetBuffer($reg, $data);
//debug_log(IPS_GetName($reg), "data: $IPS_VALUE
");
echo $data;
}
?>
Wenn ich alles nach dem „If“ weg lasse und nur „echo $data“ einfüge, dann werden in der RegVar z.B. für 13 Sekunden weiter Daten empfangen - Buffer bleibt aber leer (gerade getestet, aber immer unterschiedlich lange).
Zudem bewirkt „sleep (1)“ bei mir nicht 1ms pause sondern 1s, bei 100 versucht er 100s pause zu machen! (Steht in der Doku anders…)
Hat wer jemand eine Idee - ich habe bisher nie selbst mit RegVars gearbeitet - bzw. nichts selbst geschrieben.
Danke & Gruß,
Maeffjus