diff --git a/internal/tcp/sensor.go b/internal/tcp/sensor.go index a2d10ca..2a9926c 100644 --- a/internal/tcp/sensor.go +++ b/internal/tcp/sensor.go @@ -221,29 +221,29 @@ func (s *SensorComm) handleData(data []byte) *model.SensorData { } // 解析数据,从第4个字节开始是数据部分 - // 根据原始TCP服务器代码中的单位转换 - windSpeed := int(binary.BigEndian.Uint16(data[3:5])) // 风速值*100 sensorData := &model.SensorData{ Timestamp: time.Now(), - WindSpeed: windSpeed, // 原始值已经是*100的 - WindForce: int(binary.BigEndian.Uint16(data[5:7])), - WindDirection8: int(binary.BigEndian.Uint16(data[7:9])), - WindDirection360: int(binary.BigEndian.Uint16(data[9:11])), + WindSpeed: int(binary.BigEndian.Uint16(data[3:5])), // 风速值*100 + WindForce: int(binary.BigEndian.Uint16(data[5:7])), // 风力 + WindDirection8: int(binary.BigEndian.Uint16(data[7:9])), // 8方位风向 + WindDirection360: int(binary.BigEndian.Uint16(data[9:11])), // 360度风向 Humidity: int(binary.BigEndian.Uint16(data[11:13])), // 湿度*10 Temperature: int(binary.BigEndian.Uint16(data[13:15])), // 温度*10 AtmPressure: int(binary.BigEndian.Uint16(data[21:23])), // 大气压*10 - SolarRadiation: int(binary.BigEndian.Uint16(data[33:35])), // 太阳辐射原始值 + SolarRadiation: int(binary.BigEndian.Uint16(data[33:35])), // 太阳辐射 + Rainfall: int(binary.BigEndian.Uint16(data[15:17])), // 光学雨量*10 } // 记录解析后的传感器数据,展示实际物理量 - logger.Logger.Printf("传感器数据: 风速=%.2f m/s, 风力=%d级, 风向=%d°, 湿度=%.1f%%, 温度=%.1f℃, 大气压=%.1f kPa, 太阳辐射=%d W/m²", + logger.Logger.Printf("传感器数据: 风速=%.2f m/s, 风力=%d级, 风向=%d°, 湿度=%.1f%%, 温度=%.1f℃, 大气压=%.1f kPa, 太阳辐射=%d W/m², 光学雨量=%.1f mm", float64(sensorData.WindSpeed)/100.0, sensorData.WindForce, sensorData.WindDirection360, float64(sensorData.Humidity)/10.0, float64(sensorData.Temperature)/10.0, float64(sensorData.AtmPressure)/10.0, - sensorData.SolarRadiation) + sensorData.SolarRadiation, + float64(sensorData.Rainfall)/10.0) // 保存数据到数据库 if err := s.dao.Insert(sensorData); err != nil {