From bc3290c50105c792a57d17a10b2e9fc376eb0132 Mon Sep 17 00:00:00 2001 From: yarnom Date: Sun, 3 Aug 2025 13:13:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20485=20=E7=9A=84?= =?UTF-8?q?=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 29 +++++++++++++++++++++++------ model/protocol_test.go | 4 ++-- model/weather_data.go | 12 ++++++++---- 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/main.go b/main.go index 8e6e5ab..0865a45 100644 --- a/main.go +++ b/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("数据已成功保存到数据库") + // } } } diff --git a/model/protocol_test.go b/model/protocol_test.go index bb06246..6d3c1eb 100644 --- a/model/protocol_test.go +++ b/model/protocol_test.go @@ -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. 风速解析 diff --git a/model/weather_data.go b/model/weather_data.go index fdb9c08..4355474 100644 --- a/model/weather_data.go +++ b/model/weather_data.go @@ -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)