diff --git a/SmartAquaViewer/DataAnalisys/WaterQualityVO.cs b/SmartAquaViewer/DataAnalisys/WaterQualityVO.cs
index f5cccf3..140997e 100644
--- a/SmartAquaViewer/DataAnalisys/WaterQualityVO.cs
+++ b/SmartAquaViewer/DataAnalisys/WaterQualityVO.cs
@@ -21,15 +21,22 @@ namespace SmartAquaViewer.DataAnalysis
/// 저수조
///
public WaterTank Tank { get; set; } = new();
+
///
/// 여과 시스템
///
public FilteringSystem Filtering { get; set; } = new();
+
///
/// 살균 시스템
///
public SterilizingSystem Sterilizing { get; set; } = new();
+ ///
+ /// 총 전력 소비 (킬로와트, kW)
+ ///
+ public double TotalEnergy { get; set; }
+
public WaterQualityVO() { }
public WaterQualityVO(DateTime RecordedTime, WaterTank tank, FilteringSystem filtering, SterilizingSystem sterilizing)
@@ -40,6 +47,20 @@ namespace SmartAquaViewer.DataAnalysis
Sterilizing = sterilizing;
}
+ public double CalculateTotalEnergy()
+ {
+ double total = 0;
+ total += Filtering.SandFilterEnergy;
+ total += Filtering.CirculationPumpEnergy;
+ total += Filtering.HeatPumpEnergy;
+ total += Filtering.AirBlowerEnergy;
+ total += Sterilizing.OzoneGeneratorEnergy;
+ total += Sterilizing.UVSterilizerEnergy;
+ total += Sterilizing.OzoneDissolverEnergy;
+ total += Sterilizing.ExcessOzoneDestroyerEnergy;
+ return Math.Round(total, 2);
+ }
+
///
/// 샘플 데이터 리스트 생성
///
@@ -48,6 +69,18 @@ namespace SmartAquaViewer.DataAnalysis
var list = new List();
var rand = new Random();
+ double CalculateTotalEnergy(WaterQualityVO vo)
+ {
+ return vo.Filtering.SandFilterEnergy +
+ vo.Filtering.CirculationPumpEnergy +
+ vo.Filtering.HeatPumpEnergy +
+ vo.Filtering.AirBlowerEnergy +
+ vo.Sterilizing.OzoneGeneratorEnergy +
+ vo.Sterilizing.UVSterilizerEnergy +
+ vo.Sterilizing.OzoneDissolverEnergy +
+ vo.Sterilizing.ExcessOzoneDestroyerEnergy;
+ }
+
if (totalRowsCount <= 0) return list;
double totalSeconds;
@@ -67,6 +100,7 @@ namespace SmartAquaViewer.DataAnalysis
for (int i = 0; i < totalRowsCount; i++)
{
DateTime ts = start.AddSeconds(stepSeconds * i);
+
var vo = new WaterQualityVO
{
@@ -81,27 +115,36 @@ namespace SmartAquaViewer.DataAnalysis
),
Filtering = new FilteringSystem(
sandFilterPower: rand.Next(0, 2) == 1,
+ sandFilterEnergy: Math.Round(rand.NextDouble() * 2 + 0.5, 2),
sumpPH: Math.Round(rand.NextDouble() * 2 + 6, 2),
sumpORP: Math.Round(rand.NextDouble() * 200 + 100, 2),
sumpWaterLevel: Math.Round(rand.NextDouble() * 2 + 1, 2),
sumpFlowRate: Math.Round(rand.NextDouble() * 5 + 1, 2),
sumpTemperature: Math.Round(rand.NextDouble() * 10 + 15, 2),
circulationPumpPower: rand.Next(0, 2) == 1,
+ circulationPumpEnergy: Math.Round(rand.NextDouble() * 2 + 0.5, 2),
inverterControllerStatus: rand.Next(0, 2) == 1 ? "Normal" : "Error",
flowRate: Math.Round(rand.NextDouble() * 5 + 1, 2),
heatPumpPower: rand.Next(0, 2) == 1,
heatPumpTemperature: Math.Round(rand.NextDouble() * 10 + 15, 2),
- airBlowerPower: rand.Next(0, 2) == 1
+ heatPumpEnergy: Math.Round(rand.NextDouble() * 2 + 0.5, 2),
+ airBlowerPower: rand.Next(0, 2) == 1,
+ airBlowerEnergy: Math.Round(rand.NextDouble() * 2 + 0.5, 2)
),
Sterilizing = new SterilizingSystem(
ozoneGeneratorPower: rand.Next(0, 2) == 1,
+ ozoneGeneratorEnergy: Math.Round(rand.NextDouble() * 2 + 0.5, 2),
uvSterilizerId: "UV" + rand.Next(1, 100),
uvSterilizerPower: rand.Next(0, 2) == 1,
+ uvSterilizerEnergy: Math.Round(rand.NextDouble() * 2 + 0.5, 2),
ozoneDissolverPower: rand.Next(0, 2) == 1,
ozoneDissolverPressure: Math.Round(rand.NextDouble() * 100 + 50, 2),
- excessOzoneDestroyerPower: rand.Next(0, 2) == 1
- )
+ ozoneDissolverEnergy: Math.Round(rand.NextDouble() * 2 + 0.5, 2),
+ excessOzoneDestroyerPower: rand.Next(0, 2) == 1,
+ excessOzoneDestroyerEnergy: Math.Round(rand.NextDouble() * 2 + 0.5, 2)
+ ),
};
+ vo.TotalEnergy = CalculateTotalEnergy(vo);
list.Add(vo);
}
@@ -167,6 +210,12 @@ namespace SmartAquaViewer.DataAnalysis
[Column("filter_sand_filter_power")]
public bool SandFilterPower { get; set; }
+ ///
+ /// 모래여과기 전력 (kW)
+ ///
+ [Column("filter_sand_filter_energy")]
+ public double SandFilterEnergy { get; set; }
+
///
/// 섬프탱크 pH (산도)
///
@@ -203,6 +252,12 @@ namespace SmartAquaViewer.DataAnalysis
[Column("filter_circulation_pump_power")]
public bool CirculationPumpPower { get; set; }
+ ///
+ /// 순환펌프 전력 (kW)
+ ///
+ [Column("filter_circulation_pump_energy")]
+ public double CirculationPumpEnergy { get; set; }
+
///
/// 인버터 제어기 상태
///
@@ -227,31 +282,48 @@ namespace SmartAquaViewer.DataAnalysis
[Column("filter_heat_pump_temperature")]
public double HeatPumpTemperature { get; set; }
+ ///
+ /// 히트펌프 전력 (kW)
+ ///
+ [Column("filter_heat_pump_energy")]
+ public double HeatPumpEnergy { get; set; }
+
///
/// 에어브로와 전원 (true: ON, false: OFF)
///
[Column("filter_air_blower_power")]
public bool AirBlowerPower { get; set; }
+ ///
+ /// 에어브로와 전력 (kW)
+ ///
+ [Column("filter_air_blower_energy")]
+ public double AirBlowerEnergy { get; set; }
+
public FilteringSystem() { }
public FilteringSystem(
- bool sandFilterPower, double sumpPH, double sumpORP, double sumpWaterLevel, double sumpFlowRate, double sumpTemperature,
- bool circulationPumpPower, string? inverterControllerStatus, double flowRate,
- bool heatPumpPower, double heatPumpTemperature, bool airBlowerPower)
+ bool sandFilterPower, double sandFilterEnergy,
+ double sumpPH, double sumpORP, double sumpWaterLevel, double sumpFlowRate, double sumpTemperature,
+ bool circulationPumpPower, double circulationPumpEnergy, string? inverterControllerStatus, double flowRate,
+ bool heatPumpPower, double heatPumpTemperature, double heatPumpEnergy, bool airBlowerPower, double airBlowerEnergy)
{
SandFilterPower = sandFilterPower;
+ SandFilterEnergy = sandFilterEnergy;
SumpPH = sumpPH;
SumpORP = sumpORP;
SumpWaterLevel = sumpWaterLevel;
SumpFlowRate = sumpFlowRate;
SumpTemperature = sumpTemperature;
CirculationPumpPower = circulationPumpPower;
+ CirculationPumpEnergy = circulationPumpEnergy;
InverterControllerStatus = inverterControllerStatus;
FlowRate = flowRate;
HeatPumpPower = heatPumpPower;
HeatPumpTemperature = heatPumpTemperature;
+ HeatPumpEnergy = heatPumpEnergy;
AirBlowerPower = airBlowerPower;
+ AirBlowerEnergy = airBlowerEnergy;
}
}
@@ -264,6 +336,12 @@ namespace SmartAquaViewer.DataAnalysis
[Column("ster_ozone_generator_power")]
public bool OzoneGeneratorPower { get; set; }
+ ///
+ /// 오존 발생기 전력 (kW)
+ ///
+ [Column("ster_ozone_generator_energy")]
+ public double OzoneGeneratorEnergy { get; set; }
+
///
/// 자외선 살균기 ID
///
@@ -276,6 +354,12 @@ namespace SmartAquaViewer.DataAnalysis
[Column("ster_uv_sterilizer_power")]
public bool UVSterilizerPower { get; set; }
+ ///
+ /// 자외선 살균기 전력 (kW)
+ ///
+ [Column("ster_uv_sterilizer_energy")]
+ public double UVSterilizerEnergy { get; set; }
+
///
/// 오존용해장치 전원 (true: ON, false: OFF)
///
@@ -288,24 +372,42 @@ namespace SmartAquaViewer.DataAnalysis
[Column("ster_ozone_dissolver_pressure")]
public double OzoneDissolverPressure { get; set; }
+ ///
+ /// 오존용해장치 전력 (kW)
+ ///
+ [Column("ster_ozone_dissolver_energy")]
+ public double OzoneDissolverEnergy { get; set; }
+
///
/// 배오존장치 전원 (true: ON, false: OFF)
///
[Column("ster_excess_ozone_destroyer_power")]
public bool ExcessOzoneDestroyerPower { get; set; }
+ ///
+ /// 배오존장치 전력 (kW)
+ ///
+ [Column("ster_excess_ozone_destroyer_energy")]
+ public double ExcessOzoneDestroyerEnergy { get; set; }
+
public SterilizingSystem() { }
public SterilizingSystem(
- bool ozoneGeneratorPower, string uvSterilizerId, bool uvSterilizerPower,
- bool ozoneDissolverPower, double ozoneDissolverPressure, bool excessOzoneDestroyerPower)
+ bool ozoneGeneratorPower, double ozoneGeneratorEnergy,
+ string uvSterilizerId, bool uvSterilizerPower, double uvSterilizerEnergy,
+ bool ozoneDissolverPower, double ozoneDissolverPressure, double ozoneDissolverEnergy,
+ bool excessOzoneDestroyerPower, double excessOzoneDestroyerEnergy)
{
OzoneGeneratorPower = ozoneGeneratorPower;
+ OzoneGeneratorEnergy = ozoneGeneratorEnergy;
UVSterilizerId = uvSterilizerId;
UVSterilizerPower = uvSterilizerPower;
+ UVSterilizerEnergy = uvSterilizerEnergy;
OzoneDissolverPower = ozoneDissolverPower;
OzoneDissolverPressure = ozoneDissolverPressure;
+ OzoneDissolverEnergy = ozoneDissolverEnergy;
ExcessOzoneDestroyerPower = excessOzoneDestroyerPower;
+ ExcessOzoneDestroyerEnergy = excessOzoneDestroyerEnergy;
}
}
}
diff --git a/SmartAquaViewer/View/EnegyView.xaml b/SmartAquaViewer/View/EnegyView.xaml
index 3842f22..2d8d269 100644
--- a/SmartAquaViewer/View/EnegyView.xaml
+++ b/SmartAquaViewer/View/EnegyView.xaml
@@ -9,12 +9,12 @@
-
+
-
+
@@ -24,9 +24,45 @@
-
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SmartAquaViewer/View/MonitoringView.xaml.cs b/SmartAquaViewer/View/MonitoringView.xaml.cs
index 5e8d16d..3ff4e62 100644
--- a/SmartAquaViewer/View/MonitoringView.xaml.cs
+++ b/SmartAquaViewer/View/MonitoringView.xaml.cs
@@ -18,7 +18,6 @@ using SmartAquaViewer.Classes;
using SmartAquaViewer.DataAnalysis;
using SmartAquaViewer.Model;
using SmartAquaViewer.ViewModel;
-using SmartAquaViewer.Model;
namespace SmartAquaViewer.View
{
diff --git a/SmartAquaViewer/ViewModel/EnergyViewModel.cs b/SmartAquaViewer/ViewModel/EnergyViewModel.cs
index 3ac2e56..157d6d0 100644
--- a/SmartAquaViewer/ViewModel/EnergyViewModel.cs
+++ b/SmartAquaViewer/ViewModel/EnergyViewModel.cs
@@ -5,12 +5,18 @@ using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
+using SmartAquaViewer.DataAnalysis;
+using SmartAquaViewer.Model;
namespace SmartAquaViewer.ViewModel
{
public class EnergyViewModel : INotifyPropertyChanged
{
- public EnergyViewModel() { }
+ public List WaterQualityList { get; set; }
+ public EnergyViewModel()
+ {
+ WaterQualityList = Datas.GetWaterQualityVO();
+ }
public event PropertyChangedEventHandler? PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string? name = null)