From 737abf6f2b66d917e6f2597473536c35f38c218b Mon Sep 17 00:00:00 2001 From: fish Date: Mon, 24 Jun 2019 12:11:57 +0800 Subject: [PATCH 1/3] =?UTF-8?q?aq=E6=95=B0=E6=8D=AE=E5=AE=8C=E5=96=84,h2s?= =?UTF-8?q?=E6=A0=A1=E5=87=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- router.go | 50 ++++++++++++++++++++++++++++++++------------------ tcpserver.go | 6 +++--- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/router.go b/router.go index 669689a..8f82ef7 100644 --- a/router.go +++ b/router.go @@ -362,6 +362,8 @@ func dealDatav3(data []byte) string{ // log.Println("data[9]",int64(data[9])) // log.Println("data[10]",int64(data[10])) + log.Println("aqdata|all:",data) + if data[6] == 0{ buffer.WriteString("-") } @@ -376,10 +378,10 @@ func dealDatav3(data []byte) string{ } buffer.WriteString(wdint2) - log.Println("wdfh",data[6]) + log.Println("aqdata|wdfh",data[6]) wddata := buffer.String() - log.Println("wddata",wddata) + log.Println("aqdata|wddata",wddata) buffer = new(bytes.Buffer) @@ -393,7 +395,7 @@ func dealDatav3(data []byte) string{ buffer.WriteString(sdint2) sddata := buffer.String() - log.Println("sddata",sddata) + log.Println("aqdata|sddata",sddata) buffer = new(bytes.Buffer) @@ -407,38 +409,50 @@ func dealDatav3(data []byte) string{ buffer.WriteString(nh3int2) nh3data := buffer.String() - log.Println("nh3",nh3data) - log.Println("h2s",data[13]) + log.Println("aqdata|nh3",nh3data) + + + buffer = new(bytes.Buffer) + h2sint1 := strconv.Itoa(int(data[13])) + buffer.WriteString(nh3int1) + buffer.WriteString(".") + h2sint2 := strconv.Itoa(int(data[14])) + if int64(data[14])<10{ + buffer.WriteString("0") + } + buffer.WriteString(h2sint2) + h2sdata := buffer.String() + log.Println("aqdata|h2s",h2sdata) buffer = new(bytes.Buffer) - ch2o1 := strconv.Itoa(int(data[14])) + ch2o1 := strconv.Itoa(int(data[15])) buffer.WriteString(ch2o1) buffer.WriteString(".") - ch2o2 := strconv.Itoa(int(data[15])) - if int64(data[15])<10{ + ch2o2 := strconv.Itoa(int(data[16])) + if int64(data[16])<10{ buffer.WriteString("0") } buffer.WriteString(ch2o2) ch2o := buffer.String() // ch2o := uint32(data[14])*256+uint32(data[15]) - log.Println("ch2o",ch2o) + log.Println("aqdata|ch2o",ch2o) - co2data := uint32(data[16])*256+uint32(data[17]) - log.Println("co2data",co2data) + co2data := uint32(data[17])*256+uint32(data[18]) + log.Println("aqdata|co2data",co2data) - tvocdata := data[18] - log.Println("tvocdata",tvocdata) + tvocdata := data[19] + log.Println("aqdata|tvocdata",tvocdata) // log.Println("pm25data1",data[19]) // log.Println("pm25data2",data[20]) - pm25data := uint32(data[19])*256+uint32(data[20]) - log.Println("pm25data",pm25data) + pm25data := uint32(data[20])*256+uint32(data[21]) + log.Println("aqdata|pm25data",pm25data) // log.Println("pm10data1",data[21]) // log.Println("pm10data2",data[22]) - pm10data := uint32(data[21])*256+uint32(data[22]) - log.Println("pm10data",pm10data) + pm10data := uint32(data[22])*256+uint32(data[23]) + log.Println("aqdata|pm10data",pm10data) var R_data P1004_6 R_data.CODE = 1005 @@ -452,7 +466,7 @@ func dealDatav3(data []byte) string{ R_data.DATA["humidity"]=sddata R_data.DATA["nh3"]=nh3data - R_data.DATA["h2s"]=data[13] + R_data.DATA["h2s"]=h2sdata R_data.DATA["ch2o"]=ch2o R_data.DATA["co2"]=co2data R_data.DATA["tvoc"]=tvocdata diff --git a/tcpserver.go b/tcpserver.go index db779c7..5902a62 100644 --- a/tcpserver.go +++ b/tcpserver.go @@ -150,8 +150,8 @@ func readConn(conn net.Conn, readChan chan<- []byte, stopChan chan<- bool) { values = data[i+2:i+3] }else if dataType ==4 { //空气质量 - continueCount = 18 - end = 19 + continueCount = 19 + end = 20 if i+end >reqLen{ log.Println("yunhorndeug.push.data.tcp.fq",buffer.String(),addrs,dataType) continue @@ -217,7 +217,7 @@ func readConn(conn net.Conn, readChan chan<- []byte, stopChan chan<- bool) { _,ok := loraNodeMap.Load(buffer.String()) if !ok{ - log.Println("yunhorndeug.push.data.tcp.dev not exist:",buffer.String()) + log.Println("yunhorndeug.push.data.tcp.dev not exist:",buffer.String(),dataType,values) buffer = new(bytes.Buffer) continue } From 1898095d9a03361ba457dd0ca09fcbf62b230e95 Mon Sep 17 00:00:00 2001 From: fish Date: Mon, 24 Jun 2019 12:15:06 +0800 Subject: [PATCH 2/3] fix h2s data parse --- router.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/router.go b/router.go index 8f82ef7..d583b8c 100644 --- a/router.go +++ b/router.go @@ -414,7 +414,7 @@ func dealDatav3(data []byte) string{ buffer = new(bytes.Buffer) h2sint1 := strconv.Itoa(int(data[13])) - buffer.WriteString(nh3int1) + buffer.WriteString(h2sint1) buffer.WriteString(".") h2sint2 := strconv.Itoa(int(data[14])) if int64(data[14])<10{ From be02a720850932655ada7c0171140186412643f8 Mon Sep 17 00:00:00 2001 From: fish Date: Thu, 27 Jun 2019 10:49:30 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=AE=8C=E5=96=84lora=E7=BD=91=E5=85=B3?= =?UTF-8?q?=E5=86=97=E4=BD=99=E6=95=B0=E6=8D=AE=E8=BF=87=E6=BB=A4=EF=BC=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0mqtt=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/gateway.conf | 6 +++++- loadconfig.go | 17 ++++++++++++----- main.go | 3 +++ router.go | 2 +- tcpserver.go | 20 +++++++++++++------- 5 files changed, 34 insertions(+), 14 deletions(-) diff --git a/conf/gateway.conf b/conf/gateway.conf index 4b35738..f65dd14 100644 --- a/conf/gateway.conf +++ b/conf/gateway.conf @@ -226,5 +226,9 @@ "pro_category":1, "syn_data":false, "syn_extension_Time":false, - "record_log_path":"/usr/local/dpark" + "record_log_path":"/usr/local/dpark", + "mqtt_open":true, + "mqtt_broker":"tcp://120.77.206.101:1883", + "mqtt_username":"", + "mqtt_password":"" } diff --git a/loadconfig.go b/loadconfig.go index 31c47ad..e58f5d3 100644 --- a/loadconfig.go +++ b/loadconfig.go @@ -9,6 +9,7 @@ import ( // "strconv" "time" "sync" + "math/rand" ) type Traffic struct { @@ -43,6 +44,10 @@ type Conf struct { SYNDATA bool `json:"syn_data"` SYNEXTENSIONTIME bool `json:"syn_extension_Time"` RECORD_LOG_PATH string `json:"record_log_path"` + MQTT_OPEN bool `json:"mqtt_open"` + MQTT_BROKER string `json:"mqtt_broker"` + MQTT_USERNAME string `json:"mqtt_username"` + MQTT_PASSWORD string `json:"mqtt_password"` } //无线 下位机 @@ -94,6 +99,7 @@ type LoraNode struct{ CURRENT_DATA int `json:"current_data"` CHECK_TIME bool `json:"check_time"` DEVICE string `json:"device"` + UPDATE_TIME time.Time `json:"update_time"` } var conf Conf @@ -101,13 +107,11 @@ var DEVICEDATAS Devicedatas var demoDevice Device var today string -//var airDevice Device - -//var femaledemoDevice Device -//var maledemoDevice Device var nodeUpdateMap sync.Map -// var logch = make(chan []byte) + +//sensor data update map +var sensorUpdateMap sync.Map //log channel var logch = make(chan []byte) @@ -120,6 +124,9 @@ var db, _ = sql.Open("sqlite3", "./db/gateway.db") // 加载配置文件 func init() { + //以时间配置随机数种子 + rand.Seed(time.Now().UnixNano()) + t := time.Now() today = t.Format("2006-01-02") diff --git a/main.go b/main.go index e35baad..7b4f00b 100644 --- a/main.go +++ b/main.go @@ -52,6 +52,7 @@ func main() { c.AddFunc("0, */10, *, *, *, *", savedata_cron) c.AddFunc("0, 0, 0, *, *, *", insertdata) c.AddFunc("0, 0, *, *, *, *", get_weather) + //定时更新today字段,当前日期 c.AddFunc("0, *, *, *, *, *", func(){ t := time.Now() today = t.Format("2006-01-02") @@ -60,6 +61,8 @@ func main() { if conf.OPENTCPSETVER { + //开启mqtt默认认定是无线方案 + go record_log_channel() tcp_port := strconv.Itoa(conf.TCPPORT) diff --git a/router.go b/router.go index d583b8c..92dc59f 100644 --- a/router.go +++ b/router.go @@ -232,7 +232,7 @@ func dealDatav3(data []byte) string{ // log.Println("loraNodeMap:",loraNodeMap) loraNode, ok := loraNodeMap.Load(adr) if !ok { - log.Println("load loraNode success ", ok) + log.Println("load loraNode fail ", adr) return "" } // log.Println("load loraNode:",loraNode) diff --git a/tcpserver.go b/tcpserver.go index 5902a62..4c2a940 100644 --- a/tcpserver.go +++ b/tcpserver.go @@ -85,6 +85,7 @@ func readConn(conn net.Conn, readChan chan<- []byte, stopChan chan<- bool) { continueCount := 0 // log.Println("yunhorndeug.push.data.tcp.reqLen|data",reqLen,data) log.Println("$$$$$$$$$$$$$$$$$$$$$$$$$",data[:reqLen]) + now := time.Now() for i, b := range data[:reqLen] { if reqLen<7{ @@ -104,11 +105,6 @@ func readConn(conn net.Conn, readChan chan<- []byte, stopChan chan<- bool) { buffer.WriteString(s) } - // log.Println("========================",data[reqLen-2:reqLen]) - - // log.Println(b) - // log.Println("$$$$$$$$$$$$$$$$$$$$$$$$$",i,reqLen) - // log.Println("$$$$$$$$$$$$$$$$$$$$$$$$$",data[reqLen]) end :=0 //254为分隔符 if b==254 && i>3{ @@ -215,13 +211,23 @@ func readConn(conn net.Conn, readChan chan<- []byte, stopChan chan<- bool) { log.Println("yunhorndeug.push.data.tcp:",buffer.String(),addrs,dataType,values) - _,ok := loraNodeMap.Load(buffer.String()) + loraNode,ok := loraNodeMap.Load(buffer.String()) if !ok{ log.Println("yunhorndeug.push.data.tcp.dev not exist:",buffer.String(),dataType,values) - buffer = new(bytes.Buffer) + buffer = new(bytes.Buffer) continue } + if !loraNode.(LoraNode).UPDATE_TIME.IsZero() { + var duration = now.Sub(loraNode.(LoraNode).UPDATE_TIME).Seconds() + var durationAsInt64 = int(duration) + if(durationAsInt64<=1){ + log.Println("repeat.sensor.data:",addrs) + continue; + } + } + + buffer = new(bytes.Buffer) go write_log_channel(data[i-4:i+end])