Files
WeatherService/Devices/HumidityDevice.cs
2014-05-01 16:41:24 -04:00

72 lines
2.0 KiB
C#

using System.Runtime.Serialization;
using OneWireAPI;
using WeatherService.Values;
namespace WeatherService.Devices
{
[DataContract]
public class HumidityDevice : DeviceBase
{
#region Member variables
private readonly Value _temperatureValue;
private readonly Value _humidityValue;
#endregion
#region Constructor
public HumidityDevice(Session session, owDevice device) : base(session, device, DeviceType.Humidity)
{
_temperatureValue = new Value(WeatherValueType.Temperature, this);
_humidityValue = new Value(WeatherValueType.Humidity, this);
_valueList.Add(WeatherValueType.Temperature, _temperatureValue);
_valueList.Add(WeatherValueType.Humidity, _humidityValue);
}
#endregion
#region Internal methods
internal override void RefreshCache()
{
_temperatureValue.SetValue(ReadTemperature());
_humidityValue.SetValue(ReadHumidity());
base.RefreshCache();
}
internal double ReadTemperature()
{
// Cast the device to its specific type
owDeviceFamily26 oDevice = (owDeviceFamily26) _device;
// Return the temperature from the device
return oDevice.GetTemperature();
}
internal double ReadHumidity()
{
// Cast the device to its specific type
owDeviceFamily26 oDevice = (owDeviceFamily26) _device;
// Get the supply voltage
double dSupplyVoltage = oDevice.GetSupplyVoltage();
// Get the output voltage
double dOutputVoltage = oDevice.GetOutputVoltage();
// Get the temperature
double dTemperature = oDevice.GetTemperature();
// Calculate the humidity
double dHumidity = (((dOutputVoltage / dSupplyVoltage) - 0.16F) / 0.0062F) / (1.0546F - 0.00216F * dTemperature);
// Return the result
return dHumidity;
}
#endregion
}
}