diff --git a/configs/config.go b/configs/config.go new file mode 100644 index 0000000..5e68f53 --- /dev/null +++ b/configs/config.go @@ -0,0 +1,8 @@ +package configs + +const ( + AC_PORT = "/dev/ttyUSB0" + REPORT_URL = "https://pa-api.mmeiblog.cn" + X_API_KEY = "X-API-KEY" + AGENT_ID = 1 +) diff --git a/internal/report.go b/internal/report.go index 5bf0569..d0f89e3 100644 --- a/internal/report.go +++ b/internal/report.go @@ -1 +1,86 @@ package internal + +import ( + "bytes" + "encoding/json" + "io" + "log" + "net/http" + "time" + + "git.mmeiblog.cn/mei/FatAgent/configs" + "git.mmeiblog.cn/mei/FatAgent/pkg" +) + +const ( + reportPath = "/receive/airConditioner" + httpTimeout = 30 * time.Second +) + +type airConditionerBodyMessage struct { + AgentID int `json:"agentID"` + Timestamp int64 `json:"timestamp"` + Message pkg.ACStatus `json:"message"` +} + +var httpClient = &http.Client{ + Timeout: httpTimeout, +} + +func Report() { + now := time.Now().Unix() + + ac, err := pkg.NewACController(configs.AC_PORT) + if err != nil { + log.Printf("错误:创建控制器失败: %v", err) + return + } + + ACStatus, err := ac.GetAllStatus() + if err != nil { + log.Printf("错误:查询状态失败: %v", err) + return + } + + payload := airConditionerBodyMessage{ + AgentID: configs.AGENT_ID, + Timestamp: now, + Message: *ACStatus, + } + + bodyBytes, err := json.Marshal(payload) + if err != nil { + log.Printf("错误:JSON序列化失败: %v", err) + return + } + + url := configs.REPORT_URL + reportPath + req, err := http.NewRequest("POST", url, bytes.NewReader(bodyBytes)) + if err != nil { + log.Printf("错误:创建HTTP请求失败: %v", err) + return + } + + req.Header.Add("x-api-key", configs.X_API_KEY) + req.Header.Add("Content-Type", "application/json") + + res, err := httpClient.Do(req) + if err != nil { + log.Printf("错误:发送HTTP请求失败: %v", err) + return + } + defer res.Body.Close() + + if res.StatusCode != http.StatusOK { + log.Printf("警告:HTTP响应状态码非200,状态码: %d", res.StatusCode) + return + } + + body, err := io.ReadAll(res.Body) + if err != nil { + log.Printf("错误:读取HTTP响应失败: %v", err) + return + } + + log.Printf("上报成功,响应内容:%s", body) +} diff --git a/main.go b/main.go index cb9d3b5..7637778 100644 --- a/main.go +++ b/main.go @@ -6,16 +6,14 @@ import ( "os/signal" "syscall" - "git.mmeiblog.cn/mei/FatAgent/pkg" + "git.mmeiblog.cn/mei/FatAgent/internal" "github.com/robfig/cron/v3" ) func main() { c := cron.New() - c.AddFunc("@every 1m", func() { - pkg.NewACController("/dev/tty1") - }) + c.AddFunc("@every 1m", internal.Report) c.Start()