Für die Umrechnung von EIS5/DTP9 2byte float-Werten mit der Hilfe von PHP stolpert man im Internet immer wieder auf den "untenstehende" Code der auf PHP portiert wurde und prinzipiell funktioniert. Da das Script schon etwas älter ist kommt es auf 64bit Systemem zu Problemen wenn die Temperatur oder der Wert unter 0 sinkt. Dann erklimmt der Rückgabewert nämlich schwindelerregende, nicht mehr plausible, Höhen. Dieser Umstand kann zu unschönen Effekten bei der Heizungs- bzw. Haussteuerung führen.

Eine Anpassung an der "Maske" für die ODER Bit-Operation löst dieses Problem. Anbei das korrigierte Script zur freien Verwendung.

$hexValue = '8603';
$intValue = hexdec($hexValue);
$floatValue = ($intValue & 0x07ff);

if (($intValue & 0x08000) != 0)
{
   $floatValue = $floatValue | 0xfffffffffffff800;
   $floatValue = $floatValue *-1;
}

$floatValue = $floatValue << (($intValue & 0x07800) >> 11);

if (($intValue & 0x08000) != 0)
{
   $floatValue = $floatValue * -1;
}

var_dump($floatValue/100);

Der Code ist für alle 2byte EIS5/DTP9 Datenpunkte gültig und kann auch für die Umrechnung von z.B. Lux, m/s, Spannung, etc. verwendet werden.