diff --git a/internal/dao/sensor.go b/internal/dao/sensor.go
index 220b2ab..b11e9cd 100644
--- a/internal/dao/sensor.go
+++ b/internal/dao/sensor.go
@@ -249,3 +249,56 @@ func (dao *SensorDAO) GetLatestSensorData() (*model.SensorData, error) {
return &data, nil
}
+
+// GetRawData 获取指定时间范围内的原始传感器数据
+func (dao *SensorDAO) GetRawData(start, end time.Time) ([]model.AggregatedData, error) {
+ query := `
+ SELECT
+ timestamp,
+ temperature/10 AS temperature,
+ rainfall,
+ humidity/10 AS humidity,
+ wind_speed/100 AS wind_speed,
+ atm_pressure/10 AS atm_pressure,
+ solar_radiation
+ FROM sensor_data
+ WHERE timestamp BETWEEN ? AND ?
+ ORDER BY timestamp DESC
+ `
+
+ // 执行查询
+ rows, err := dao.db.Query(query, start, end)
+ if err != nil {
+ logger.Logger.Printf("查询原始数据失败: %v (开始=%s, 结束=%s)",
+ err, start.Format(time.RFC3339), end.Format(time.RFC3339))
+ return nil, err
+ }
+ defer rows.Close()
+
+ var result []model.AggregatedData
+ for rows.Next() {
+ var data model.AggregatedData
+ err := rows.Scan(
+ &data.Timestamp,
+ &data.AvgTemperature,
+ &data.Rainfall,
+ &data.AvgHumidity,
+ &data.AvgWindSpeed,
+ &data.AvgAtmPressure,
+ &data.AvgSolarRadiation)
+ if err != nil {
+ logger.Logger.Printf("扫描数据行失败: %v", err)
+ continue
+ }
+ result = append(result, data)
+ }
+
+ // 检查是否有游标错误
+ if err = rows.Err(); err != nil {
+ logger.Logger.Printf("查询游标错误: %v", err)
+ return nil, err
+ }
+
+ logger.Logger.Printf("原始数据查询成功: 返回%d条记录", len(result))
+ return result, nil
+}
diff --git a/internal/handler/sensor.go b/internal/handler/sensor.go
index dacab1b..e90fb7e 100644
--- a/internal/handler/sensor.go
+++ b/internal/handler/sensor.go
@@ -7,6 +7,7 @@ import (
"time"
"go_rain_dtu/internal/dao"
+ "go_rain_dtu/internal/model"
"go_rain_dtu/internal/tcp"
"go_rain_dtu/pkg/logger"
)
@@ -39,9 +40,18 @@ func (h *SensorHandler) GetAggregatedData(w http.ResponseWriter, r *http.Request
}
}
- data, err := h.dao.GetAggregatedData(startTime, endTime, interval)
+ var data []model.AggregatedData
+ var err error
+
+ // 判断是否获取原始数据
+ if interval == "raw" {
+ data, err = h.dao.GetRawData(startTime, endTime)
+ } else {
+ data, err = h.dao.GetAggregatedData(startTime, endTime, interval)
+ }
+
if err != nil {
- logger.Logger.Printf("获取聚合数据失败: %v", err)
+ logger.Logger.Printf("获取数据失败: %v", err)
http.Error(w, "服务器内部错误", http.StatusInternalServerError)
return
}
@@ -112,10 +122,19 @@ func (h *SensorHandler) GetLatestData(w http.ResponseWriter, r *http.Request) {
}
}
- // 查询数据库获取最新数据
- data, err := h.dao.GetAggregatedData(startTime, endTime, interval)
+ // 查询数据库获取数据
+ var data []model.AggregatedData
+ var err error
+
+ // 判断是否获取原始数据
+ if interval == "raw" {
+ data, err = h.dao.GetRawData(startTime, endTime)
+ } else {
+ data, err = h.dao.GetAggregatedData(startTime, endTime, interval)
+ }
+
if err != nil {
- logger.Logger.Printf("获取最新聚合数据失败: %v", err)
+ logger.Logger.Printf("获取数据失败: %v", err)
http.Error(w, "服务器内部错误", http.StatusInternalServerError)
return
}
diff --git a/static/index.html b/static/index.html
index 3ca48a4..36da218 100644
--- a/static/index.html
+++ b/static/index.html
@@ -1,691 +1,680 @@
-
-
-
-
-
- 雨量计数据
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- | 时间 |
- 降雨量(mm) |
- 温度(℃) |
- 湿度(%) |
- 风速(m/s) |
- 大气压(kPa) |
- 太阳辐射(W/m²) |
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+ 雨量计数据
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | 时间 |
+ 降雨量(mm) |
+ 温度(℃) |
+ 湿度(%) |
+ 风速(m/s) |
+ 大气压(kPa) |
+ 太阳辐射(W/m²) |
+
+
+
+
+
+
+
+
+
\ No newline at end of file