feat: 新增 485 的解析
This commit is contained in:
parent
cb1728ef00
commit
bc3290c501
29
main.go
29
main.go
@ -138,6 +138,22 @@ func startUDP() {
|
||||
log.Printf("设备类型: %s", getDeviceTypeString(deviceType))
|
||||
log.Println(data)
|
||||
|
||||
// 如果是RS485数据,打印更详细的信息
|
||||
if deviceType == model.DeviceTypeRS485 {
|
||||
if rs485Data, ok := data.(*model.RS485WeatherData); ok {
|
||||
log.Println("RS485数据详情:")
|
||||
log.Printf("设备ID: %s", rs485Data.DeviceID)
|
||||
log.Printf("温度: %.2f°C", rs485Data.Temperature)
|
||||
log.Printf("湿度: %.2f%%", rs485Data.Humidity)
|
||||
log.Printf("风向: %.2f°", rs485Data.WindDirection)
|
||||
log.Printf("风速: %.2f m/s", rs485Data.WindSpeed)
|
||||
log.Printf("降雨量: %.2f mm", rs485Data.Rainfall)
|
||||
log.Printf("光照: %.2f lux", rs485Data.Light)
|
||||
log.Printf("紫外线: %.2f", rs485Data.UV)
|
||||
log.Printf("气压: %.2f hPa", rs485Data.Pressure)
|
||||
}
|
||||
}
|
||||
|
||||
var stationID string
|
||||
switch v := data.(type) {
|
||||
case *model.WeatherData:
|
||||
@ -153,12 +169,13 @@ func startUDP() {
|
||||
log.Printf("警告: 收到的数据没有站点ID")
|
||||
}
|
||||
|
||||
err = model.SaveWeatherData(data, string(rawData))
|
||||
if err != nil {
|
||||
log.Printf("保存数据到数据库失败: %v", err)
|
||||
} else {
|
||||
log.Printf("数据已成功保存到数据库")
|
||||
}
|
||||
// 暂时不保存到数据库
|
||||
// err = model.SaveWeatherData(data, string(rawData))
|
||||
// if err != nil {
|
||||
// log.Printf("保存数据到数据库失败: %v", err)
|
||||
// } else {
|
||||
// log.Printf("数据已成功保存到数据库")
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -612,8 +612,8 @@ func TestParseNewData(t *testing.T) {
|
||||
|
||||
func TestParseNewDataWithDetails(t *testing.T) {
|
||||
// 新的测试数据:24 F2 09 02 BA 4F 13 03 00 6A 02 33 04 13 5C AC FE 01 83 93 17 00 29 35 88
|
||||
data := []byte{0x24, 0xF2, 0x09, 0x02, 0xBA, 0x4F, 0x13, 0x03, 0x00, 0x6A, 0x02, 0x33, 0x04, 0x13, 0x5C, 0xAC, 0xFE, 0x01, 0x83, 0x93, 0x17, 0x00, 0x29, 0x35, 0x88}
|
||||
|
||||
//data := []byte{0x24, 0xF2, 0x09, 0x02, 0xBA, 0x4F, 0x13, 0x03, 0x00, 0x6A, 0x02, 0x33, 0x04, 0x13, 0x5C, 0xAC, 0xFE, 0x01, 0x83, 0x93, 0x17, 0x00, 0x29, 0x35, 0x88}
|
||||
data := []byte{0x24, 0x36, 0xF3, 0x02, 0x96, 0x37, 0x06, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0xD3, 0x9A, 0x01, 0x88, 0xF5, 0x7E, 0x00, 0x2A, 0x9C, 0xF6}
|
||||
protocol := NewProtocol(data)
|
||||
|
||||
// 1. 风速解析
|
||||
|
||||
@ -53,12 +53,9 @@ var urlRegex = regexp.MustCompile(`/weatherstation/updateweatherstation\.php\?([
|
||||
func ParseData(data []byte) (interface{}, DeviceType, error) {
|
||||
// 检查是否为RS485数据
|
||||
if len(data) == 25 && data[0] == 0x24 {
|
||||
// 创建协议解析器
|
||||
protocol := NewProtocol(data)
|
||||
rs485Protocol := NewRS485Protocol(data)
|
||||
rs485Data, err := rs485Protocol.ParseRS485Data()
|
||||
if err != nil {
|
||||
return nil, DeviceTypeRS485, err
|
||||
}
|
||||
|
||||
// 获取设备ID
|
||||
idParts, err := protocol.GetCompleteID()
|
||||
@ -66,6 +63,13 @@ func ParseData(data []byte) (interface{}, DeviceType, error) {
|
||||
return nil, DeviceTypeRS485, fmt.Errorf("获取设备ID失败: %v", err)
|
||||
}
|
||||
|
||||
// 解析RS485数据
|
||||
rs485Data, err := rs485Protocol.ParseRS485Data()
|
||||
if err != nil {
|
||||
return nil, DeviceTypeRS485, err
|
||||
}
|
||||
|
||||
// 添加设备ID和时间戳
|
||||
rs485Data.DeviceID = idParts.Complete.Hex
|
||||
rs485Data.ReceivedAt = time.Now()
|
||||
rs485Data.RawDataHex = fmt.Sprintf("%X", data)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user