public static SensorValue Parse(byte[] message)
{
SensorValue sensor = new SensorValue();
//
ZWaveValue zvalue = ZWaveValue.ExtractValueFromBytes(message, 11);
//
byte key = message[9];
if (key == (byte)ZWaveSensorParameter.Temperature)
{
sensor.Parameter = ZWaveSensorParameter.Temperature;
// convert from Fahrenheit to Celsius if needed
sensor.Value = (zvalue.Scale == (int)ZWaveTemperatureScaleType.Fahrenheit ? SensorValue.FahrenheitToCelsius(zvalue.Value) : zvalue.Value);
sensor.EventType = EventParameter.SensorTemperature;
}
else if (key == (byte)ZWaveSensorParameter.GeneralPurposeValue)
{
sensor.Parameter = ZWaveSensorParameter.GeneralPurposeValue;
sensor.Value = zvalue.Value;
sensor.EventType = EventParameter.Generic;
}
else if (key == (byte)ZWaveSensorParameter.Luminance)
{
sensor.Parameter = ZWaveSensorParameter.Luminance;
sensor.Value = zvalue.Value;
sensor.EventType = EventParameter.SensorLuminance;
}
else if (key == (byte)ZWaveSensorParameter.RelativeHumidity)
{
sensor.Parameter = ZWaveSensorParameter.RelativeHumidity;
sensor.Value = zvalue.Value;
sensor.EventType = EventParameter.SensorHumidity;
}
else if (key == (byte)ZWaveSensorParameter.Power)
{
//sensor.Value = BitConverter.ToUInt16(new byte[2] { message[12], message[11] }, 0) / 10D;
//sensor.Value = ((double)int.Parse(
// message[12].ToString("X2") + message[13].ToString("X2") + message[14].ToString("X2"),
// System.Globalization.NumberStyles.HexNumber
// )) / 1000D;
// TODO: this might be very buggy.... to be tested
EnergyValue energy = EnergyValue.Parse(message);
sensor.Parameter = ZWaveSensorParameter.Power;
sensor.Value = energy.Value;
sensor.EventType = EventParameter.MeterPower;
}
else
{
sensor.Value = zvalue.Value;
}
//
return(sensor);
}