feat: add a new 485 type weather station
This commit is contained in:
parent
eb69a2be61
commit
017d6489f1
@ -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
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user