Data model simplification

This commit is contained in:
2020-07-30 19:31:50 -04:00
parent e810c4a240
commit 6514eb7c76
16 changed files with 75 additions and 40 deletions

View File

@@ -129,7 +129,7 @@ namespace ChrisKaczor.HomeMonitor.Weather.Service.Data
switch (weatherValueType)
{
case WeatherValueType.LightLevel:
query = query.Replace("@Value", "LightLevel / 3.3");
query = query.Replace("@Value", "LightLevel / 3.3 * 100");
break;
default:
query = query.Replace("@Value", weatherValueType.ToString());

View File

@@ -2,10 +2,9 @@ SELECT Timestamp,
WindDirection,
WindSpeed,
Humidity,
HumidityTemperature,
Rain,
Pressure,
PressureTemperature,
PressureTemperature AS Temperature,
BatteryLevel,
LightLevel,
Latitude,

View File

@@ -1,7 +1,6 @@
SELECT Bucket,
AVG(HumidityTemperature) AS AverageHumidityTemperature,
AVG(Humidity) AS AverageHumidity,
AVG(PressureTemperature) AS AveragePressureTemperature,
AVG(Temperature) AS AverageTemperature,
AVG(Pressure) AS AveragePressure,
AVG(LightLevel) AS AverageLightLevel,
SUM(Rain) AS RainTotal
@@ -9,11 +8,10 @@ FROM (
SELECT CAST(FORMAT(Timestamp, 'yyyy-MM-ddTHH:') +
RIGHT('00' + CAST(DATEPART(MINUTE, Timestamp) / @BucketMinutes * @BucketMinutes AS VARCHAR), 2)
+ ':00+00:00' AS DATETIMEOFFSET) AS Bucket,
HumidityTemperature,
Humidity,
PressureTemperature,
PressureTemperature AS Temperature,
Pressure,
LightLevel / 3.3 AS LightLevel,
LightLevel / 3.3 * 100 AS LightLevel,
Rain
FROM Reading
WHERE Timestamp BETWEEN @Start AND @End

View File

@@ -2,10 +2,9 @@ SELECT TOP 1 Timestamp,
WindDirection,
WindSpeed,
Humidity,
HumidityTemperature,
Rain,
Pressure,
PressureTemperature,
PressureTemperature AS Temperature,
BatteryLevel,
LightLevel,
Latitude,

View File

@@ -8,11 +8,9 @@ namespace ChrisKaczor.HomeMonitor.Weather.Service.Models
{
public DateTimeOffset Bucket { get; set; }
public decimal AverageHumidityTemperature { get; set; }
public decimal AverageHumidity { get; set; }
public decimal AveragePressureTemperature { get; set; }
public decimal AverageTemperature { get; set; }
public decimal AveragePressure { get; set; }

View File

@@ -1,17 +1,52 @@
using System;
using System.Linq;
using ChrisKaczor.HomeMonitor.Weather.Models;
using ChrisKaczor.HomeMonitor.Weather.Service.Data;
using DecimalMath;
using JetBrains.Annotations;
using MathNet.Numerics;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace ChrisKaczor.HomeMonitor.Weather.Service.Models
{
[PublicAPI]
public class WeatherUpdate : WeatherMessage
public class WeatherUpdate
{
private readonly Database _database;
[JsonConverter(typeof(StringEnumConverter))]
public MessageType Type { get; set; }
public string Message { get; set; }
public DateTimeOffset Timestamp { get; set; }
[JsonConverter(typeof(StringEnumConverter))]
public WindDirection WindDirection { get; set; }
public decimal WindSpeed { get; set; }
public decimal Humidity { get; set; }
public decimal Rain { get; set; }
public decimal Pressure { get; set; }
public decimal Temperature { get; set; }
public decimal LightLevel { get; set; }
public decimal Latitude { get; set; }
public decimal Longitude { get; set; }
public decimal Altitude { get; set; }
public int SatelliteCount { get; set; }
public DateTimeOffset GpsTimestamp { get; set; }
public decimal? WindChill { get; set; }
public decimal? HeatIndex { get; set; }
@@ -32,12 +67,10 @@ namespace ChrisKaczor.HomeMonitor.Weather.Service.Models
WindDirection = weatherMessage.WindDirection;
WindSpeed = weatherMessage.WindSpeed;
Humidity = weatherMessage.Humidity;
HumidityTemperature = weatherMessage.HumidityTemperature;
Rain = weatherMessage.Rain;
Pressure = weatherMessage.Pressure;
PressureTemperature = weatherMessage.PressureTemperature;
BatteryLevel = weatherMessage.BatteryLevel;
LightLevel = weatherMessage.LightLevel;
Temperature = weatherMessage.PressureTemperature;
LightLevel = weatherMessage.LightLevel / 3.3m * 100;
Latitude = weatherMessage.Latitude;
Longitude = weatherMessage.Longitude;
Altitude = weatherMessage.Altitude;
@@ -70,7 +103,7 @@ namespace ChrisKaczor.HomeMonitor.Weather.Service.Models
private void CalculateHeatIndex()
{
var temperature = PressureTemperature;
var temperature = Temperature;
var humidity = Humidity;
if (temperature.IsBetween(80, 100) && humidity.IsBetween(40, 100))
@@ -83,7 +116,7 @@ namespace ChrisKaczor.HomeMonitor.Weather.Service.Models
private void CalculateWindChill()
{
var temperatureInF = PressureTemperature;
var temperatureInF = Temperature;
var windSpeedInMph = WindSpeed;
if (temperatureInF.IsBetween(-45, 45) && windSpeedInMph.IsBetween(3, 60))
@@ -95,7 +128,7 @@ namespace ChrisKaczor.HomeMonitor.Weather.Service.Models
private void CalculateDewPoint()
{
var relativeHumidity = Humidity;
var temperatureInF = PressureTemperature;
var temperatureInF = Temperature;
var temperatureInC = (temperatureInF - 32.0m) * 5.0m / 9.0m;