From d4bd14a91fa349d7c0617352ef5b6f938cf73ab4 Mon Sep 17 00:00:00 2001 From: yarnom Date: Fri, 1 Aug 2025 21:28:02 +0800 Subject: [PATCH] feat: add a new 485 type weather station --- main.go | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/main.go b/main.go index 36af177..a4bf169 100644 --- a/main.go +++ b/main.go @@ -121,7 +121,6 @@ func startUDP() { continue } rawData := buffer[:n] - data := string(rawData) log.Printf("从 %s 接收到 %d 字节数据", addr.String(), n) hexDump := hexDump(rawData) @@ -129,13 +128,44 @@ func startUDP() { asciiDump := asciiDump(rawData) log.Printf("ASCII码:\n%s", asciiDump) + // 首先尝试解析为WH65LP数据 + if len(rawData) == 25 && rawData[0] == 0x24 { + wh65lpData, err := model.ParseWH65LPData(rawData) + if err != nil { + log.Printf("解析WH65LP数据失败: %v", err) + } else { + log.Println("成功解析WH65LP气象站数据:") + log.Println(wh65lpData) + + // 更新内存中的设备信息 + model.UpdateDeviceInMemory(wh65lpData.StationID, addr, model.DeviceTypeWH65LP) + // 注册设备到数据库 + err = model.RegisterDeviceInDB(wh65lpData.StationID, addr) + if err != nil { + log.Printf("注册设备失败: %v", err) + } + log.Printf("设备 %s 已注册,IP: %s", wh65lpData.StationID, addr.String()) + + // 保存数据 + err = model.SaveWH65LPData(wh65lpData, rawData) + if err != nil { + log.Printf("保存数据到数据库失败: %v", err) + } else { + log.Printf("数据已成功保存到数据库") + } + continue + } + } + + // 如果不是WH65LP数据,尝试解析为ECOWITT数据 + data := string(rawData) weatherData, err := model.ParseWeatherData(data) if err != nil { - log.Printf("解析数据失败: %v", err) + log.Printf("解析ECOWITT数据失败: %v", err) continue } - log.Println("成功解析气象站数据:") + log.Println("成功解析ECOWITT气象站数据:") log.Println(weatherData) if weatherData.StationID != "" {