diff --git a/SmartAquaViewer/DataAnalisys/AquarDataControl.cs b/SmartAquaViewer/DataAnalisys/AquarDataControl.cs
new file mode 100644
index 0000000..52cfb36
--- /dev/null
+++ b/SmartAquaViewer/DataAnalisys/AquarDataControl.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SmartAquaViewer.DataAnalisys
+{
+ internal class AquarDataControl
+ {
+
+
+ }
+
+
+}
diff --git a/SmartAquaViewer/DataAnalisys/WaterQualityVO.cs b/SmartAquaViewer/DataAnalisys/WaterQualityVO.cs
new file mode 100644
index 0000000..1f88c8c
--- /dev/null
+++ b/SmartAquaViewer/DataAnalisys/WaterQualityVO.cs
@@ -0,0 +1,172 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SmartAquaViewer.DataAnalisys
+{
+
+
+ using System;
+
+ public class WaterQualityVO
+ {
+ ///
+ /// 저수조 번호
+ ///
+ public int WaterTankNum { get; set; }
+
+ ///
+ /// Dissolved Oxygen (mg/L)
+ ///
+ public double DO { get; set; }
+
+ ///
+ /// pH (산도)
+ ///
+ public double PH { get; set; }
+
+ ///
+ /// 수온 (°C)
+ ///
+ public double Temperature { get; set; }
+
+ ///
+ /// 수위 (m)
+ ///
+ public double WaterLevel { get; set; }
+
+ ///
+ /// 유량 (m³/s)
+ ///
+ public double FlowRate { get; set; }
+
+ ///
+ /// 전기전도도 (µS/cm)
+ ///
+ public double ElectricalConductivity { get; set; }
+
+ ///
+ /// 탁도 (NTU)
+ ///
+ public double Turbidity { get; set; }
+
+ ///
+ /// 염도 (ppt)
+ ///
+ public double Salinity { get; set; }
+
+ ///
+ /// 산화환원전위 (mV)
+ ///
+ public double ORP { get; set; }
+
+ ///
+ /// 총부유물질 (mg/L)
+ ///
+ public double TSS { get; set; }
+
+ ///
+ /// 총질소 (mg/L)
+ ///
+ public double TotalNitrogen { get; set; }
+
+ ///
+ /// 총인 (mg/L)
+ ///
+ public double TotalPhosphorus { get; set; }
+
+ ///
+ /// 측정 시각
+ ///
+ public DateTime Timestamp { get; set; }
+
+ public WaterQualityVO() { }
+
+ public WaterQualityVO(int waterTankNum, double doValue, double ph, double temperature, double waterLevel, double flowRate,
+ double electricalConductivity, double turbidity, double salinity, double orp,
+ double tss, double totalNitrogen, double totalPhosphorus, DateTime timestamp)
+ {
+ WaterTankNum = waterTankNum;
+ DO = doValue;
+ PH = ph;
+ Temperature = temperature;
+ WaterLevel = waterLevel;
+ FlowRate = flowRate;
+ ElectricalConductivity = electricalConductivity;
+ Turbidity = turbidity;
+ Salinity = salinity;
+ ORP = orp;
+ TSS = tss;
+ TotalNitrogen = totalNitrogen;
+ TotalPhosphorus = totalPhosphorus;
+ Timestamp = timestamp;
+ }
+
+ public override string ToString()
+ {
+ return $"Tank#{WaterTankNum} [{Timestamp}] DO: {DO} mg/L, pH: {PH}, Temp: {Temperature}°C, " +
+ $"Level: {WaterLevel} m, Flow: {FlowRate} m³/s, EC: {ElectricalConductivity} µS/cm, " +
+ $"Turbidity: {Turbidity} NTU, Salinity: {Salinity} ppt, ORP: {ORP} mV, " +
+ $"TSS: {TSS} mg/L, TN: {TotalNitrogen} mg/L, TP: {TotalPhosphorus} mg/L";
+ }
+
+ ///
+ /// 지정 기간 동안 임의의 수질 데이터를 생성합니다.
+ ///
+ public static List GetSampleData(DateTime start, DateTime end, int totalRowsCount)
+ {
+ var list = new List();
+ var rand = new Random();
+
+ if (totalRowsCount <= 0) return list;
+
+ double totalSeconds;
+
+ if (start == end)
+ {
+ // 같은 날짜면 하루(24시간) 기준으로 균등 분할
+ totalSeconds = 24 * 60 * 60; // 86,400초
+ }
+ else
+ {
+ totalSeconds = (end - start).TotalSeconds;
+ if (totalSeconds < 0) throw new ArgumentException("end 날짜는 start 날짜보다 같거나 커야 합니다.");
+ }
+
+ double stepSeconds = totalSeconds / totalRowsCount;
+
+ for (int i = 0; i < totalRowsCount; i++)
+ {
+ DateTime ts = start.AddSeconds(stepSeconds * i);
+
+ var vo = new WaterQualityVO
+ {
+ WaterTankNum = rand.Next(1, 6), // 1~5번 탱크
+ DO = Math.Round(rand.NextDouble() * 5 + 5, 2), // 5~10 mg/L
+ PH = Math.Round(rand.NextDouble() * 2 + 6, 2), // 6~8
+ Temperature = Math.Round(rand.NextDouble() * 10 + 15, 2), // 15~25°C
+ WaterLevel = Math.Round(rand.NextDouble() * 2 + 1, 2), // 1~3 m
+ FlowRate = Math.Round(rand.NextDouble() * 5 + 1, 2), // 1~6 m³/s
+ ElectricalConductivity = Math.Round(rand.NextDouble() * 500 + 200, 2), // 200~700 µS/cm
+ Turbidity = Math.Round(rand.NextDouble() * 5 + 1, 2), // 1~6 NTU
+ Salinity = Math.Round(rand.NextDouble() * 5, 2), // 0~5 ppt
+ ORP = Math.Round(rand.NextDouble() * 200 + 100, 2), // 100~300 mV
+ TSS = Math.Round(rand.NextDouble() * 20 + 5, 2), // 5~25 mg/L
+ TotalNitrogen = Math.Round(rand.NextDouble() * 2 + 0.5, 2), // 0.5~2.5 mg/L
+ TotalPhosphorus = Math.Round(rand.NextDouble() * 0.5 + 0.05, 3), // 0.05~0.55 mg/L
+ Timestamp = ts
+ };
+
+ list.Add(vo);
+ }
+
+ return list;
+ }
+
+ }
+
+
+
+}