feat: add a new 485 type weather station
This commit is contained in:
parent
9a0117f84f
commit
03e88da686
@ -287,16 +287,18 @@ func ParseWH65LPData(data []byte) (*WH65LPData, error) {
|
||||
fmt.Printf("6. 低电量: %v (字节3位4=%d)\n", wd.LowBattery, (data[3]>>4)&0x01)
|
||||
|
||||
// 7. 温度 (bits 29-39)
|
||||
tempLow := uint16(data[4])
|
||||
tempHigh := uint16(data[5] & 0x07)
|
||||
tempRaw := tempLow | (tempHigh << 8)
|
||||
// 从字节3的高3位和字节4组成11位温度数据
|
||||
tempHigh := uint16((data[3] >> 5)) & 0x07 // 取字节3的高3位
|
||||
tempLow := uint16(data[4]) // 取字节4的8位
|
||||
tempRaw := (tempHigh << 8) | tempLow // 组合成11位温度数据
|
||||
wd.Temperature = float64(tempRaw-400) / 10.0
|
||||
fmt.Printf("7. 温度: Low=0x%02X (%s), High=0x%X, Raw=0x%X, 温度=%.1f°C\n",
|
||||
data[4], byteToBinary(data[4]), tempHigh, tempRaw, wd.Temperature)
|
||||
fmt.Printf("7. 温度: High=0x%X (%s), Low=0x%02X (%s), Raw=0x%X, 温度=%.1f°C\n",
|
||||
tempHigh, byteToBinary(data[3])[0:3], tempLow, byteToBinary(data[4]), tempRaw, wd.Temperature)
|
||||
|
||||
// 8. 湿度 (bits 40-47)
|
||||
wd.Humidity = int(data[5] >> 3)
|
||||
fmt.Printf("8. 湿度: 字节5=0x%02X (%s), 湿度=%d%%\n",
|
||||
// 第5字节完整8位就是湿度值
|
||||
wd.Humidity = int(data[5])
|
||||
fmt.Printf("8. 湿度: 原始值=0x%02X (%s), 湿度=%d%%\n",
|
||||
data[5], byteToBinary(data[5]), wd.Humidity)
|
||||
|
||||
// 9. 风速 (bits 48-55 + WSP_9,WSP_8)
|
||||
@ -312,9 +314,11 @@ func ParseWH65LPData(data []byte) (*WH65LPData, error) {
|
||||
fmt.Printf("10. 阵风: Raw=0x%02X, 阵风=%.2f m/s\n", data[7], wd.WindGust)
|
||||
|
||||
// 11. 降雨量 (bits 64-79)
|
||||
rainRaw := uint16(data[8]) | uint16(data[9])<<8
|
||||
// 注意:这里要用小端序,低字节在前
|
||||
rainRaw := uint16(data[9])<<8 | uint16(data[8])
|
||||
wd.Rain = float64(rainRaw) * 0.254
|
||||
fmt.Printf("11. 降雨量: Raw=0x%04X, 降雨量=%.3f mm\n", rainRaw, wd.Rain)
|
||||
fmt.Printf("11. 降雨量: Low=0x%02X, High=0x%02X, Raw=0x%04X, 降雨量=%.3f mm\n",
|
||||
data[8], data[9], rainRaw, wd.Rain)
|
||||
|
||||
// 12. 紫外线 (bits 80-95)
|
||||
uvRaw := uint16(data[10]) | uint16(data[11])<<8
|
||||
@ -327,13 +331,16 @@ func ParseWH65LPData(data []byte) (*WH65LPData, error) {
|
||||
fmt.Printf("13. 光照: Raw=0x%06X, 光照=%.1f lux\n", lightRaw, wd.Light)
|
||||
|
||||
// 14. 气压 (bits 136-159)
|
||||
pressureRaw := uint32(data[17]) | uint32(data[18])<<8 | (uint32(data[19])&0x01)<<16
|
||||
// 使用字节17-19组成气压值,注意17位限制
|
||||
pressureRaw := uint32(data[17]) | uint32(data[18])<<8 | uint32(data[19])<<16
|
||||
pressureRaw &= 0x1FFFF // 确保只取17位
|
||||
if pressureRaw == 0x1FFFF {
|
||||
wd.Pressure = 0 // 无效值
|
||||
} else {
|
||||
wd.Pressure = float64(pressureRaw) / 100.0
|
||||
}
|
||||
fmt.Printf("14. 气压: Raw=0x%05X, 气压=%.2f hPa\n", pressureRaw, wd.Pressure)
|
||||
fmt.Printf("14. 气压: Bytes=[0x%02X,0x%02X,0x%02X], Raw=0x%05X, 气压=%.2f hPa\n",
|
||||
data[17], data[18], data[19], pressureRaw, wd.Pressure)
|
||||
|
||||
fmt.Printf("\n=== 解析结果 ===\n%s\n", wd.String())
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user