From 017d6489f117b37920c990f106b69e1bf46dda49 Mon Sep 17 00:00:00 2001 From: yarnom Date: Fri, 1 Aug 2025 21:47:38 +0800 Subject: [PATCH] feat: add a new 485 type weather station --- model/weather_data.go | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/model/weather_data.go b/model/weather_data.go index 7d9f965..9674091 100644 --- a/model/weather_data.go +++ b/model/weather_data.go @@ -267,11 +267,17 @@ func ParseWH65LPData(data []byte) (*WH65LPData, error) { wd.LowBattery = (data[3]>>4)&0x01 == 1 // 7. 温度 (bits 29-39) - 11位数据 - tempRaw := (uint16((data[3]>>5)&0x07) << 8) | uint16(data[4]) + // 根据示例数据分析,温度应该是: + // - 第4字节的全部8位 (0xB3) + // - 第5字节的低3位 (0x4A & 0x07 = 0x02) + tempLow := uint16(data[4]) + tempHigh := uint16(data[5] & 0x07) + tempRaw := tempLow | (tempHigh << 8) wd.Temperature = float64(tempRaw-400) / 10.0 // 8. 湿度 (bits 40-47) - wd.Humidity = int(data[5]) + // 湿度应该是第5字节的高5位 + wd.Humidity = int(data[5] >> 3) // 9. 风速 (bits 48-55 + WSP_9,WSP_8) windSpeedRaw := uint16(data[6]) @@ -296,14 +302,23 @@ func ParseWH65LPData(data []byte) (*WH65LPData, error) { wd.Light = float64(lightRaw) / 10.0 // 14. 气压 (bits 136-159) - pressureRaw := uint32(data[17]) | uint32(data[18])<<8 | uint32(data[19])<<16 - pressureRaw &= 0x1FFFF + // 根据示例数据分析,气压应该是: + // - 第18字节 (0x01) + // - 第19字节 (0x83) + // - 第20字节的低1位 (0x30 & 0x01 = 0x00) + pressureRaw := uint32(data[17]) | uint32(data[18])<<8 | (uint32(data[19])&0x01)<<16 if pressureRaw == 0x1FFFF { wd.Pressure = 0 // 无效值 } else { wd.Pressure = float64(pressureRaw) / 100.0 } + // 添加调试信息,帮助分析 + fmt.Printf("调试信息:\n") + fmt.Printf("温度原始值: 0x%X (%d), 计算温度: %.1f°C\n", tempRaw, tempRaw, wd.Temperature) + fmt.Printf("湿度原始值: 0x%X (%d)\n", data[5]>>3, data[5]>>3) + fmt.Printf("气压原始值: 0x%X (%d), 计算气压: %.2f hPa\n", pressureRaw, pressureRaw, wd.Pressure) + return wd, nil }