main.go 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. package main
  2. import (
  3. "context"
  4. "github.com/gogf/gf/v2/encoding/gjson"
  5. "github.com/gogf/gf/v2/os/glog"
  6. "github.com/gogf/gf/v2/os/gproc"
  7. "os"
  8. "sparrow-sdk/config"
  9. "sparrow-sdk/protocal"
  10. gatewayV2 "sparrow-sdk/v2"
  11. "yx-4g-gateway/schema"
  12. "yx-4g-gateway/server"
  13. )
  14. func main() {
  15. ctx := context.Background()
  16. err := glog.SetLevelStr(server.GetConfig("Server.RunMode").String())
  17. if err != nil {
  18. panic(err)
  19. }
  20. gw := gatewayV2.NewGateway(&config.Config{
  21. SparrowServer: server.GetConfig("Sparrow.Server").String(),
  22. ProductKey: server.GetConfig("Sparrow.ProductKey").String(),
  23. Protocol: "mqtt",
  24. DeviceCode: server.GetConfig("Sparrow.DeviceCode").String(),
  25. Version: "1.0.0",
  26. Debug: server.GetConfig("Sparrow.Debug").Bool(),
  27. })
  28. if _, err = gw.Register(); err != nil {
  29. panic(err)
  30. }
  31. if _, err = gw.Authentication(); err != nil {
  32. panic(err)
  33. } // 通用指令回调
  34. gw.SetReportCommandCallback(func(deviceCode, subId string) error {
  35. return nil
  36. })
  37. go gw.Connect()
  38. srv := server.NewServer(
  39. ctx,
  40. server.GetConfig("Server.Addr").String(),
  41. server.GetConfig("Server.Port").Int(),
  42. gw,
  43. )
  44. go func() {
  45. if err := srv.Start(); err != nil {
  46. panic(err)
  47. }
  48. }()
  49. closeReportChan := make(chan struct{})
  50. go func() {
  51. for {
  52. select {
  53. case <-closeReportChan:
  54. return
  55. }
  56. }
  57. }()
  58. if err = gw.RegisterCommand("setPower", func(msg protocal.CloudSend) error {
  59. var params schema.SetPowerReq
  60. j := gjson.New(msg.Data.Params)
  61. err = j.Scan(&params)
  62. if err != nil {
  63. glog.Errorf(ctx, "错误的指令参数%s", err.Error())
  64. return err
  65. }
  66. glog.Debugf(ctx, "指令:%s, 子设备Id:%s, 参数:%v", msg.Data.Cmd, msg.SubDeviceId, params)
  67. client := srv.GetClient(msg.SubDeviceId)
  68. if client != nil {
  69. if params.Power == 1 {
  70. if err = client.PowerOn(); err != nil {
  71. glog.Errorf(ctx, "执行命令出错:%s", err.Error())
  72. return err
  73. }
  74. } else {
  75. if err = client.PowerOff(); err != nil {
  76. glog.Errorf(ctx, "执行命令出错:%s", err.Error())
  77. return err
  78. }
  79. }
  80. }
  81. return nil
  82. }); err != nil {
  83. panic(err)
  84. }
  85. if err = gw.RegisterCommand("setMode", func(msg protocal.CloudSend) error {
  86. var params schema.SetModeReq
  87. j := gjson.New(msg.Data.Params)
  88. err = j.Scan(&params)
  89. if err != nil {
  90. glog.Errorf(ctx, "错误的指令参数%s", err.Error())
  91. return err
  92. }
  93. glog.Debugf(ctx, "指令:%s, 子设备Id:%s, 参数:%v", msg.Data.Cmd, msg.SubDeviceId, params)
  94. client := srv.GetClient(msg.SubDeviceId)
  95. if client != nil {
  96. if err = client.SetMode(params.Mode); err != nil {
  97. glog.Errorf(ctx, "执行命令出错:%s", err.Error())
  98. return err
  99. }
  100. }
  101. return nil
  102. }); err != nil {
  103. panic(err)
  104. }
  105. if err = gw.RegisterCommand("setTemp", func(msg protocal.CloudSend) error {
  106. var params schema.SetTempReq
  107. j := gjson.New(msg.Data.Params)
  108. err = j.Scan(&params)
  109. if err != nil {
  110. glog.Errorf(ctx, "错误的指令参数%s", err.Error())
  111. return err
  112. }
  113. glog.Debugf(ctx, "指令:%s, 子设备Id:%s, 参数:%v", msg.Data.Cmd, msg.SubDeviceId, params)
  114. client := srv.GetClient(msg.SubDeviceId)
  115. if client != nil {
  116. if err = client.SetTemp(params.Temp); err != nil {
  117. glog.Errorf(ctx, "执行命令出错:%s", err.Error())
  118. return err
  119. }
  120. }
  121. return nil
  122. }); err != nil {
  123. panic(err)
  124. }
  125. if err = gw.RegisterCommand("setFanLevel", func(msg protocal.CloudSend) error {
  126. var params schema.FanSpeedReq
  127. j := gjson.New(msg.Data.Params)
  128. err = j.Scan(&params)
  129. if err != nil {
  130. glog.Errorf(ctx, "错误的指令参数%s", err.Error())
  131. return err
  132. }
  133. glog.Debugf(ctx, "指令:%s, 子设备Id:%s, 参数:%v", msg.Data.Cmd, msg.SubDeviceId, params)
  134. client := srv.GetClient(msg.SubDeviceId)
  135. if client != nil {
  136. if err = client.SetFanSpeed(params.Speed); err != nil {
  137. glog.Errorf(ctx, "执行命令出错:%s", err.Error())
  138. return err
  139. }
  140. }
  141. return nil
  142. }); err != nil {
  143. panic(err)
  144. }
  145. if err = gw.RegisterCommand("setNewFan", func(msg protocal.CloudSend) error {
  146. var params schema.SetNewFanReq
  147. j := gjson.New(msg.Data.Params)
  148. err = j.Scan(&params)
  149. if err != nil {
  150. glog.Errorf(ctx, "错误的指令参数%s", err.Error())
  151. return err
  152. }
  153. glog.Debugf(ctx, "指令:%s, 子设备Id:%s, 参数:%v", msg.Data.Cmd, msg.SubDeviceId, params)
  154. client := srv.GetClient(msg.SubDeviceId)
  155. if client != nil {
  156. if err = client.SetNewFan(params.Mode); err != nil {
  157. glog.Errorf(ctx, "执行命令出错:%s", err.Error())
  158. return err
  159. }
  160. }
  161. return nil
  162. }); err != nil {
  163. panic(err)
  164. }
  165. if err = gw.RegisterCommand("setFanValue", func(msg protocal.CloudSend) error {
  166. var params schema.FanValveReq
  167. j := gjson.New(msg.Data.Params)
  168. err = j.Scan(&params)
  169. if err != nil {
  170. glog.Errorf(ctx, "错误的指令参数%s", err.Error())
  171. return err
  172. }
  173. glog.Debugf(ctx, "指令:%s, 子设备Id:%s, 参数:%v", msg.Data.Cmd, msg.SubDeviceId, params)
  174. client := srv.GetClient(msg.SubDeviceId)
  175. if client != nil {
  176. if params.FanValve == "03" {
  177. if err = client.SetFanGateThreeLevel(params.Value); err != nil {
  178. glog.Errorf(ctx, "执行命令出错:%s", err.Error())
  179. return err
  180. }
  181. }
  182. if params.FanValve == "04" {
  183. if err = client.SetFanGateFourLevel(params.Value); err != nil {
  184. glog.Errorf(ctx, "执行命令出错:%s", err.Error())
  185. return err
  186. }
  187. }
  188. if params.FanValve == "05" {
  189. if err = client.SetFanGateFiveLevel(params.Value); err != nil {
  190. glog.Errorf(ctx, "执行命令出错:%s", err.Error())
  191. return err
  192. }
  193. }
  194. }
  195. return nil
  196. }); err != nil {
  197. panic(err)
  198. }
  199. if err = gw.RegisterCommand("setFan", func(msg protocal.CloudSend) error {
  200. var params schema.SetValvePowerReq
  201. j := gjson.New(msg.Data.Params)
  202. err = j.Scan(&params)
  203. if err != nil {
  204. glog.Errorf(ctx, "错误的指令参数%s", err.Error())
  205. return err
  206. }
  207. glog.Debugf(ctx, "指令:%s, 子设备Id:%s, 参数:%v", msg.Data.Cmd, msg.SubDeviceId, params)
  208. client := srv.GetClient(msg.SubDeviceId)
  209. if client != nil {
  210. if err = client.SetValvePower(&params); err != nil {
  211. glog.Errorf(ctx, "执行命令出错:%s", err.Error())
  212. return err
  213. }
  214. }
  215. return nil
  216. }); err != nil {
  217. panic(err)
  218. }
  219. gproc.AddSigHandlerShutdown(func(sig os.Signal) {
  220. gw.Close()
  221. srv.Stop()
  222. })
  223. gproc.Listen()
  224. }