main.go 6.0 KB

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