完善tcp数据解析

This commit is contained in:
fish 2019-03-23 10:06:01 +08:00
parent b5683de46b
commit 3e1836e367
3 changed files with 51 additions and 11 deletions

View File

@ -101,7 +101,7 @@
},
{
"adrh":0,
"adrl":0,
"adrl":1,
"type":1,
"version":"yunhorn_ys_l_v1",
"flip":true,
@ -110,7 +110,8 @@
],
"devices_list": [
["4E5D52DD-EB81-43C0-A2B6-04E432412EBA", "loraport", "yunhorn_kgl_l_v1", "1"],
["EB5B0798-9B7F-474E-AAB8-467FD5FE1293", "loraport", "yunhorn_kgl_l_v1", "2"]
["EB5B0798-9B7F-474E-AAB8-467FD5FE1293", "loraport", "yunhorn_kgl_l_v1", "2"],
["deb03e28-ddcb-4e5d-aa31-d870a1f0f09b", "loraport", "yunhorn_kgl_c8_v1", "1"]
],
"serialports_list": {
"loraport": {
@ -124,13 +125,6 @@
}
},
"rs485devices": {
"deb03e28-ddcb-4e5d-aa31-d870a1f0f09b": {
"version": "yunhorn_ys_l_v1",
"num": "1",
"command": [
[8, 3, 0, 1, 0, 2, 149, 82]
]
},
"15394892-E8B0-4FF2-BC35-1BF380BD1B68": {
"version": "yunhorn_xsy_c_v1",
"num": "1",

View File

@ -32,7 +32,9 @@ func handleConn(conn net.Conn) {
//log.Println("readStr:",readStr)
//upper := strings.ToUpper(readStr)
//writeChan <- upper
go yunhorn_ys_l_v1(readStr)
// go yunhorn_ys_l_v1(readStr)
go yunhorn_wireless(readStr)
case stop := <-stopChan:
if stop {
log.Println("stop channel")
@ -62,7 +64,7 @@ func readConn(conn net.Conn, readChan chan<- []byte, stopChan chan<- bool) {
//log.Println("kkdata:",kkdata)
case <-time.After(50 * time.Millisecond): //上面的ch如果一直没数据会阻塞那么select也会检测其他case条件检测到后3秒超时
// log.Println("超时")
if len(Rdata) > 3 {
if len(Rdata) > 4 {
readChan <- Rdata
Rdata = make([]byte, 0)
}

View File

@ -22,6 +22,50 @@ type Device struct {
DATA map[string]interface{} `json:"data"`
}
//处理通过tcp发送过来的数据
func yunhorn_wireless(data_buf []byte){
//至少5个字节数据
if len(data_buf)>4 {
adrh := data_buf[0]
adrl := data_buf[1]
if adrh==0 && adrl==0 {
go yunhorn_ys_l_v1(readStr)
}else{
dataType := data_buf[2]
data_int := Bytes2Bits(data_buf[3:4])
data := data_int[0]
//第3个字节表示本数据帧的类型00表示NPN数据类型01表示磁开关数据类型02表示485传感器上报数据类型03表示485传感器数据采集类型
if dataType !=3 {
for _,item range conf.WIRELESSSLAVEDEVICES{
//数据是否需要反转,检测到有信号是1的情况
if item.flip{
if data==0{
data = 1
}else{
data = 0
}
}
var device Device
//TODO 配置device
device.ID = item.id
device.VERSION = item.VERSION
device.ONLINE = true
device.DATA = data
send_data(1005, device)
}
}
}
}
}
func yunhorn_xdy_l_v1(data_buf []byte){
}
func yunhorn_lora_l_v1(data_buf []byte) {
// for _, i := range conf.RS485DEVICES {