protected override void OnCharacteristicValueChanged(GattCharacteristic sender, GattValueChangedEventArgs eventArgs) { if (sender.Uuid == HumidityCharacteristicUuid) { if (_humidityValueChanged != null) { uint dataLength = eventArgs.CharacteristicValue.Length; using (DataReader reader = DataReader.FromBuffer(eventArgs.CharacteristicValue)) { if (dataLength == 4) { ushort temp = ReadBigEndianU16bit(reader); ushort humidity = ReadBigEndianU16bit(reader); var measurement = new HumidityMeasurement(); if (Version == 1) { // calculate temperature [deg C] measurement.Temperature = -46.85 + (175.72 * (double)temp) / 65536.0; humidity &= 0xFFFC; // clear bits [1..0] (status bits) measurement.Humidity = -6.0 + (125.0 * (double)humidity) / 65536.0; // RH= -6 + 125 * SRH/2^16 } else { measurement.Temperature = ((double)temp / 65536.0) * 165 - 40; measurement.Humidity = ((double)humidity / 65536.0) * 100; } measurement.SetRawHumidity(humidity); OnHumidityMeasurementValueChanged(new HumidityMeasurementEventArgs(measurement, eventArgs.Timestamp)); } } } } }
public HumidityMeasurementEventArgs(HumidityMeasurement measurement, DateTimeOffset timestamp) { Measurement = measurement; Timestamp = timestamp; }