gateway.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package platform
  2. import (
  3. "errors"
  4. "strings"
  5. "github.com/yuguorong/go/log"
  6. bus "github.com/ammeter/Bus"
  7. "github.com/ammeter/cloudserver"
  8. "github.com/ammeter/config"
  9. drviers "github.com/ammeter/drivers"
  10. )
  11. /*
  12. gZdomIS9Hz3d7HxvcoNx
  13. data [{"accessToken":"AZM7QSPRqsV4CUxIGldn",
  14. "id":"1ec23004b88a020bf52b38d8579115b",
  15. "mqttServer":"test-sbuilding.pacom.cn:1885",
  16. "name":"FGGW10-202110020001"}]
  17. */
  18. var debugName = true
  19. const (
  20. DEF_VERDOR = "GW4G"
  21. DEF_INF_NAME = "eth0"
  22. )
  23. type Gateway struct {
  24. Mqttcfg bus.QMqtt
  25. Name string
  26. Uid string
  27. modelList map[string]string
  28. NorthRoute interface{}
  29. DeviceList []drviers.IDriver
  30. }
  31. func (gw *Gateway) SyncCloudModelDevice(url string, model interface{}) error {
  32. var err = errors.New("Nil model?")
  33. if model != nil {
  34. prof := config.GetSysConfig().GetProfile("remote_config", cloudserver.GetCloudConfig())
  35. cs := cloudserver.GetCloudServer(prof)
  36. param := map[string]string{
  37. "gwDevId": gw.Uid,
  38. }
  39. err = cs.GetClientData(url, model, &param)
  40. log.Info(model)
  41. }
  42. return err
  43. }
  44. type netinfo struct {
  45. name string
  46. uuid string
  47. prority int
  48. }
  49. func priotyInf(ni *netinfo, name string) bool {
  50. name = strings.ToUpper(name)
  51. ifnames := []string{"WLAN", "ETH", "ENS", "ENO", "本地连接"}
  52. for i := 0; i < ni.prority && i < len(ifnames); i++ {
  53. if strings.Contains(name, ifnames[i]) {
  54. ni.name = name
  55. ni.prority = i
  56. return true
  57. }
  58. }
  59. return false
  60. }
  61. func (gw *Gateway) InitGateway(modelList map[string]string) {
  62. //gw.GetGatewayName()
  63. gw.DeviceList = make([]drviers.IDriver, 0)
  64. gw.modelList = modelList
  65. }
  66. func (gw *Gateway) StartServer(uid string) {
  67. // name := "ammeter"
  68. // drvU := drviers.Install("SAIR10", nil)
  69. for name, url := range gw.modelList {
  70. drv := drviers.Install(name, nil)
  71. model := drv.GetModel()
  72. if url != "" {
  73. if gw.SyncCloudModelDevice(url, model) != nil {
  74. model = config.GetSysConfig().GetProfile("gateway/"+name+"/amlist", model)
  75. } else {
  76. config.GetSysConfig().SetProfile("gateway/"+name+"/amlist", model)
  77. }
  78. }
  79. if sz, devlist := drv.CreateDevice(model); sz > 0 {
  80. for _, dev := range devlist {
  81. dev.SetRoute(nil, "ThingsBoards", "mqtt", "v1/gateway/telemetry", &gw.Mqttcfg)
  82. dev.Open()
  83. }
  84. }
  85. }
  86. }
  87. func InitGateway(mqttcfg *bus.QMqtt, modelList map[string]string) *Gateway {
  88. gw := &Gateway{
  89. Uid: mqttcfg.Uid,
  90. Mqttcfg: *mqttcfg,
  91. }
  92. gw.InitGateway(modelList)
  93. return gw
  94. }