feat: add a new 485 type weather station

This commit is contained in:
yarnom 2025-08-01 21:47:38 +08:00
parent eb69a2be61
commit 017d6489f1

View File

@ -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
}