完善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, "adrh":0,
"adrl":0, "adrl":1,
"type":1, "type":1,
"version":"yunhorn_ys_l_v1", "version":"yunhorn_ys_l_v1",
"flip":true, "flip":true,
@ -110,7 +110,8 @@
], ],
"devices_list": [ "devices_list": [
["4E5D52DD-EB81-43C0-A2B6-04E432412EBA", "loraport", "yunhorn_kgl_l_v1", "1"], ["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": { "serialports_list": {
"loraport": { "loraport": {
@ -124,13 +125,6 @@
} }
}, },
"rs485devices": { "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": { "15394892-E8B0-4FF2-BC35-1BF380BD1B68": {
"version": "yunhorn_xsy_c_v1", "version": "yunhorn_xsy_c_v1",
"num": "1", "num": "1",

View File

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

View File

@ -22,6 +22,50 @@ type Device struct {
DATA map[string]interface{} `json:"data"` 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) { func yunhorn_lora_l_v1(data_buf []byte) {
// for _, i := range conf.RS485DEVICES { // for _, i := range conf.RS485DEVICES {