Hallo zusammen
Ich stehe vor einem Problem im Umgang mit negativen Zahlen. Via PHP-script lese ich die Daten meiner Wärmepumpe aus. Aktuell sind draussen ja die Temperaturen unter Null aber die Daten meines Scriptes haben je nach verwendeter PHP-Version korrekte negative oder astronomisch hohe Werte.
Der script sie wie folgt aus:
<?php
//Variablendefinition
$ip = xxx.xxx.xxx.xxx;
$port = 8888;
// connecten
$socket = socket_create(AF_INET, SOCK_STREAM,0);
$connect = socket_connect($socket, $ip, $port) || exit("socket_connect fehlgeschlagen");
if ($connect != 1)
echo "ERROR: Nicht verbunden mit der Wärmepumpe<br>";
// Daten holen
$msg = pack('N*',3004);
$send=socket_write($socket, $msg, 4); //3004 senden
$msg = pack('N*',0);
$send=socket_write($socket, $msg, 4); //0 senden
socket_recv($socket,$Test,4,MSG_WAITALL); // Lesen, sollte 3004 zurückkommen
$Test = unpack('N*',$Test);
socket_recv($socket,$Test,4,MSG_WAITALL); // Status
$Test = unpack('N*',$Test);
//printf('Status: %s <br>',implode($Test));
socket_recv($socket,$Test,4,MSG_WAITALL); // Länge der nachfolgenden Werte
$Test = unpack('N*',$Test);
$JavaWerte = implode($Test);
for ($i = 0; $i < $JavaWerte; ++$i)
{
socket_recv($socket,$InBuff[$i],4,MSG_WAITALL); // Lesen, sollte 3004 zurückkommen
$daten_raw[$i] = implode(unpack('N*',$InBuff[$i]));
}
//socket wieder schliessen
socket_close($socket);
//---------------------------------------------------------------------------
//Temperaturen
echo ("N:".($daten_raw[10] /10).":"); //Vorlauf
echo (($daten_raw[11] /10).":"); //Rücklauf
echo (($daten_raw[12] /10).":"); //Rücklauf-Soll
echo (($daten_raw[13] /10).":"); //Rücklauf-Extern
echo (($daten_raw[21] /10).":"); //Fussboden-Vorlauf
echo (($daten_raw[22] /10).":"); //Fussboden-Rücklauf
echo (($daten_raw[24] /10).":"); //Radiator-Vorlauf
echo (($daten_raw[25] /10).":"); //Radiator-Rücklauf
echo (($daten_raw[15] /10).":"); //Aussentemp
echo (($daten_raw[16] /10).":"); //Mitteltemp
echo (($daten_raw[19] /10).":"); //Wärmequelle-Eintritt
echo (($daten_raw[20] /10).":"); //Wärmequelle-Austritt
echo (($daten_raw[17] /10).":"); //Brauchwasser-Ist
echo ($daten_raw[18] /10); //Brauchwasser-Soll
?>
Den Script oben rufe ich via IP-Symcon auf und übernehme den Antwortstring. Der script selber läuft aus diversen Gründen nicht auf IP-Symcon selber.
Nun das Problem:
- Führe ich den Script auf einem Linux-Rechner (Debian 3.2.81-1, PHP Version 5.4.45-0+deb7u4) aus, sind die Daten korrekt. Man beachte die negatven roten Werte „-0.6“ und „-7.1“
N:44.7:40.1:41:41.1:32:32:43.7:43.1:1.7:[b]-0.6[/b]:1.1:[b]-7.1[/b]:42.8:50
- Führe ich den Script auf einer Synology (PHP Version 5.6.23) aus, sind die negativen Temperaturen völlig falsch. Die Werte in rot sind plötzlich astronimisch hoch und nicht mehr negativ.
N:44.7:40.1:41:41.1:32:32:43.7:43.1:1.7:[b]429496729[/b]:1.1:[b]429496722.5[/b]:42.8:50
Frage: An was liegt das ? Warum liefert der identische Script so unterschiedliche Resulate, nur weil die „Umgebung“ anders ist ?
Besten Dank für eure Inputs.
Letraz