um die Daten meiner Wärmepumpe THZ im iP-Syncom auszuwerten, habe ich einen TCP/IP <-> RS232 Wandler and die Wp gehängt.
In der Zwischenzeit weis ich auch schon was ich via RS232 senden muss um allgemeine Parameter (Laufzeiten der Pumpen, etc) vom Gerät zurück zu bekommen.
Wie jedoch bekomme ich die Daten vom RS232 in eine Variable
mein Script: bisher
Die Registervariable-Instance muss als Parent die Comport-Instanz und mit einem Script verknüpft werden, welches die Daten vom ComPort in die Registervariable schreibt.
if ($IPS_SENDER == "RegisterVariable")
{
$reg=12345; Registervariable Instance-ID
// 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);
}
Dann kann man mit RegVar_GetBuffer($reg) die Daten bekommen. Der Buffer sollte dann mir Regvar_SetBuffer($reg,"") gleich wieder geleert werden.
Ich habe das auch für meine I2C-Lib so gemacht und hier auch nochmal beschrieben.
Tommi
danke für die Infos bis hier her. Ich tue mich noch etwas schwer mit der Komunikation auf der COM-Schnittstelle:
hier der Auszug aus einem ComportTrace
allerdings steht im Buffer immer nur ‚0‘ drin. Im Debug der Registervariable sehe ich schon teilweise den richtigen Output.
und dann hier noch der Code der Register_Var:
<?
include_once('thz_vars.ips.php');
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
");
}
?>
Es wäre schön wenn sich ein Spezi für serielle Komunikation mit mir zusammen einmal dem Thema annehmen könnte…dann lässt sich ja für eine Stiebel Eltron Wärmepumpe vieleicht was richtig gutes draus machen…
Kommen die richtigen Daten wirklich im Debug der Registervariableninstance oder der Comportinstance. Wenn sie beim Comport kommen, aber im Debug der RegVar nicht, dann fehlt wahrscheinlich die Verbindung zwischen den Instancen (Comport als „Übergeordnete Instanz“ der RegvarInstanz eintragen). Wenn sie bei beiden kommen, dann bitte nachschauen, ob das RegVar-Script wirklich als Zielscript zugeordnet ist.
Tommi
Heureka, ich habs… der Inhalt des Buffers war nicht leer sonder binary Data. Das musste ich erst umwandeln.
Jetzt kann es weiter gehen mit dem Auseinandernehmen der Daten:
//einziger Unterschied...einige Sekunden ist die Uhr weitergelaufen
//1010020100d5fd00d71003101002010049f4009501dd023b003302470134023d00020001421e00640100000000f500000000000002000000f51003
//1010020100d5fd00d71003101002010049f4009601dd023b003302460134023d00020001421e00640100000000f500000000000002000000f51003
//Verdichter A: 438h
//Verdichter A: 443h
//Heizmodus: 16673h
//Brauchwassermodus: 4240h
//Kühlmodus: 0h
//Datum: 08.09.2010 (Mittwoch) 22:36:xx
//hier hat sich der wert Verdichter B auf 444h geändert und es ist jetzt 23:02:xx
//1010020100d5fd00d71003101002010056f400960067021d003602310135022200020001421e00640100000000f501cd0000000002000000f51003
Gib es spezielle Vorgehensweisen so etwas auseinander zu nehmen und an die geünschten Daten ranzukommen? Viele Messreihen mit dem Orig-Prog und einen Com-Port-Sniffer sind ja wichtig…aber wie analysiert man so etwas?