diff --git a/loadconfig.go b/loadconfig.go
index 21af667..d8a6d10 100644
--- a/loadconfig.go
+++ b/loadconfig.go
@@ -4,10 +4,10 @@ import (
 	"database/sql"
 	"encoding/json"
 	_ "github.com/mattn/go-sqlite3"
-	"os"
-	"time"
-	"strconv"
 	"log"
+	"os"
+	"strconv"
+	"time"
 )
 
 type Traffic struct {
@@ -27,7 +27,7 @@ type Conf struct {
 	WEBSOCKETURL     []string                `json:"websocketurl"`
 	POST_TO_SERVER   string                  `json:"post_to_server"`
 	DEBUG            bool                    `json:"debug"`
-	OPENSERIAL            bool                    `json:"openserial"`
+	OPENSERIAL       bool                    `json:"openserial"`
 }
 
 type Gateway_info struct {
@@ -64,7 +64,6 @@ var conf Conf
 var DEVICEDATAS Devicedatas
 var demoDevice Device
 
-
 var db, _ = sql.Open("sqlite3", "./db/gateway.db")
 
 // 加载配置文件
@@ -87,16 +86,14 @@ func init() {
 	}
 	DEVICEDATAS.Unlock()
 
-
-	demoDevice.ID="deb03e28-ddcb-4e5d-aa31-d870a1f0f09b"
-	demoDevice.VERSION="yunhorn_kgl_c8_v1"
+	demoDevice.ID = "deb03e28-ddcb-4e5d-aa31-d870a1f0f09b"
+	demoDevice.VERSION = "yunhorn_kgl_c8_v1"
 	demoDevice.DATA = make(map[string]interface{})
-	for a:=0;a<8;a++ {
-    demoDevice.DATA["data"+strconv.Itoa(a+1)]=0
-  }
-	demoDevice.ONLINE=true
-	log.Println("init demoDevice success:",demoDevice)
-
+	for a := 0; a < 8; a++ {
+		demoDevice.DATA["data"+strconv.Itoa(a+1)] = 0
+	}
+	demoDevice.ONLINE = true
+	log.Println("init demoDevice success:", demoDevice)
 
 	dbdata_init()
 
@@ -119,7 +116,7 @@ func dbdata_init() {
 		rows.Close()
 	}
 	//在原本没有db文件的情况下调用 会报错
-// rows.Close()
+	// rows.Close()
 	rows, err = db.Query("SELECT traffic FROM traffic t where datetime(t.create_time) > datetime('now','start of day','-1 day') order by id DESC limit 1 ")
 	if err != nil {
 		traffic_data.TRAFFIC = 0
diff --git a/main.go b/main.go
index e972dd5..9d863c9 100644
--- a/main.go
+++ b/main.go
@@ -3,8 +3,8 @@ package main
 import (
 	"github.com/robfig/cron"
 	"log"
-	"os"
 	"net"
+	"os"
 )
 
 var err error
@@ -13,13 +13,13 @@ func main() {
 	go gw_router()
 	go serial_run()
 	c := cron.New()
-	 send_data(1001)
+	send_data(1001)
 	c.AddFunc("0, *, *, *, *, *", func() {
-		 send_data(1001)
+		send_data(1001)
 	})
 	// devices := []Device{}
-	c.AddFunc("*/10, *, *, *, *, *", func(){
-			// log.Println(string(build_data(1001,devices)))
+	c.AddFunc("*/10, *, *, *, *, *", func() {
+		// log.Println(string(build_data(1001,devices)))
 	})
 
 	c.AddFunc("0, */10, *, *, *, *", savedata_cron)
@@ -28,22 +28,22 @@ func main() {
 	c.Start()
 
 	listener, err := net.Listen("tcp", "0.0.0.0:10090")
-    if err != nil {
-        log.Printf("listen fail, err: %v\n", err)
-        return
-    }
+	if err != nil {
+		log.Printf("listen fail, err: %v\n", err)
+		return
+	}
 
-    for {
-        conn, err := listener.Accept()
-        if err != nil {
-            log.Printf("accept fail, err: %v\n", err)
-            continue
-        }
- //       go process(conn)
-	go handleConn(conn)
- }
+	for {
+		conn, err := listener.Accept()
+		if err != nil {
+			log.Printf("accept fail, err: %v\n", err)
+			continue
+		}
+		//       go process(conn)
+		go handleConn(conn)
+	}
 
-//	select {}
+	//	select {}
 
 }
 
diff --git a/router.go b/router.go
index 1a81af3..235257c 100644
--- a/router.go
+++ b/router.go
@@ -205,7 +205,7 @@ func seat_api(c *gin.Context) {
 	for _, i := range conf.GATEWAY_INFO.CONFIG {
 		arr := get_seat_device_data(i.ID)
 		version, num := arr[0], arr[1]
-		log.Println("conf.data:",i.DATA)
+		log.Println("conf.data:", i.DATA)
 		for k, j := range i.DATA {
 			if DEVICEDATAS.DATA[version+"_"+num].DATA != nil {
 				if DEVICEDATAS.DATA[version+"_"+num].DATA["data"+strconv.Itoa(k+1)] != nil {
diff --git a/serial_init.go b/serial_init.go
index 3180bb6..ba887b8 100644
--- a/serial_init.go
+++ b/serial_init.go
@@ -21,7 +21,7 @@ func serial_run() {
 		port_arr = append(port_arr, ports_arr[i])
 	}
 	// 解析串口配置
-	if conf.OPENSERIAL{
+	if conf.OPENSERIAL {
 		for _, i := range port_arr {
 			var PARITY serial.Parity
 			switch conf.SERIALPORTS_LIST[i].PARITY {
diff --git a/tcpserver.go b/tcpserver.go
index f45b0c2..aa68cde 100644
--- a/tcpserver.go
+++ b/tcpserver.go
@@ -11,7 +11,6 @@ import (
 	// "go-study/socket/config"
 )
 
-
 func handleConn(conn net.Conn) {
 	defer conn.Close()
 
@@ -37,12 +36,12 @@ func handleConn(conn net.Conn) {
 				break
 			}
 		case <-time.After(5000 * time.Millisecond):
-			n,err := conn.Write(heartbeat)
-			if err != nil{
-				log.Println("write msg error!",err)
+			n, err := conn.Write(heartbeat)
+			if err != nil {
+				log.Println("write msg error!", err)
 				stopChan <- true
-			}else{
-				log.Println("write msg success!",n)
+			} else {
+				log.Println("write msg success!", n)
 			}
 		}
 	}
@@ -60,9 +59,9 @@ 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) > 3 {
 					readChan <- Rdata
-				Rdata = make([]byte,0)
+					Rdata = make([]byte, 0)
 				}
 				//strData := string(Rdata)
 				//Rdata = make([]byte,0)
@@ -84,7 +83,7 @@ func readConn(conn net.Conn, readChan chan<- []byte, stopChan chan<- bool) {
 		}
 		log.Println(DEVICEDATAS)
 
-		log.Println("read.data:",Bytes2Bits(data[3:4]))
+		log.Println("read.data:", Bytes2Bits(data[3:4]))
 
 		data_buf <- data
 	}
diff --git a/worker.go b/worker.go
index 512683e..7b7eed1 100644
--- a/worker.go
+++ b/worker.go
@@ -1,481 +1,484 @@
 package main
 
 import (
-    "encoding/binary"
-    "github.com/tarm/serial"
-    "log"
-    "strconv"
-    "sync"
-    "math/rand"
+	"encoding/binary"
+	"github.com/tarm/serial"
+	"log"
+	"math/rand"
+	"strconv"
+	"sync"
 )
 
 type Devicedatas struct {
-    sync.RWMutex
-    DATA map[string]Device
+	sync.RWMutex
+	DATA map[string]Device
 }
 
-
 type Device struct {
-    sync.RWMutex
-    ID      string                 `json:"id"`
-    VERSION string                 `json:"version"`
-    ONLINE  bool                   `json:"online"`
-    DATA    map[string]interface{} `json:"data"`
+	sync.RWMutex
+	ID      string                 `json:"id"`
+	VERSION string                 `json:"version"`
+	ONLINE  bool                   `json:"online"`
+	DATA    map[string]interface{} `json:"data"`
 }
 
-func yunhorn_ys_l_v1(data_buf []byte){
+func yunhorn_ys_l_v1(data_buf []byte) {
 
-  // for _, i := range conf.RS485DEVICES {
-    // log.Println("################################",i)
-  // }
+	// for _, i := range conf.RS485DEVICES {
+	// log.Println("################################",i)
+	// }
 
 	//log.Println(data_buf)
-  // for i, k := range b_buf {
-      // log.Println(binary.BigEndian.Uint16(append([]byte{0x00}, k))
-  // }
+	// for i, k := range b_buf {
+	// log.Println(binary.BigEndian.Uint16(append([]byte{0x00}, k))
+	// }
 
-  log.Println("ys_l_v1_data:",data_buf)
-  data_int := Bytes2Bits(data_buf[3:4])
+	// log.Println("ys_l_v1_data:",data_buf)
+	data_int := Bytes2Bits(data_buf[3:4])
+	data_int0 := Bytes2Bits(data_buf[0:1])
+	data_int1 := Bytes2Bits(data_buf[1:2])
+	data_int2 := Bytes2Bits(data_buf[2:3])
 
-  log.Println("data_int:",data_int[0])
+	log.Println("data_int:", data_int[0])
+	log.Printf("ADRH:%d,ADRL:%d,dataType:%d,", data_int0[0], data_int1[0], data_int2[0])
 	var device Device
-	device.ID=demoDevice.ID
-	device.VERSION=demoDevice.VERSION
-	device.ONLINE=demoDevice.ONLINE
+	device.ID = demoDevice.ID
+	device.VERSION = demoDevice.VERSION
+	device.ONLINE = demoDevice.ONLINE
 
-  demoDevice.DATA["data"+strconv.Itoa(1)]=rand.Intn(2)
-  demoDevice.DATA["data"+strconv.Itoa(2)]=rand.Intn(2)
-  demoDevice.DATA["data"+strconv.Itoa(3)]=rand.Intn(2)
+	demoDevice.DATA["data"+strconv.Itoa(1)] = rand.Intn(2)
+	demoDevice.DATA["data"+strconv.Itoa(2)] = rand.Intn(2)
+	demoDevice.DATA["data"+strconv.Itoa(3)] = rand.Intn(2)
 
-  demoDevice.DATA["data"+strconv.Itoa(7)]=data_int[0]
-  demoDevice.DATA["data"+strconv.Itoa(8)]=rand.Intn(2)
-	device.DATA=demoDevice.DATA
+	demoDevice.DATA["data"+strconv.Itoa(7)] = data_int[0]
+	demoDevice.DATA["data"+strconv.Itoa(8)] = rand.Intn(2)
+	device.DATA = demoDevice.DATA
 
 	if conf.DEBUG {
-      log.Println(device)
-  }
-    send_data(1005, device)
+		log.Println(device)
+	}
+	send_data(1005, device)
 
 }
 
 func yunhorn_lorawan_l_v1(s *serial.Port) {
-    for {
-        buf := make([]byte, 128)
-        b_buf := make([]byte, 0)
-        nn := 0
-        for {
-            n, err := s.Read(buf)
-            nn = n + nn
-            b_buf = append(b_buf, buf[:n]...)
-            if err != nil {
-                break
-            }
-        }
-        switch nn {
-        case 4:
-            go yunhorn_kgl_l_v1(b_buf[:nn])
-        }
-    }
+	for {
+		buf := make([]byte, 128)
+		b_buf := make([]byte, 0)
+		nn := 0
+		for {
+			n, err := s.Read(buf)
+			nn = n + nn
+			b_buf = append(b_buf, buf[:n]...)
+			if err != nil {
+				break
+			}
+		}
+		switch nn {
+		case 4:
+			go yunhorn_kgl_l_v1(b_buf[:nn])
+		}
+	}
 }
 
 func yunhorn_kgl_l_v1(data_buf []byte) {
-    log.Println(data_buf)
-    var device Device
-    device.Lock()
-    device.ID = "4E5D52DD-EB81-43C0-A2B6-04E432412EBA"
-    device.VERSION = "yunhorn_kgl_l_v1"
-    device.ONLINE = true
-    device.DATA = make(map[string]interface{})
-    device.DATA["data1"] = 0
-    device.Unlock()
-    DEVICEDATAS.Lock()
-    DEVICEDATAS.DATA["yunhorn_kgl_l_v1_1"] = device
-    DEVICEDATAS.Unlock()
+	log.Println(data_buf)
+	var device Device
+	device.Lock()
+	device.ID = "4E5D52DD-EB81-43C0-A2B6-04E432412EBA"
+	device.VERSION = "yunhorn_kgl_l_v1"
+	device.ONLINE = true
+	device.DATA = make(map[string]interface{})
+	device.DATA["data1"] = 0
+	device.Unlock()
+	DEVICEDATAS.Lock()
+	DEVICEDATAS.DATA["yunhorn_kgl_l_v1_1"] = device
+	DEVICEDATAS.Unlock()
 
-    if conf.DEBUG {
-        log.Println(device)
-    }
+	if conf.DEBUG {
+		log.Println(device)
+	}
 
-    send_data(1005, device)
+	send_data(1005, device)
 }
 
 // 采集并解析水表数据
 func yunhorn_sb_c_v1(s *serial.Port, device_id string, command [][]byte, num string) {
-    _, err = s.Write([]byte(command[0]))
-    check(err)
-    if conf.DEBUG {
-        log.Printf("命令:\t%x", []byte(command[0]))
-    }
-    buf := make([]byte, 128)
-    b_buf := make([]byte, 0)
-    var nn int
-    for {
-        n, err := s.Read(buf)
-        nn = n + nn
-        b_buf = append(b_buf, buf[:n]...)
-        if err != nil {
-            break
-        }
-    }
-    if nn != 39 {
-        return
-    }
-    data_buf := b_buf[17 : nn-20]
+	_, err = s.Write([]byte(command[0]))
+	check(err)
+	if conf.DEBUG {
+		log.Printf("命令:\t%x", []byte(command[0]))
+	}
+	buf := make([]byte, 128)
+	b_buf := make([]byte, 0)
+	var nn int
+	for {
+		n, err := s.Read(buf)
+		nn = n + nn
+		b_buf = append(b_buf, buf[:n]...)
+		if err != nil {
+			break
+		}
+	}
+	if nn != 39 {
+		return
+	}
+	data_buf := b_buf[17 : nn-20]
 
-    var device Device
-    device.Lock()
-    device.ID = device_id
-    device.VERSION = "yunhorn_sb_c_v1"
-    device.ONLINE = true
-    device.DATA = make(map[string]interface{})
-    device.DATA["totalWater"] = binary.BigEndian.Uint16(data_buf)
-    device.Unlock()
-    DEVICEDATAS.Lock()
-    DEVICEDATAS.DATA["yunhorn_sb_c_v1_"+num] = device
-    DEVICEDATAS.Unlock()
+	var device Device
+	device.Lock()
+	device.ID = device_id
+	device.VERSION = "yunhorn_sb_c_v1"
+	device.ONLINE = true
+	device.DATA = make(map[string]interface{})
+	device.DATA["totalWater"] = binary.BigEndian.Uint16(data_buf)
+	device.Unlock()
+	DEVICEDATAS.Lock()
+	DEVICEDATAS.DATA["yunhorn_sb_c_v1_"+num] = device
+	DEVICEDATAS.Unlock()
 
-    if conf.DEBUG {
-        log.Println(device)
-    }
+	if conf.DEBUG {
+		log.Println(device)
+	}
 }
 
 // 采集并解析洗手液数据
 func yunhorn_xsy_l_v1(s *serial.Port, device_id string, command [][]byte, num string) {
-    _, err = s.Write([]byte(command[0]))
-    check(err)
-    if conf.DEBUG {
-        log.Printf("命令:\t%x", []byte(command[0]))
-    }
-    buf := make([]byte, 128)
-    b_buf := make([]byte, 0)
-    var nn int
-    for {
-        n, err := s.Read(buf)
-        nn = n + nn
-        b_buf = append(b_buf, buf[:n]...)
-        if err != nil {
-            break
-        }
-    }
-    if nn != 9 {
-        return
-    }
-    data_buf := b_buf[3 : nn-4]
+	_, err = s.Write([]byte(command[0]))
+	check(err)
+	if conf.DEBUG {
+		log.Printf("命令:\t%x", []byte(command[0]))
+	}
+	buf := make([]byte, 128)
+	b_buf := make([]byte, 0)
+	var nn int
+	for {
+		n, err := s.Read(buf)
+		nn = n + nn
+		b_buf = append(b_buf, buf[:n]...)
+		if err != nil {
+			break
+		}
+	}
+	if nn != 9 {
+		return
+	}
+	data_buf := b_buf[3 : nn-4]
 
-    DEVICEDATAS.RLock()
-    var olddata = DEVICEDATAS.DATA["yunhorn_xsy_l_v1_"+num]
-    DEVICEDATAS.RUnlock()
+	DEVICEDATAS.RLock()
+	var olddata = DEVICEDATAS.DATA["yunhorn_xsy_l_v1_"+num]
+	DEVICEDATAS.RUnlock()
 
-    var device Device
-    device.Lock()
-    device.ID = device_id
-    device.VERSION = "yunhorn_xsy_l_v1"
-    device.ONLINE = true
-    device.DATA = make(map[string]interface{})
-    device.DATA["data"] = binary.BigEndian.Uint16(data_buf)
-    device.Unlock()
-    DEVICEDATAS.Lock()
-    DEVICEDATAS.DATA["yunhorn_xsy_l_v1_"+num] = device
-    DEVICEDATAS.Unlock()
+	var device Device
+	device.Lock()
+	device.ID = device_id
+	device.VERSION = "yunhorn_xsy_l_v1"
+	device.ONLINE = true
+	device.DATA = make(map[string]interface{})
+	device.DATA["data"] = binary.BigEndian.Uint16(data_buf)
+	device.Unlock()
+	DEVICEDATAS.Lock()
+	DEVICEDATAS.DATA["yunhorn_xsy_l_v1_"+num] = device
+	DEVICEDATAS.Unlock()
 
-    if device.DATA["data"] != olddata.DATA["data"] {
-        send_data(1005, device)
-    }
-    if conf.DEBUG {
-        log.Println(device)
-    }
+	if device.DATA["data"] != olddata.DATA["data"] {
+		send_data(1005, device)
+	}
+	if conf.DEBUG {
+		log.Println(device)
+	}
 }
 
 // 采集并解析电表数据
 func yunhorn_db_c_v1(s *serial.Port, device_id string, command [][]byte, num string) {
-    _, err = s.Write([]byte(command[0]))
-    check(err)
-    if conf.DEBUG {
-        log.Printf("命令:\t%x", []byte(command[0]))
-    }
-    buf := make([]byte, 128)
-    bb_buf := make([]byte, 0)
-    var nn int
-    for {
-        n, err := s.Read(buf)
-        nn = n + nn
-        bb_buf = append(bb_buf, buf[:n]...)
-        if err != nil {
-            break
-        }
-    }
-    if nn != 20 {
-        return
-    }
-    data_buf := bb_buf[nn-6 : nn-2]
-    for i, x := range data_buf {
-        data_buf[i] = x - 0x33
+	_, err = s.Write([]byte(command[0]))
+	check(err)
+	if conf.DEBUG {
+		log.Printf("命令:\t%x", []byte(command[0]))
+	}
+	buf := make([]byte, 128)
+	bb_buf := make([]byte, 0)
+	var nn int
+	for {
+		n, err := s.Read(buf)
+		nn = n + nn
+		bb_buf = append(bb_buf, buf[:n]...)
+		if err != nil {
+			break
+		}
+	}
+	if nn != 20 {
+		return
+	}
+	data_buf := bb_buf[nn-6 : nn-2]
+	for i, x := range data_buf {
+		data_buf[i] = x - 0x33
 
-    }
-    Len := len(data_buf) - 1
-    for i, k := 0, Len; i < k; i++ {
-        data_buf[i], data_buf[k] = data_buf[k], data_buf[i]
-        k--
-    }
-    U8 := make([]byte, 0)
-    for i := 0; i < 4; i++ {
-        U8 = append(U8, data_buf[i]>>4)
-        U8 = append(U8, data_buf[i]<<4>>4)
-    }
-    b_buf := make([]byte, 0)
-    var db_data uint32
-    b_buf = append([]byte{0, 0, 0}, U8[0])
-    db_data = binary.BigEndian.Uint32(b_buf) * 10000000
-    b_buf = append([]byte{0, 0, 0}, U8[1])
-    db_data = db_data + binary.BigEndian.Uint32(b_buf)*1000000
-    b_buf = append([]byte{0, 0, 0}, U8[2])
-    db_data = db_data + binary.BigEndian.Uint32(b_buf)*100000
-    b_buf = append([]byte{0, 0, 0}, U8[3])
-    db_data = db_data + binary.BigEndian.Uint32(b_buf)*10000
-    b_buf = append([]byte{0, 0, 0}, U8[4])
-    db_data = db_data + binary.BigEndian.Uint32(b_buf)*1000
-    b_buf = append([]byte{0, 0, 0}, U8[5])
-    db_data = db_data + binary.BigEndian.Uint32(b_buf)*100
-    b_buf = append([]byte{0, 0, 0}, U8[6])
-    db_data = db_data + binary.BigEndian.Uint32(b_buf)*10
-    b_buf = append([]byte{0, 0, 0}, U8[7])
-    db_data = db_data + binary.BigEndian.Uint32(b_buf)
+	}
+	Len := len(data_buf) - 1
+	for i, k := 0, Len; i < k; i++ {
+		data_buf[i], data_buf[k] = data_buf[k], data_buf[i]
+		k--
+	}
+	U8 := make([]byte, 0)
+	for i := 0; i < 4; i++ {
+		U8 = append(U8, data_buf[i]>>4)
+		U8 = append(U8, data_buf[i]<<4>>4)
+	}
+	b_buf := make([]byte, 0)
+	var db_data uint32
+	b_buf = append([]byte{0, 0, 0}, U8[0])
+	db_data = binary.BigEndian.Uint32(b_buf) * 10000000
+	b_buf = append([]byte{0, 0, 0}, U8[1])
+	db_data = db_data + binary.BigEndian.Uint32(b_buf)*1000000
+	b_buf = append([]byte{0, 0, 0}, U8[2])
+	db_data = db_data + binary.BigEndian.Uint32(b_buf)*100000
+	b_buf = append([]byte{0, 0, 0}, U8[3])
+	db_data = db_data + binary.BigEndian.Uint32(b_buf)*10000
+	b_buf = append([]byte{0, 0, 0}, U8[4])
+	db_data = db_data + binary.BigEndian.Uint32(b_buf)*1000
+	b_buf = append([]byte{0, 0, 0}, U8[5])
+	db_data = db_data + binary.BigEndian.Uint32(b_buf)*100
+	b_buf = append([]byte{0, 0, 0}, U8[6])
+	db_data = db_data + binary.BigEndian.Uint32(b_buf)*10
+	b_buf = append([]byte{0, 0, 0}, U8[7])
+	db_data = db_data + binary.BigEndian.Uint32(b_buf)
 
-    var device Device
-    device.Lock()
-    device.ID = device_id
-    device.VERSION = "yunhorn_db_c_v1"
-    device.ONLINE = true
-    device.DATA = make(map[string]interface{})
-    device.DATA["totalElectric"] = float32(db_data) / 100
-    device.Unlock()
-    DEVICEDATAS.Lock()
-    DEVICEDATAS.DATA["yunhorn_db_c_v1_"+num] = device
-    DEVICEDATAS.Unlock()
+	var device Device
+	device.Lock()
+	device.ID = device_id
+	device.VERSION = "yunhorn_db_c_v1"
+	device.ONLINE = true
+	device.DATA = make(map[string]interface{})
+	device.DATA["totalElectric"] = float32(db_data) / 100
+	device.Unlock()
+	DEVICEDATAS.Lock()
+	DEVICEDATAS.DATA["yunhorn_db_c_v1_"+num] = device
+	DEVICEDATAS.Unlock()
 
-    if conf.DEBUG {
-        log.Println(device)
-    }
+	if conf.DEBUG {
+		log.Println(device)
+	}
 }
 
 // 采集并解析空气数据
 func yunhorn_kq_c_v1(s *serial.Port, device_id string, command [][]byte, num string) {
-    _, err = s.Write([]byte(command[0]))
-    check(err)
-    if conf.DEBUG {
-        log.Printf("命令:\t%x", []byte(command[0]))
-    }
-    buf := make([]byte, 128)
-    b_buf := make([]byte, 0)
-    var nn int
-    for {
-        n, err := s.Read(buf)
-        nn = n + nn
-        b_buf = append(b_buf, buf[:n]...)
-        if err != nil {
-            break
-        }
-    }
-    if nn != 19 {
-        return
-    }
-    data_buf := b_buf[3 : nn-2]
+	_, err = s.Write([]byte(command[0]))
+	check(err)
+	if conf.DEBUG {
+		log.Printf("命令:\t%x", []byte(command[0]))
+	}
+	buf := make([]byte, 128)
+	b_buf := make([]byte, 0)
+	var nn int
+	for {
+		n, err := s.Read(buf)
+		nn = n + nn
+		b_buf = append(b_buf, buf[:n]...)
+		if err != nil {
+			break
+		}
+	}
+	if nn != 19 {
+		return
+	}
+	data_buf := b_buf[3 : nn-2]
 
-    var device Device
-    device.Lock()
-    device.ID = device_id
-    device.VERSION = "yunhorn_kq_c_v1"
-    device.ONLINE = true
-    device.DATA = make(map[string]interface{})
-    device.DATA["二氧化碳"] = float32(binary.BigEndian.Uint16(data_buf[0:2]))
-    device.DATA["TVOC"] = float32(binary.BigEndian.Uint16(data_buf[2:4])) / 10
-    device.DATA["甲醛"] = float32(binary.BigEndian.Uint16(data_buf[4:6])) / 10
-    device.DATA["pm2.5"] = float32(binary.BigEndian.Uint16(data_buf[6:8]))
-    device.DATA["湿度"] = float32(binary.BigEndian.Uint16(data_buf[8:10])) / 10
-    device.DATA["温度"] = float32(binary.BigEndian.Uint16(data_buf[10:13])) / 10
-    device.DATA["PM10"] = float32(binary.BigEndian.Uint16(data_buf[12:14]))
-    device.Unlock()
-    DEVICEDATAS.Lock()
-    DEVICEDATAS.DATA["yunhorn_kq_c_v1_"+num] = device
-    DEVICEDATAS.Unlock()
+	var device Device
+	device.Lock()
+	device.ID = device_id
+	device.VERSION = "yunhorn_kq_c_v1"
+	device.ONLINE = true
+	device.DATA = make(map[string]interface{})
+	device.DATA["二氧化碳"] = float32(binary.BigEndian.Uint16(data_buf[0:2]))
+	device.DATA["TVOC"] = float32(binary.BigEndian.Uint16(data_buf[2:4])) / 10
+	device.DATA["甲醛"] = float32(binary.BigEndian.Uint16(data_buf[4:6])) / 10
+	device.DATA["pm2.5"] = float32(binary.BigEndian.Uint16(data_buf[6:8]))
+	device.DATA["湿度"] = float32(binary.BigEndian.Uint16(data_buf[8:10])) / 10
+	device.DATA["温度"] = float32(binary.BigEndian.Uint16(data_buf[10:13])) / 10
+	device.DATA["PM10"] = float32(binary.BigEndian.Uint16(data_buf[12:14]))
+	device.Unlock()
+	DEVICEDATAS.Lock()
+	DEVICEDATAS.DATA["yunhorn_kq_c_v1_"+num] = device
+	DEVICEDATAS.Unlock()
 
-    if conf.DEBUG {
-        log.Println(device)
-    }
+	if conf.DEBUG {
+		log.Println(device)
+	}
 }
 
 // 采集并解析氨气数据
 func yunhorn_aq_c_v1(s *serial.Port, device_id string, command [][]byte, num string) {
-    _, err = s.Write([]byte(command[0]))
-    check(err)
-    if conf.DEBUG {
-        log.Printf("命令:\t%x", []byte(command[0]))
-    }
-    buf := make([]byte, 128)
-    b_buf := make([]byte, 0)
-    var nn int
-    for {
-        n, err := s.Read(buf)
-        nn = n + nn
-        b_buf = append(b_buf, buf[:n]...)
-        if err != nil {
-            break
-        }
-    }
-    if nn != 7 {
-        return
-    }
-    data_buf := b_buf[3 : nn-2]
+	_, err = s.Write([]byte(command[0]))
+	check(err)
+	if conf.DEBUG {
+		log.Printf("命令:\t%x", []byte(command[0]))
+	}
+	buf := make([]byte, 128)
+	b_buf := make([]byte, 0)
+	var nn int
+	for {
+		n, err := s.Read(buf)
+		nn = n + nn
+		b_buf = append(b_buf, buf[:n]...)
+		if err != nil {
+			break
+		}
+	}
+	if nn != 7 {
+		return
+	}
+	data_buf := b_buf[3 : nn-2]
 
-    var device Device
-    device.Lock()
-    device.ID = device_id
-    device.VERSION = "yunhorn_aq_c_v1"
-    device.ONLINE = true
-    device.DATA = make(map[string]interface{})
-    device.DATA["氨气"] = binary.BigEndian.Uint16(data_buf)
-    device.Unlock()
-    DEVICEDATAS.Lock()
-    DEVICEDATAS.DATA["yunhorn_aq_c_v1_"+num] = device
-    DEVICEDATAS.Unlock()
+	var device Device
+	device.Lock()
+	device.ID = device_id
+	device.VERSION = "yunhorn_aq_c_v1"
+	device.ONLINE = true
+	device.DATA = make(map[string]interface{})
+	device.DATA["氨气"] = binary.BigEndian.Uint16(data_buf)
+	device.Unlock()
+	DEVICEDATAS.Lock()
+	DEVICEDATAS.DATA["yunhorn_aq_c_v1_"+num] = device
+	DEVICEDATAS.Unlock()
 
-    if conf.DEBUG {
-        log.Println(device)
-    }
+	if conf.DEBUG {
+		log.Println(device)
+	}
 }
 
 // 采集并解析硫化氢数据
 func yunhorn_lhq_c_v1(s *serial.Port, device_id string, command [][]byte, num string) {
-    _, err = s.Write([]byte(command[0]))
-    check(err)
-    if conf.DEBUG {
-        log.Printf("命令:\t%x", []byte(command[0]))
-    }
-    buf := make([]byte, 128)
-    b_buf := make([]byte, 0)
-    var nn int
-    for {
-        n, err := s.Read(buf)
-        nn = n + nn
-        b_buf = append(b_buf, buf[:n]...)
-        if err != nil {
-            break
-        }
-    }
-    if nn != 7 {
-        return
-    }
-    data_buf := b_buf[3 : nn-2]
+	_, err = s.Write([]byte(command[0]))
+	check(err)
+	if conf.DEBUG {
+		log.Printf("命令:\t%x", []byte(command[0]))
+	}
+	buf := make([]byte, 128)
+	b_buf := make([]byte, 0)
+	var nn int
+	for {
+		n, err := s.Read(buf)
+		nn = n + nn
+		b_buf = append(b_buf, buf[:n]...)
+		if err != nil {
+			break
+		}
+	}
+	if nn != 7 {
+		return
+	}
+	data_buf := b_buf[3 : nn-2]
 
-    var device Device
-    device.Lock()
-    device.ID = device_id
-    device.VERSION = "yunhorn_lhq_c_v1"
-    device.ONLINE = true
-    device.DATA = make(map[string]interface{})
-    device.DATA["硫化氢"] = binary.BigEndian.Uint16(data_buf)
-    device.Unlock()
-    DEVICEDATAS.Lock()
-    DEVICEDATAS.DATA["yunhorn_lhq_c_v1_"+num] = device
-    DEVICEDATAS.Unlock()
+	var device Device
+	device.Lock()
+	device.ID = device_id
+	device.VERSION = "yunhorn_lhq_c_v1"
+	device.ONLINE = true
+	device.DATA = make(map[string]interface{})
+	device.DATA["硫化氢"] = binary.BigEndian.Uint16(data_buf)
+	device.Unlock()
+	DEVICEDATAS.Lock()
+	DEVICEDATAS.DATA["yunhorn_lhq_c_v1_"+num] = device
+	DEVICEDATAS.Unlock()
 
-    if conf.DEBUG {
-        log.Println(device)
-    }
+	if conf.DEBUG {
+		log.Println(device)
+	}
 }
 
 // 采集并解析开关量数据
 func yunhorn_kgl_c8_v1(s *serial.Port, device_id string, command [][]byte, num string) {
-    buf := make([]byte, 128)
-    b_buf := make([]byte, 0)
-    for _, i := range command {
-        _, err = s.Write([]byte(i))
-        check(err)
-        if conf.DEBUG {
-            log.Printf("命令:\t%x", []byte(i))
-        }
-        _, err = s.Read(buf)
-        if err != nil {
-            return
-        }
-        b_buf = append(b_buf, buf[3])
-    }
-    DEVICEDATAS.RLock()
-    var olddata = DEVICEDATAS.DATA["yunhorn_kgl_c8_v1_"+num]
-    DEVICEDATAS.RUnlock()
-    var device Device
-    device.Lock()
-    device.ID = device_id
-    device.VERSION = "yunhorn_kgl_c8_v1"
-    device.ONLINE = true
-    device.DATA = make(map[string]interface{})
-    for i, k := range b_buf {
-        device.DATA["data"+strconv.Itoa(i+1)] = binary.BigEndian.Uint16(append([]byte{0x00}, k))
-    }
-    device.Unlock()
-    DEVICEDATAS.Lock()
-    DEVICEDATAS.DATA["yunhorn_kgl_c8_v1_"+num] = device
-    DEVICEDATAS.Unlock()
-    for i, k := range device.DATA {
-        if k != olddata.DATA[i] {
-            send_data(1005, device)
-            break
-        }
-    }
-    if conf.DEBUG {
-        log.Println(device)
-    }
+	buf := make([]byte, 128)
+	b_buf := make([]byte, 0)
+	for _, i := range command {
+		_, err = s.Write([]byte(i))
+		check(err)
+		if conf.DEBUG {
+			log.Printf("命令:\t%x", []byte(i))
+		}
+		_, err = s.Read(buf)
+		if err != nil {
+			return
+		}
+		b_buf = append(b_buf, buf[3])
+	}
+	DEVICEDATAS.RLock()
+	var olddata = DEVICEDATAS.DATA["yunhorn_kgl_c8_v1_"+num]
+	DEVICEDATAS.RUnlock()
+	var device Device
+	device.Lock()
+	device.ID = device_id
+	device.VERSION = "yunhorn_kgl_c8_v1"
+	device.ONLINE = true
+	device.DATA = make(map[string]interface{})
+	for i, k := range b_buf {
+		device.DATA["data"+strconv.Itoa(i+1)] = binary.BigEndian.Uint16(append([]byte{0x00}, k))
+	}
+	device.Unlock()
+	DEVICEDATAS.Lock()
+	DEVICEDATAS.DATA["yunhorn_kgl_c8_v1_"+num] = device
+	DEVICEDATAS.Unlock()
+	for i, k := range device.DATA {
+		if k != olddata.DATA[i] {
+			send_data(1005, device)
+			break
+		}
+	}
+	if conf.DEBUG {
+		log.Println(device)
+	}
 }
 
 // 采集并解析开关量数据
 func yunhorn_kgl_c16_v1(s *serial.Port, device_id string, command [][]byte, num string) {
-    buf := make([]byte, 128)
-    _, err = s.Write([]byte(command[0]))
-    check(err)
-    if conf.DEBUG {
-        log.Printf("命令:\t%x", []byte(command[0]))
-    }
-    _, err = s.Read(buf)
-    if err != nil {
-        return
-    }
-    b_buf := Bytes2Bits(buf[3:5])
+	buf := make([]byte, 128)
+	_, err = s.Write([]byte(command[0]))
+	check(err)
+	if conf.DEBUG {
+		log.Printf("命令:\t%x", []byte(command[0]))
+	}
+	_, err = s.Read(buf)
+	if err != nil {
+		return
+	}
+	b_buf := Bytes2Bits(buf[3:5])
 
-    DEVICEDATAS.RLock()
-    var olddata = DEVICEDATAS.DATA["yunhorn_kgl_c16_v1_"+num]
-    DEVICEDATAS.RUnlock()
-    var device Device
-    device.Lock()
-    device.ID = device_id
-    device.VERSION = "yunhorn_kgl_c16_v1"
-    device.ONLINE = true
-    device.DATA = make(map[string]interface{})
-    for i, k := range b_buf {
-        device.DATA["data"+strconv.Itoa(i+1)] = k
-    }
-    device.Unlock()
-    DEVICEDATAS.Lock()
-    DEVICEDATAS.DATA["yunhorn_kgl_c16_v1_"+num] = device
-    DEVICEDATAS.Unlock()
-    for i, k := range device.DATA {
-        if k != olddata.DATA[i] {
-            send_data(1005, device)
-            break
-        }
-    }
-    if conf.DEBUG {
-        log.Println(device)
-    }
+	DEVICEDATAS.RLock()
+	var olddata = DEVICEDATAS.DATA["yunhorn_kgl_c16_v1_"+num]
+	DEVICEDATAS.RUnlock()
+	var device Device
+	device.Lock()
+	device.ID = device_id
+	device.VERSION = "yunhorn_kgl_c16_v1"
+	device.ONLINE = true
+	device.DATA = make(map[string]interface{})
+	for i, k := range b_buf {
+		device.DATA["data"+strconv.Itoa(i+1)] = k
+	}
+	device.Unlock()
+	DEVICEDATAS.Lock()
+	DEVICEDATAS.DATA["yunhorn_kgl_c16_v1_"+num] = device
+	DEVICEDATAS.Unlock()
+	for i, k := range device.DATA {
+		if k != olddata.DATA[i] {
+			send_data(1005, device)
+			break
+		}
+	}
+	if conf.DEBUG {
+		log.Println(device)
+	}
 }
 
 // byte数据转换成uint16
 func Bytes2Bits(data []byte) []uint16 {
-    dst := make([]uint16, 0)
-    for _, v := range data {
-        for i := 0; i < 8; i++ {
-            move := uint(i)
-            dst = append(dst, uint16((v>>move)&1))
-        }
-    }
-    return dst
+	dst := make([]uint16, 0)
+	for _, v := range data {
+		for i := 0; i < 8; i++ {
+			move := uint(i)
+			dst = append(dst, uint16((v>>move)&1))
+		}
+	}
+	return dst
 }