Habe nun herausgefunden, wie ich die richtigen Werte für die Betriebsart erhalte. Und zwar kommen die über die 3003 Werte retour, nicht über die 3004 Werte. Dazu ist eine andere Abfrageroutine nötig und natürlich auch andere Java-Daten, damit keine Fehlermeldungen generiert werden.
Her mein Abfragescript für die beiden Werte für den Status des Heizkreises und des Warmwassers.
<?php
//includes
include "39064.ips.php";
include "37025.ips.php";
//Dummy Modul anlegen als Heimat der Messdaten im Selben Pfad wie das Script
$parentobject = IPS_GetObject($_IPS['SELF']);
$parentID = $parentobject['ParentID'];
//Variablen
$sBuff = 0;
$time1 = time();
$filename = "test.tst";
$JavaWerte = 0;
$refreshtime = 5; //sekunden
//echo '<meta http-equiv="refresh" content="5" >';
// connecten
$socket = socket_create(AF_INET, SOCK_STREAM,0);
$connect = socket_connect($socket, $IpWwc, $WwcJavaPort) || exit("socket_connect fehlgeschlagen");
//if ($connect = 1)
// echo "PASS: Verbunden mit WWC Java Console $IpWwc Port: $WwcJavaPort <br>";
//else
// echo "ERROR: Nicht verbunden mit WWC Java Console <br>";
//$timestamp= time();
//$datum = date("d.m.Y",$timestamp);
//$uhrzeit = date("H:i:s",$timestamp);
//printf('============================================================== <br>');
//printf('Ausleszeit: %s - %s Uhr <br>',$datum,$uhrzeit);
//printf('Refresh alle 5s !<br>');
//printf('! TEST !<br>');
//printf('============================================================== <br>');
//---------------------------------------------------------------------------
// Daten holen
$msg = pack('N*',3003);
//printf('msg:%s <br>',$msg);
$send=socket_write($socket, $msg, 4); //3004 senden
//printf('Bytes send:%d <br>',$send);
$msg = pack('N*',0);
//printf('msg:%s <br>',ord($msg));
$send=socket_write($socket, $msg, 4); //0 senden
//printf('Bytes send:%d <br>',$send);
socket_recv($socket,$Test,4,MSG_WAITALL); // Lesen, sollte 3004 zurückkommen
$Test = unpack('N*',$Test);
//printf('read:%s <br>',implode($Test));
socket_recv($socket,$Test,4,MSG_WAITALL); // Länge der nachfolgenden Werte
$Test = unpack('N*',$Test);
//printf('Länge der nachfolgenden Werte:%s <br>',implode($Test));
$JavaWerte = implode($Test);
//printf('============================================================== <br>');
for ($i = 0; $i < $JavaWerte; ++$i)//vorwärts
{
socket_recv($socket,$InBuff[$i],4,MSG_WAITALL); // Lesen, sollte 3004 zurückkommen
$daten_raw[$i] = implode(unpack('N*',$InBuff[$i]));
//printf('InBuff(%d): %d <br>',$i,$daten_raw[$i]);
}
//socket wieder schliessen
socket_close($socket);
// Werte anzeigen
for ($i = 0; $i < $JavaWerte; ++$i)//vorwärts
{
if ($i == 3) // Betriebsart Heizung
{($daten_raw[$i] = $daten_raw[$i]);
//printf('(%d)%s : %.2f h<br>',$i,$java_dataset[$i],$daten_raw[$i]);
$varid = CreateVariableByName($parentID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "", $i);//float
setValue($varid,$daten_raw[$i]);
}
if ($i == 4) // Betriebsart Warmwasser
{($daten_raw[$i] = $daten_raw[$i]);
//printf('(%d)%s : %.2f h<br>',$i,$java_dataset[$i],$daten_raw[$i]);
$varid = CreateVariableByName($parentID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "", $i);//float
setValue($varid,$daten_raw[$i]);
}
}
function CreateVariableByName($id, $name, $type, $ident, $profile, $position)
{
$vid = @IPS_GetObjectIDByIdent ($ident, $id);
if($vid === false)
{
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetIdent($vid, $ident);
IPS_SetInfo($vid, "");
IPS_SetPosition($vid, $position);
if($profile !== "")
{
IPS_SetVariableCustomProfile($vid, $profile);
}
}
return $vid;
}
?>