|
|
@@ -1,94 +0,0 @@
|
|
|
-package main
|
|
|
-
|
|
|
-//雷达
|
|
|
-import (
|
|
|
- "github.com/sirupsen/logrus"
|
|
|
- "lc/common/protocol"
|
|
|
- "lc/edge/ipole/modbus"
|
|
|
- "math"
|
|
|
- "net"
|
|
|
- "strconv"
|
|
|
- "strings"
|
|
|
-)
|
|
|
-
|
|
|
-const (
|
|
|
- PORT = 1026
|
|
|
-)
|
|
|
-
|
|
|
-func RadarReceive(args ...interface{}) interface{} {
|
|
|
- UDPConn, err := net.ListenUDP("udp", &net.UDPAddr{
|
|
|
- IP: net.IPv4(0, 0, 0, 0),
|
|
|
- Port: PORT,
|
|
|
- })
|
|
|
- if err != nil {
|
|
|
- logrus.Fatal("Listen failed,", err)
|
|
|
- return 0
|
|
|
- }
|
|
|
-
|
|
|
- for {
|
|
|
- var data [1024]byte
|
|
|
- n, addr, err := UDPConn.ReadFromUDP(data[:]) //同步读
|
|
|
- if err != nil {
|
|
|
- logrus.Warningf("Read from udp server:%s failed,err:%s", addr, err)
|
|
|
- continue
|
|
|
- }
|
|
|
- logrus.Debugf("Read from udp server addr: %s", addr)
|
|
|
- if b, sa := verify(data[:n-2]); !b {
|
|
|
- logrus.Warningf("解析来自:%s 的数据出错,===%v ==== err:%s", addr, string(data[:n]), sa)
|
|
|
- continue
|
|
|
- } else {
|
|
|
- l := len(sa)
|
|
|
- for _, s := range sa[:l-1] {
|
|
|
- d := strings.Split(s, ",")
|
|
|
- if len(d) != 5 {
|
|
|
- logrus.Warningf("解析的数据出错, 长度不为5")
|
|
|
- continue
|
|
|
- }
|
|
|
- go func() {
|
|
|
- data1 := make(map[uint16]float64)
|
|
|
- data1[0], _ = strconv.ParseFloat(d[0], 64)
|
|
|
- data1[1], _ = strconv.ParseFloat(d[1], 64)
|
|
|
- data1[2], _ = strconv.ParseFloat(d[2], 64)
|
|
|
- data1[3], _ = strconv.ParseFloat(d[3], 64)
|
|
|
- data1[4], _ = strconv.ParseFloat(d[4], 64)
|
|
|
- data1[3] = math.Abs(data1[3])
|
|
|
- var obj protocol.Pack_UploadData
|
|
|
- if str, err := obj.EnCode(addr.String(), appConfig.GID, GetNextUint64(), nil, 0, data1); err == nil {
|
|
|
- logrus.Debugf("Publish TP_RADAR_DATA")
|
|
|
- topic := GetTopic(protocol.DT_Radar, appConfig.GID, protocol.TP_RADAR_DATA)
|
|
|
- GetMQTTMgr().Publish(topic, str, 0, ToCloud) //上传消息 雷达
|
|
|
- }
|
|
|
- }()
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-func verify(b []byte) (bool, []string) {
|
|
|
- strsplit := strings.Split(string(b), ";")
|
|
|
- slen := len(strsplit)
|
|
|
- if slen < 2 {
|
|
|
- return false, nil
|
|
|
- }
|
|
|
- be := strings.Split(strsplit[0], "=")
|
|
|
- if len(be) != 2 {
|
|
|
- return false, nil
|
|
|
- }
|
|
|
- c := strings.Split(be[1], ":")
|
|
|
- if len(c) != 2 {
|
|
|
- return false, nil
|
|
|
- }
|
|
|
- if n, err := strconv.Atoi(c[0]); err == nil {
|
|
|
- if n != slen-1 {
|
|
|
- return false, nil
|
|
|
- }
|
|
|
- strsplit[0] = c[1]
|
|
|
- crc16 := modbus.CRC16(b[:len(b)-4])
|
|
|
- if n1, err := strconv.ParseInt(strsplit[slen-1], 16, 32); err == nil {
|
|
|
- if uint16(n1) == crc16 {
|
|
|
- return true, strsplit
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return false, nil
|
|
|
-}
|