Hallo, ich sitze gerade daran Temperaturwerte von einem KNX-System mit einem Rechner auszulesen. Die Kommunikation läuft über einen IP-KNX-Router. Das Programm schreibe ich in C#. Die Byte-Daten bekomme ich. Meine Frage ich nun, wie ich die beiden empfangenen Bytes in eine Dezimalwert umrechne. Die von KNX verwendeten Datentypen sind hier beschrieben: http://www.knx.org/fileadmin/downloads/03%20-%20KNX%20Standard/KNX%20Standard%20Public%20Documents/03_07_02%20Datapoint%20Types%20v1.07.00%20AS.zip Bei den Temperaturwerten handelt es sich um “2-Octet Float Value”, zu finden auf Seite 32. Hier mal ein Beispiel vom Außentemperaturfühler:
1 | MSB-Byte: 0x87 0b10000111 |
2 | LSB-Byte: 0x29 0b00101001 |
3 | |
4 | => 0b1000011100101001 |
5 | MEEEEMMMMMMMMMMM
|
6 | |
7 | -> Mantisse: 0b11100101001 = -1833(dezimal) |
8 | -> Exponent: 0b0000 = 0 |
9 | |
10 | Temperatur = (0.01 * Mantisse) * 2^Exponent |
11 | = (0.01 * (-1833)) * 2^0 |
12 | = -18,33 |
Momentan liegen die Außentemperaturen aber nur knapp unter 0°C. Demzufolge wären -1,833°C passender. Sieht jemand wo mein Fehler ist? Danke