Hallo Community
Gibt es eventuell schon jemanden der dieses Interface an seiner Heizung über IPS betreibt?
Sofern sich niemand findet hoffe ich auf Unterstützung bei der Erstellung einer möglichen Kommunikation über IPS. Dazu habe ich mich schon mit Herrn Steppuhn von der Fa. Emsystech in Verbindung gesetzt, der mir einen Code zur Verfügung stellte. Jedoch wurde dieser im Jahr 2008 geschrieben und ich bin mir net sicher ob er jetzt noch mit IPS umsetzbar ist.
Hier mal der Code:
<?
//------------------------------------------------------------------------------
// _ _
// | | | |
// ___ _ __ ___ ___ _ _ ___| |_ ___ ___| |__
// / _ \ '_ ` _ \/ __| | | / __| __/ _ \/ __| '_ \.
// | __/ | | | | \__ \ |_| \__ \ || __/ (__| | | |
// \___|_| |_| |_|___/\__, |___/\__\___|\___|_| |_|
// __/ |
// |___/ Engineering
//
// Filename: SystaInterface
// Description: Skript zur Kommunikation mit SystaInterface
// Es wird zyklisch ein kompletter Datensatz abgefragt und
// als IPS Variablen zur weiteren Verwendung zur Verfügung
// gestellt.
//
// Author: Martin Steppuhn (www.emsystech.com)
// History: 16.03.2008 Initial version
//------------------------------------------------------------------------------
function SystaSetValueInteger8($name ="",$data,$offset)
{
SetValueInteger($name, ord($data{$offset}));
}
function SystaSetValueInteger16($name ="",$data,$offset)
{
SetValueInteger($name, (ord($data{$offset+1})*256) + (ord($data{$offset})) );
}
function SystaSetValueInteger32($name ="",$data,$offset)
{
SetValueInteger($name, (ord($data{$offset+2})*65536)+ (ord($data{$offset+1})*256) + (ord($data{$offset})) );
}
function SystaSetValueFloat($name ="",$data,$offset)
{
SetValueFloat($name, (ord($data{$offset+1})*256) + (ord($data{$offset})) );
}
function Systa2IPS($s)
{
// Zeit
SystaSetValueInteger8("SystaMinute",$s,3);
SystaSetValueInteger8("SystaHour",$s,4);
SystaSetValueInteger8("SystaDay",$s,5);
SystaSetValueInteger8("SystaMonth",$s,6);
SystaSetValueInteger16("SystaYear",$s,7);
// Systemwerte
SystaSetValueFloat("SystaTA",$s,9);
SystaSetValueFloat("SystaTI",$s,11);
SystaSetValueFloat("SystaTWO",$s,13);
SystaSetValueFloat("SystaTPO",$s,15);
SystaSetValueFloat("SystaTPU",$s,17);
SystaSetValueFloat("SystaTV1",$s,19);
SystaSetValueFloat("SystaTR1",$s,21);
SystaSetValueFloat("SystaTV2",$s,23);
SystaSetValueFloat("SystaTR2",$s,25);
SystaSetValueFloat("SystaTK",$s,27);
SystaSetValueInteger8("SystaPK",$s,29);
SystaSetValueInteger8("SystaPHK1",$s,30);
SystaSetValueInteger8("SystaPHK2",$s,31);
SystaSetValueInteger32("SystaKesselstarts",$s,34);
SystaSetValueInteger32("SystaKessellaufzeit",$s,38);
// Sollwerte
SystaSetValueFloat("SystaTWOS",$s,42);
SystaSetValueFloat("SystaRT1S",$s,44);
SystaSetValueFloat("SystaTV1S",$s,46);
SystaSetValueFloat("SystaRT2S",$s,48);
SystaSetValueFloat("SystaTV2S",$s,50);
// Solar
SystaSetValueFloat("SystaTSA",$s,52);
SystaSetValueFloat("SystaTSE",$s,54);
SystaSetValueFloat("SystaTWU",$s,56);
SystaSetValueInteger8("SystaPSO",$s,58);
SystaSetValueInteger32("SystaSolarTagesgewinn",$s,59);
SystaSetValueInteger32("SystaSolarErtrag",$s,63);
SystaSetValueInteger8("SystaSolarStatus",$s,67);
// Störung
SystaSetValueInteger8("SystaStoerungFuehler",$s,68);
SystaSetValueInteger8("SystaStoerungKessel",$s,69);
SystaSetValueInteger8("SystaStoerungSolar",$s,70);
}
$ID = 24093; // ID für Serielle Schnittstelle
$Command = chr(36); // $Command = String für Polling
$Command .="DAT\r"; // (dummerweise verwendet PHP auch das $ Zeichen)
SetValueString("SystaReceiveBuffer",""); // Puffer löschen
ComPort_SendText($ID, $Command); // Kommando senden
IPS_Sleep(50); // kurz warten
$ReceiveString = GetValueString("SystaReceiveBuffer");
if(ord($ReceiveString{0}) == 0x7E) // Auf Startbyte prüfen
{
// printf("Startbyte ok
");
if(strlen($ReceiveString) != (ord($ReceiveString{1}) + 4)) // Länge ok ?
{
// printf("Länge ok
");
// Prüfsumme berechnen
$Checksum = 0;
for ($i=1; $i<(ord($ReceiveString{1})+3); $i++)
{
$Checksum += ord($ReceiveString{$i});
}
if(($Checksum & 0xFF) == 0)
{
// printf("Prüfsumme ok
");
Systa2IPS($ReceiveString);
}
else
{
// printf("ERROR: Prüfsumme
");
}
}
else
{
// printf("ERROR: Falsche Framelänge
");
}
}
else
{
// printf("ERROR: Ungültiges Startbyte
");
}
?>
Auch ist mir momentan noch nicht ganz klar, wie und wo ich welche Variable (bzw. heute ja eher die Reg_Variable) erstellen muss um eine Kommunikation mit dem Com Port und dem oben geposteten Script zu erreichen.
Es grüßt Euch der Lange Lang