package iotStruct import ( "log" "unicode/utf8" ) // DTU管理命令 const ( CmdRegister = iota // 注册 CmdHeartBeat // 心跳 CmdCollect // 采集 ) type DTUManageCmd struct { SN string `json:"sn"` Cmd int `json:"cmd"` Data []byte `json:"data"` } // DmcUnmarshal 解析DTU上报 // 注册和心跳格式:注册包@202402200322 心跳包 $202402200322 // SN长度为8-16个字符 func (dmc *DTUManageCmd) DmcUnmarshal(data []byte) { size := utf8.RuneCount(data) log.Println("DTU采集:", data) // SN 长度在 8-16个字符 (注册包在9-17个字符) if size > 8 && size < 18 { if data[0] == '@' { dmc.Cmd = CmdRegister dmc.SN = string(data[1:]) return } else if data[0] == '$' { dmc.Cmd = CmdHeartBeat dmc.SN = string(data[1:]) return } } dmc.Data = data dmc.Cmd = CmdCollect }