Browse Source

ECG stop trans
ECG stop collect

develoven 1 year ago
parent
commit
f4fb55b1bf
9 changed files with 105 additions and 31 deletions
  1. 42 1
      api/gateway.go
  2. 44 24
      api/sse.go
  3. 3 3
      config/application.yaml
  4. 3 0
      constant/constant.go
  5. 2 0
      initialize/router.go
  6. 1 1
      initialize/run.go
  7. 2 2
      initialize/ws.go
  8. 1 0
      main.go
  9. 7 0
      models/device.go

+ 42 - 1
api/gateway.go

@@ -103,7 +103,10 @@ func ConnectDevice(c *gin.Context) {
 		response.Failed(errors.DeviceConnectError+string(body), c)
 		return
 	}
-	httpResponse = http.GetReq(global.Config.Gateway.BaseUrl + global.Config.Gateway.OpenChannel)
+	openChannelUrl := global.Config.Gateway.BaseUrl + global.Config.Gateway.OpenChannel
+	openChannelUrl = strings.Replace(openChannelUrl, "MAC", param.Mac, -1)
+	fmt.Println("openChannelUrl===" + openChannelUrl)
+	httpResponse = http.GetReq(openChannelUrl)
 	if httpResponse.StatusCode != 200 {
 		fmt.Printf("%s:%s", errors.OpenChannelError, httpResponse.Body)
 		response.Failed(errors.OpenChannelError, c)
@@ -248,3 +251,41 @@ func OpenNotify(c *gin.Context) {
 	response.Success("开启通知", "", c)
 	return
 }
+
+// StopTrans
+// PingExample confrontation-training
+// @Summary 停止传输
+// @Schemes
+// @Description 停止传输
+// @Tags 设备管理
+// @Accept json
+// @Produce json
+// @Success 200 {string} string "ok"
+// @Router /v1/device/:mac/stop/trans [get]
+func StopTrans(c *gin.Context) {
+	mac := c.Param("mac")
+	stopTransUrl := global.Config.Gateway.BaseUrl + global.Config.Gateway.WriteDataUrl
+	stopTransUrl = strings.Replace(stopTransUrl, "MAC", mac, -1)
+	stopTransUrl = strings.Replace(stopTransUrl, "DATA", constant.StopTransCmd, -1)
+	response.Success("停止传输", "", c)
+	return
+}
+
+// StopCollect
+// PingExample confrontation-training
+// @Summary 停止采集
+// @Schemes
+// @Description 停止采集
+// @Tags 设备管理
+// @Accept json
+// @Produce json
+// @Success 200 {string} string "ok"
+// @Router /v1/device/:mac/stop/collect [get]
+func StopCollect(c *gin.Context) {
+	mac := c.Param("mac")
+	stopTransUrl := global.Config.Gateway.BaseUrl + global.Config.Gateway.WriteDataUrl
+	stopTransUrl = strings.Replace(stopTransUrl, "MAC", mac, -1)
+	stopTransUrl = strings.Replace(stopTransUrl, "DATA", constant.StopCollectCmd, -1)
+	response.Success("停止采集", "", c)
+	return
+}

+ 44 - 24
api/sse.go

@@ -16,21 +16,21 @@ import (
 // SseScanDevice 扫描设备
 func SseScanDevice(paramMap map[string]string) {
 	var scanUrl = global.Config.Gateway.BaseUrl + global.Config.Gateway.ScanUrl
-	ws, _, err := websocket.DefaultDialer.Dial(global.Config.Websocket.WSUrl, nil)
-	if err != nil {
-		fmt.Println("Websocket client init error" + err.Error())
-		return
-	}
+
 	deviceMap := make(map[string]models.DeviceScanned)
 	if len(paramMap) > 0 {
 		for key, value := range paramMap {
 			scanUrl += "&" + key + "=" + value
 		}
 	}
+	//events := make(chan *sse.Event)
 	client := sse.NewClient(scanUrl)
 	go func() {
-
 		fmt.Println("开始SSE")
+		//err := client.SubscribeChan("messages", events)
+		//if err != nil {
+		//	return
+		//}
 		err := client.SubscribeRaw(func(msg *sse.Event) {
 			//fmt.Println(string(msg.Data))
 			var data models.DeviceScannedFromGateway
@@ -53,24 +53,33 @@ func SseScanDevice(paramMap map[string]string) {
 			return
 		}
 	}()
-
-	if err != nil {
-		fmt.Println(err.Error())
-		return
-	}
-	timer := time.NewTimer(time.Duration(global.Config.Gateway.ScanSecond) * time.Millisecond)
-	select {
-	case <-timer.C:
-		messageMap := make(map[string]map[string]models.DeviceScanned)
-		messageMap[constant.MessageTypeDeviceScanned] = deviceMap
-		bytes, err := json.Marshal(messageMap)
-		if err != nil {
-			fmt.Printf("json异常:%s", err.Error())
-			return
-		}
-		err = ws.WriteMessage(websocket.TextMessage, bytes)
-		if err != nil {
-			return
+	ticket := time.NewTicker(time.Duration(global.Config.Gateway.ScanSecond) * time.Millisecond)
+	for range ticket.C {
+		fmt.Println("当前时间:" + time.Now().Format("2006-01-02 15:04:05"))
+		if len(deviceMap) > 0 {
+			ws, _, err := websocket.DefaultDialer.Dial(global.Config.Websocket.WSUrl, nil)
+			if err != nil {
+				fmt.Println("Websocket client init error" + err.Error())
+				return
+			}
+			messageMap := make(map[string]string)
+			messageMap["msgType"] = constant.MessageTypeDeviceScanned
+			marshal, err := json.Marshal(deviceMap)
+			if err != nil {
+				fmt.Println("data parse Error :" + err.Error())
+				return
+			}
+			messageMap["data"] = string(marshal)
+			bytes, err := json.Marshal(messageMap)
+			if err != nil {
+				fmt.Printf("json异常:%s", err.Error())
+				return
+			}
+			err = ws.WriteMessage(websocket.TextMessage, bytes)
+			if err != nil {
+				fmt.Println("消息发送异常:" + err.Error())
+				return
+			}
 		}
 	}
 }
@@ -84,15 +93,26 @@ func SseOpenNotify() {
 		fmt.Println("Websocket client init error" + err.Error())
 		return
 	}
+
 	client := sse.NewClient(notifyUrl)
 	err = client.SubscribeRaw(func(msg *sse.Event) {
 		s := string(msg.Data)
 		fmt.Println("notify receive data :" + s)
+
 		flag := strings.HasPrefix(s, "E840") || strings.HasPrefix(s, "E841") || strings.HasPrefix(s, "E823")
 		if !flag {
 			//websocket 通知数据
 			//msgMap := make(map[string]string)
 			//msgMap[]
+			var receiveData models.DeviceDataReceived
+			errJson := json.Unmarshal(msg.Data, &receiveData)
+			if errJson != nil {
+				fmt.Println("receive data parse error:" + errJson.Error())
+				return
+			}
+			messageMap := make(map[string]string)
+			messageMap["msgType"] = constant.MessageTypeData
+			messageMap["data"] = string(msg.Data)
 			err := ws.WriteMessage(websocket.TextMessage, msg.Data)
 			if err != nil {
 				fmt.Println(errmsg.SendMessageError + err.Error())

+ 3 - 3
config/application.yaml

@@ -28,9 +28,9 @@ gateway:
   scanUrl: /gap/nodes?active=1&event=1
   connUrl: /gap/nodes/MAC/connection?chip
   notifyUrl: /gatt/nodes?event=1
-  writeDataUrl: /gatt/nodes/MAC/handle/39/value/DATA
-  openChannel: /gate/nodes/MAC/handle/36/value/0100
-  scanSecond: 30 #蓝牙扫描时长
+  writeDataUrl: /gatt/nodes/MAC/handle/32/value/DATA
+  openChannel: /gatt/nodes/MAC/handle/36/value/0100
+  scanSecond: 1000 #蓝牙数据推送时间间隔
 
 
 

+ 3 - 0
constant/constant.go

@@ -11,12 +11,15 @@ const (
 	SetTimeCmdPrefix      = "e840"
 	StartCollectCmdPrefix = "e823"
 	StartTransCmd         = "e82001363380"
+	StopTransCmd          = "0xe826"
+	StopCollectCmd        = "0xe822"
 	//ECG默认用户信息
 	EcgDefaultAge      = 20 //年龄默认值20
 	EcgDefaultHeight   = 170
 	EcgDefaultWeight   = 65
 	MaxNameByteLength  = 12
 	DefaultPlaceHolder = "00"
+
 	// MessageTypeDeviceScanned websocket 消息类型 扫描到设备
 	MessageTypeDeviceScanned = "device"
 	MessageTypeData          = "data"

+ 2 - 0
initialize/router.go

@@ -43,6 +43,8 @@ func Router() {
 	device.GET("/connection", api.ConnectDevice)
 	device.POST("/write/data/", api.WriteData)
 	device.GET("/open/notify/", api.OpenNotify)
+	device.GET("/:mac/stop/trans/", api.StopTrans)
+	device.GET("/:mac/stop/collect/", api.StopCollect)
 	//
 	//record := v1.Group("/record")
 	//record.POST("/create", api.GetRecord().SaveRecord)

+ 1 - 1
initialize/run.go

@@ -4,6 +4,6 @@ func Run() {
 	//SwagInit()
 	LoadConfig()
 	SQLite()
-	//go Manager.Start()
+	go Manager.Start()
 	Router()
 }

+ 2 - 2
initialize/ws.go

@@ -123,7 +123,7 @@ func (c *Client) Read() {
 			}
 			break
 		}
-		log.Printf("读取到客户端的信息:%s", string(message))
+		//log.Printf("读取到客户端的信息:%s", string(message))
 		Manager.Broadcast <- message
 	}
 }
@@ -148,7 +148,7 @@ func (c *Client) Write() {
 				}
 				return
 			}
-			log.Printf("发送到到客户端的信息:%s", string(message))
+			//log.Printf("发送到到客户端的信息:%s", string(message))
 
 			err := c.Socket.WriteMessage(websocket.TextMessage, message)
 			if err != nil {

+ 1 - 0
main.go

@@ -10,4 +10,5 @@ import "confrontation-training/initialize"
 //contact.url https://www.cnblogs.com/wormworm
 func main() {
 	initialize.Run()
+
 }

+ 7 - 0
models/device.go

@@ -33,3 +33,10 @@ type DeviceScanned struct {
 	BdadrType string //地址类型
 	Chip      int64
 }
+
+type DeviceDataReceived struct {
+	Value    string `json:"value"`
+	Handle   string `json:"handle"`
+	Mac      string `json:"id"`
+	DataType string `json:"dataType"`
+}