In den Telegrammen steht natürlich ein Wert von 0–255
. So funktioniert EnOcean. Hier muss also auf 0–70
skaliert werden. Dies geschieht aber ohne unser zutun in der von EnOcean bereitgestellten Middleware. So das wir von dieser (zumindest sollten wir das) Werte von 0–70
in m/s
erhalten. Die Rohdaten (0-255
) sehen wir also gar nicht.
Die Skalierung findet nach folgender Formel statt:
float ScaleFromRAW(uint32_t rawValue, uint32_t rangeMin, uint32_t rangeMax, float scaleMin, float scaleMax)
{
float q = (scaleMax - scaleMin) / ((float) rangeMax - (float) rangeMin);
float scaledValue = q * ((float) rawValue - (float) rangeMin) + scaleMin;
return scaledValue;
}
Gerechnet wird mit diesen Werten:
// exist ,bitoffs,bitsize,rangeMin,rangeMax,scaleMin, scaleMax,type;
{ true, 16, 8, 0, 255, 0, 70.0, S_VELOCITY, 0 } //Wind speed
In meinen Augen ist diese Rechnung fehlerfrei. Demzufolge erhält homee Werte von 0-70
in m/s
. Diese werden anschließend in km/h
umgerechnet durch eine Multiplikation mit 3.6
. Auch bei dieser Rechnung sehe ich keine Fehler.
Warum also vermeintlich nur ganzzahlige m/s
Werte in homee ankommen kann ich mir nur so erklären:
Das Gerät schickt nur ganzzahlige Sensorwerte. Das heißt, dass lediglich Werte wie 0x03 (3)
, 0x07 (7)
, 0x0A(10)
, … über den Funk ankommen.
@anon11314990 Die Umrechnung in km/h
findet aus exakt den Gründen statt die @SmartHomer genannt hat.