diff --git a/model/weather_data.go b/model/weather_data.go index 8878087..0590b24 100644 --- a/model/weather_data.go +++ b/model/weather_data.go @@ -251,7 +251,7 @@ func ParseWH65LPData(data []byte) (*WH65LPData, error) { // 2. 解析设备ID (第2字节 + 第22-23字节) idLSB := data[1] - idMSB := uint32(data[22])<<8 | uint32(data[21]) + idMSB := uint32(data[22]) | uint32(data[21])<<8 wd.StationID = fmt.Sprintf("%06X", (idMSB<<8)|uint32(idLSB)) // 3. 解析风向 (bits 16-24) @@ -273,7 +273,7 @@ func ParseWH65LPData(data []byte) (*WH65LPData, error) { windSpeedRaw := uint16(data[6]) if !wd.WSPFlag { // 10位风速 - windSpeedRaw |= uint16(data[3]>>6) << 8 + windSpeedRaw |= uint16((data[3]>>6)&0x03) << 8 } wd.WindSpeed = float64(windSpeedRaw) / 8.0 * 0.51 @@ -297,6 +297,11 @@ func ParseWH65LPData(data []byte) (*WH65LPData, error) { pressureRaw &= 0x1FFFF // 只取17位 wd.Pressure = float64(pressureRaw) / 100.0 + // 验证校验和 + if !IsWH65LPData(data) { + return nil, fmt.Errorf("数据校验失败") + } + return wd, nil }