diff --git a/SmartAquaViewer/Model/CCTVInfo.cs b/SmartAquaViewer/Model/CCTVInfo.cs
new file mode 100644
index 0000000..11fd0ef
--- /dev/null
+++ b/SmartAquaViewer/Model/CCTVInfo.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SmartAquaViewer.Model
+{
+ public class CCTVInfo
+ {
+ public string? DeviceId { get; set; }
+ public string? DeviceName { get; set; }
+ public string? RtspUrl { get; set; }
+ public string? Status { get; set; }
+ }
+}
diff --git a/SmartAquaViewer/View/CCTVView.xaml b/SmartAquaViewer/View/CCTVView.xaml
index 269d9c1..575eb8b 100644
--- a/SmartAquaViewer/View/CCTVView.xaml
+++ b/SmartAquaViewer/View/CCTVView.xaml
@@ -6,11 +6,16 @@
xmlns:local="clr-namespace:SmartAquaViewer.View"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SmartAquaViewer/View/EnegyView.xaml b/SmartAquaViewer/View/EnegyView.xaml
index bc08401..1276688 100644
--- a/SmartAquaViewer/View/EnegyView.xaml
+++ b/SmartAquaViewer/View/EnegyView.xaml
@@ -22,14 +22,69 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
WaterQualityList { get; } = new List();
+
+ private int _columnCount;
+ public int ColumnCount
+ {
+ get => _columnCount;
+ set
+ {
+ if (_columnCount != value)
+ {
+ _columnCount = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ private int _rowCount;
+ public int RowCount
+ {
+ get => _rowCount;
+ set
+ {
+ if (_rowCount != value)
+ {
+ _rowCount = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
public CCTVViewModel()
{
+ ColumnCount = 4; // Default value
+ RowCount = 2; // Default value
+ WaterQualityList = Datas.GetWaterQualityVO().Take(5).ToList();
}
public event PropertyChangedEventHandler? PropertyChanged;
diff --git a/SmartAquaViewer/ViewModel/EnergyViewModel.cs b/SmartAquaViewer/ViewModel/EnergyViewModel.cs
index 157d6d0..a08e950 100644
--- a/SmartAquaViewer/ViewModel/EnergyViewModel.cs
+++ b/SmartAquaViewer/ViewModel/EnergyViewModel.cs
@@ -5,6 +5,7 @@ using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
+using OxyPlot.Axes;
using SmartAquaViewer.DataAnalysis;
using SmartAquaViewer.Model;
@@ -13,9 +14,164 @@ namespace SmartAquaViewer.ViewModel
public class EnergyViewModel : INotifyPropertyChanged
{
public List WaterQualityList { get; set; }
+
+ private double _totalEnergy;
+ public double TotalEnergy
+ {
+ get => _totalEnergy;
+ set
+ {
+ if (_totalEnergy != value)
+ {
+ _totalEnergy = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ private double _totalSandFilterEnergy;
+ public double TotalSandFilterEnergy
+ {
+ get => _totalSandFilterEnergy;
+ set
+ {
+ if (_totalSandFilterEnergy != value)
+ {
+ _totalSandFilterEnergy = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ private double _totalCirculationPumpEnergy;
+ public double TotalCirculationPumpEnergy
+ {
+ get => _totalCirculationPumpEnergy;
+ set
+ {
+ if (_totalCirculationPumpEnergy != value)
+ {
+ _totalCirculationPumpEnergy = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ private double _totalHeatPumpEnergy;
+ public double TotalHeatPumpEnergy
+ {
+ get => _totalHeatPumpEnergy;
+ set
+ {
+ if (_totalHeatPumpEnergy != value)
+ {
+ _totalHeatPumpEnergy = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ private double _totalAirBlowerEnergy;
+ public double TotalAirBlowerEnergy
+ {
+ get => _totalAirBlowerEnergy;
+ set
+ {
+ if (_totalAirBlowerEnergy != value)
+ {
+ _totalAirBlowerEnergy = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ private double _totalOzoneGeneratorEnergy;
+ public double TotalOzoneGeneratorEnergy
+ {
+ get => _totalOzoneGeneratorEnergy;
+ set
+ {
+ if (_totalOzoneGeneratorEnergy != value)
+ {
+ _totalOzoneGeneratorEnergy = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ private double _totalUVSterilizerEnergy;
+ public double TotalUVSterilizerEnergy
+ {
+ get => _totalUVSterilizerEnergy;
+ set
+ {
+ if (_totalUVSterilizerEnergy != value)
+ {
+ _totalUVSterilizerEnergy = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ private double _totalOzoneDissolverEnergy;
+ public double TotalOzoneDissolverEnergy
+ {
+ get => _totalOzoneDissolverEnergy;
+ set
+ {
+ if (_totalOzoneDissolverEnergy != value)
+ {
+ _totalOzoneDissolverEnergy = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ private double _totalExcessOzoneDestroyerEnergy;
+ public double TotalExcessOzoneDestroyerEnergy
+ {
+ get => _totalExcessOzoneDestroyerEnergy;
+ set
+ {
+ if (_totalExcessOzoneDestroyerEnergy != value)
+ {
+ _totalExcessOzoneDestroyerEnergy = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+
public EnergyViewModel()
{
WaterQualityList = Datas.GetWaterQualityVO();
+
+ TotalSandFilterEnergy = WaterQualityList.Sum(vo => ResolveEnergyField(vo, "Filtering.SandFilterEnergy") ?? 0);
+ TotalCirculationPumpEnergy = WaterQualityList.Sum(vo => ResolveEnergyField(vo, "Filtering.CirculationPumpEnergy") ?? 0);
+ TotalHeatPumpEnergy = WaterQualityList.Sum(vo => ResolveEnergyField(vo, "Filtering.HeatPumpEnergy") ?? 0);
+ TotalAirBlowerEnergy = WaterQualityList.Sum(vo => ResolveEnergyField(vo, "Filtering.AirBlowerEnergy") ?? 0);
+ TotalOzoneGeneratorEnergy = WaterQualityList.Sum(vo => ResolveEnergyField(vo, "Sterilizing.OzoneGeneratorEnergy") ?? 0);
+ TotalUVSterilizerEnergy = WaterQualityList.Sum(vo => ResolveEnergyField(vo, "Sterilizing.UVSterilizerEnergy") ?? 0);
+ TotalOzoneDissolverEnergy = WaterQualityList.Sum(vo => ResolveEnergyField(vo, "Sterilizing.OzoneDissolverEnergy") ?? 0);
+ TotalExcessOzoneDestroyerEnergy = WaterQualityList.Sum(vo => ResolveEnergyField(vo, "Sterilizing.ExcessOzoneDestroyerEnergy") ?? 0);
+ TotalEnergy = WaterQualityList.Sum(vo => ResolveEnergyField(vo, "TotalEnergy") ?? 0);
+ }
+
+ private double? ResolveEnergyField(WaterQualityVO vo, string fieldName)
+ {
+ return fieldName switch
+ {
+ "Filtering.SandFilterEnergy" => vo.Filtering.SandFilterEnergy,
+ "Filtering.CirculationPumpEnergy" => vo.Filtering.CirculationPumpEnergy,
+ "Filtering.HeatPumpEnergy" => vo.Filtering.HeatPumpEnergy,
+ "Filtering.AirBlowerEnergy" => vo.Filtering.AirBlowerEnergy,
+ "Sterilizing.OzoneGeneratorEnergy" => vo.Sterilizing.OzoneGeneratorEnergy,
+ "Sterilizing.UVSterilizerEnergy" => vo.Sterilizing.UVSterilizerEnergy,
+ "Sterilizing.OzoneDissolverEnergy" => vo.Sterilizing.OzoneDissolverEnergy,
+ "Sterilizing.ExcessOzoneDestroyerEnergy" => vo.Sterilizing.ExcessOzoneDestroyerEnergy,
+ "TotalEnergy" => vo.TotalEnergy,
+ _ => null
+ };
}
public event PropertyChangedEventHandler? PropertyChanged;
diff --git a/SmartAquaViewer/ViewModel/MonitoringViewModel.cs b/SmartAquaViewer/ViewModel/MonitoringViewModel.cs
index 10f78dd..53b458d 100644
--- a/SmartAquaViewer/ViewModel/MonitoringViewModel.cs
+++ b/SmartAquaViewer/ViewModel/MonitoringViewModel.cs
@@ -243,7 +243,6 @@ namespace SmartAquaViewer.ViewModel
BtnVisibilityUp = Visibility.Collapsed;
WaterQualityList = WaterQualityVO.GetSampleData(new DateTime(2025, 8, 1), new DateTime(2025, 8, 1), 10);
- var list = Test.GetSampleData(new DateTime(2025, 8, 1), new DateTime(2025, 8, 1), 24);
Datas.SetWaterQualityVO(WaterQualityList);
TankGroups = WaterQualityList