Bläddra i källkod

优化开关继电器开关回路方法、对接电感、上报单灯、开关继电器回路状态

chengqian 3 dagar sedan
förälder
incheckning
e3c1d0a926

+ 8 - 0
dev/devs.json

@@ -15,6 +15,14 @@
       "TaskTime":5,
       "WaitTime":10,
       "SerialId": 1
+    },
+    {
+      "Sn": "LC1744103306478",
+      "Address": "03",
+      "Name": "电感",
+      "TaskTime":10,
+      "WaitTime":15,
+      "SerialId": 1
     }
   ],
   "lampDev": [

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 67
log/info.20250327.log


+ 0 - 49
log/info.20250331.log

@@ -1,49 +0,0 @@
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 15:54:04.515"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 15:55:25.754"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 15:56:07.139"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 15:56:41.761"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 15:57:25.635"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 15:58:43.659"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 15:59:28.788"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:00:27.654"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:00:56.712"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:01:09.977"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:01:52.044"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:06:37.920"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:07:06.921"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:07:37.756"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:10:28.058"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:11:22.531"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:12:00.623"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:12:45.141"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:13:16.490"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:13:23.835"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:13:40.322"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:13:56.433"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:15:19.454"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:15:30.302"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:15:39.797"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:16:07.135"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:16:34.506"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:16:44.144"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:37:53.507"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:38:35.281"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:46:11.069"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:46:39.987"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:46:47.786"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:47:35.542"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:48:28.066"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:48:37.971"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:48:52.331"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:49:24.690"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:49:38.736"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 16:50:31.699"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 17:17:05.627"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 17:18:56.520"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 17:19:03.471"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 17:19:15.946"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 17:19:30.343"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 17:19:38.740"}
-{"level":"error","msg":"无法打开串口 CO3: The system cannot find the file specified.","time":"2025-03-31 17:19:38.747"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 17:19:48.859"}
-{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-03-31 17:20:06.164"}

+ 3 - 0
log/info.20250407.log

@@ -0,0 +1,3 @@
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-07 17:09:17.383"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-07 17:10:30.473"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-07 17:11:54.361"}

+ 38 - 0
log/info.20250408.log

@@ -0,0 +1,38 @@
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 10:29:39.939"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 10:32:14.585"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 11:22:05.491"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 11:22:17.530"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 11:23:41.733"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 11:38:28.175"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 11:40:57.290"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 11:51:15.953"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 11:53:00.519"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 14:36:47.235"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 14:38:45.931"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 14:50:24.819"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 15:48:43.961"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 15:49:09.649"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 15:49:34.850"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 15:53:44.096"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 16:01:58.579"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 16:04:04.680"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 16:22:51.668"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 16:23:03.566"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 16:23:26.008"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 16:23:58.920"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 16:25:53.202"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 16:26:01.810"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 16:26:14.051"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 16:26:45.775"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 16:34:08.230"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 16:34:43.962"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 16:35:49.843"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 16:36:32.436"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 16:36:44.987"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 16:42:26.826"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 16:43:16.913"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 16:50:59.826"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 16:56:07.853"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 17:02:57.894"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 17:03:03.152"}
+{"level":"info","msg":"MClient.OnConnectHandler:MQTT连接成功","time":"2025-04-08 17:03:21.403"}

+ 0 - 2
main.go

@@ -35,7 +35,5 @@ func main() {
 
 	service.InitControl()
 	go timer.TimeTasks()
-
 	select {}
-
 }

+ 4 - 2
protocol/switchRelay/service.go

@@ -29,10 +29,12 @@ func (x MultiLoopDataPack) GetControlMuchSwitchRelayCommand() *bytebufferpool.By
 	decodeAddress, _ := hex.DecodeString(x.Address)
 	buf.Write(decodeAddress)
 	buf.WriteByte(x.Function)
-	if x.TurnOff == 1 {
+	if x.TurnOff == 1 { //控制多路打开
 		buf.Write([]byte{0x04, 0x1A, 0x00, 0x02, 0x04, 0x00})
-	} else {
+	} else if x.TurnOff == 0 { //控制多路关闭
 		buf.Write([]byte{0x04, 0x1C, 0x00, 0x02, 0x04, 0x00})
+	} else { //控制多路取反
+		buf.Write([]byte{0x04, 0x1E, 0x00, 0x02, 0x04, 0x00})
 	}
 	buf.Write(generateHexSwitchState(x.State))
 	x.Command = []byte{0x00, 0x00}

+ 5 - 3
radar_test.go

@@ -3,6 +3,7 @@ package main
 import (
 	"encoding/hex"
 	"fmt"
+	"smart_tunnel_edge/protocol/switchRelay"
 	"testing"
 )
 
@@ -55,9 +56,10 @@ func Test_verify(t *testing.T) {
 	//pack := switchRelay.DataPack{Address: "fe", Way: 2, Command: 0}
 	//command := pack.GetSwitchRelayCommand()
 	//fmt.Println("MingLing。。。", hex.EncodeToString(command.Bytes()))
-	ints := []int{1, 2, 3}
-	state := generateHexSwitchState(ints)
-	fmt.Println("转换后:", hex.EncodeToString(state))
+	ints := []int{1, 2}
+	command := switchRelay.MultiLoopDataPack{Address: "FE", TurnOff: 0, State: ints}.GetControlMuchSwitchRelayCommand()
+	//state := generateHexSwitchState(ints)
+	fmt.Println("转换后:", hex.EncodeToString(command.Bytes()))
 }
 
 func parseHexString(hexStr string) string {

+ 99 - 55
service/devmgr.go

@@ -1,6 +1,7 @@
 package service
 
 import (
+	"encoding/json"
 	"smart_tunnel_edge/protocol/envSensor"
 	"smart_tunnel_edge/protocol/lampControl"
 	"smart_tunnel_edge/protocol/switchRelay"
@@ -12,21 +13,25 @@ import (
 
 var mu sync.Mutex
 
+//var RelayStatus = "1000" //四路开关继电器状态
+
 const (
-	RegulateLight  = "regulateLight"
-	RegulateSwitch = "regulateSwitch"
-	LowLightLevel  = 30
-	HighLightLevel = 60
+	RegulateLight    = "regulateLight"
+	RegulateSwitch   = "regulateSwitch"
+	FullPower        = "fullPower"
+	LowPower         = "lowPower"
+	MediumPower      = "mediumPower"
+	LowLightLevel    = 30
+	MediumLightLevel = 60
+	FullLightLevel   = 90
 )
 
 // 初始化时单灯或者开关继电器
 func InitControl() {
 	if config.Instance().Policy.Control == RegulateLight {
-		go SetLampBright(1, LowLightLevel)
-		go SetLampBright(2, LowLightLevel)
+		go SetLampBright([]int8{1, 2}, LowLightLevel)
 	} else {
-		go SetSwitchRelay(1, 1, 1)
-		go SetSwitchRelay(2, 1, 1)
+		go SetSwitchRelay([]int8{1, 2}, 1, 1)
 	}
 }
 
@@ -46,6 +51,9 @@ func StartDeviceCollection(dev *config.EnvDev) {
 			if dev.Name == "光传感器" {
 				dataPack = envSensor.DataPack{Address: dev.Address, Start: []byte{0x00, 0x06}, DataLen: []byte{0x00, 0x01}}
 			}
+			if dev.Name == "光感" {
+				dataPack = envSensor.DataPack{Address: dev.Address, Start: []byte{0x00, 0x00}, DataLen: []byte{0x00, 0x28}}
+			}
 			buffer := dataPack.GetEnvGatherCommand()
 			mu.Lock()
 			port, err := GetSerialPort(dev.SerialId)
@@ -63,68 +71,104 @@ func StartDeviceCollection(dev *config.EnvDev) {
 	}
 }
 
-func OperationLampSwitchJudge(radarId int8, brightness, way, turnOf int) {
-	if config.Instance().Policy.Control == RegulateLight {
+// 处理灯光开关逻辑
+func OperationLampSwitchJudge(radarId []int8, brightness int, power string) {
+	switch config.Instance().Policy.Control {
+	case RegulateLight:
+		// 如果是单灯控制器,直接调整亮度
 		SetLampBright(radarId, brightness)
-	} else {
-		SetSwitchRelay(radarId, way, turnOf)
+	case RegulateSwitch:
+		// 对于开关继电器控制,根据亮度调整回路状态
+		switch power {
+		case FullPower:
+			// 满功率:打开回路1和回路2
+			go SetSwitchRelay(radarId, 1, 1) // 打开回路1
+			go SetSwitchRelay(radarId, 2, 1) // 打开回路2
+		case LowPower:
+			// 三分之一功率:打开回路1,关闭回路2
+			go SetSwitchRelay(radarId, 1, 1)
+			go SetSwitchRelay(radarId, 2, 0)
+		case MediumPower:
+			// 三分之二功率:打开回路2,关闭回路1
+			go SetSwitchRelay(radarId, 2, 1) // 打开回路2
+			go SetSwitchRelay(radarId, 1, 0) // 关闭回路1
+		}
 	}
 }
 
 // 单灯控制器调光方法
-func SetLampBright(radarId int8, brightness int) {
+func SetLampBright(radarId []int8, brightness int) {
 	var wg sync.WaitGroup
-	for _, dev := range config.DevConfig.LampDevs {
-		if dev.RadarId != radarId {
-			continue
-		}
-		wg.Add(1)
-		newDev := dev
-		go func() {
-			defer wg.Done()
-			// 获取对应的串口
-			port, err := GetSerialPort(newDev.SerialId)
-			if err != nil {
-				logger.Logger.Infof("获取串口失败,设备编号:%v,错误:%v", newDev.Sn, err)
-				return
+	for _, id := range radarId {
+		for _, dev := range config.DevConfig.LampDevs {
+			if dev.RadarId != id {
+				continue
 			}
-			buffer := lampControl.DataPack{Addr: newDev.Address}.GetLampSetBrightCommand(brightness)
-
-			mu.Lock() // 锁定串口操作
-			write, err := port.Write(buffer.Bytes())
-			mu.Unlock()
+			wg.Add(1)
+			newDev := dev
+			go func() {
+				defer wg.Done()
+				// 获取对应的串口
+				port, err := GetSerialPort(newDev.SerialId)
+				if err != nil {
+					logger.Logger.Infof("获取串口失败,设备编号:%v,错误:%v", newDev.Sn, err)
+					return
+				}
+				buffer := lampControl.DataPack{Addr: newDev.Address}.GetLampSetBrightCommand(brightness)
+				mu.Lock() // 锁定串口操作
+				write, err := port.Write(buffer.Bytes())
+				mu.Unlock()
+				if write < 0 || err != nil {
+					logger.Logger.Errorf("单灯:%v操作失败,错误:%v", newDev.Sn, err)
+					return
+				}
 
-			if write < 0 || err != nil {
-				logger.Logger.Errorf("单灯:%v操作失败,错误:%v", newDev.Sn, err)
-				return
-			}
-		}()
-		time.Sleep(time.Millisecond * 150)
+				//上报单灯亮度 根据路数
+				topic := MqttService.GetTopic(TopicLampBrightNess)
+				state := LampBrightNess{Way: id, BrightNess: brightness}
+				jsonData, _ := json.Marshal(state)
+				err = MqttService.Publish(topic, jsonData)
+				if err != nil {
+					logger.Logger.Errorf("MQTT Publish err = %s", err.Error())
+				}
+			}()
+			time.Sleep(time.Millisecond * 150)
+		}
 	}
 	wg.Wait()
 }
 
 // 开关继电器开关方法(单路)
-func SetSwitchRelay(radarId int8, way, turnOf int) {
-	for _, dev := range config.DevConfig.SwitchDevs {
-		if dev.RadarId != radarId {
-			continue
-		}
-		port, err := GetSerialPort(dev.SerialId)
-		if err != nil {
-			logger.Logger.Infof("获取串口失败,设备编号:%v,错误:%v", dev.Sn, err)
-			return
-		}
-		command := switchRelay.DataPack{Address: dev.Address, Way: way, Command: turnOf}.GetSwitchRelayCommand()
-		mu.Lock() // 锁定串口操作
-		write, err := port.Write(command.Bytes())
-		mu.Unlock() // 锁定串口操作
+func SetSwitchRelay(radarId []int8, way, turnOf int) {
+	for _, id := range radarId {
+		for _, dev := range config.DevConfig.SwitchDevs {
+			if dev.RadarId != id {
+				continue
+			}
+			port, err := GetSerialPort(dev.SerialId)
+			if err != nil {
+				logger.Logger.Infof("获取串口失败,设备编号:%v,错误:%v", dev.Sn, err)
+				return
+			}
+			command := switchRelay.DataPack{Address: dev.Address, Way: way, Command: turnOf}.GetSwitchRelayCommand()
+			mu.Lock() // 锁定串口操作
+			write, err := port.Write(command.Bytes())
+			mu.Unlock() // 锁定串口操作
 
-		if write < 0 || err != nil {
-			logger.Logger.Errorf("控制单路开关继电器:%v操作失败,错误:%v", dev.Sn, err)
-			continue
+			if write < 0 || err != nil {
+				logger.Logger.Errorf("控制单路开关继电器:%v操作失败,错误:%v", dev.Sn, err)
+				continue
+			}
+			time.Sleep(time.Millisecond * 150)
+			//上报回路状态
+			topic := MqttService.GetTopic(TopicSwitchStates)
+			state := RelayState{Sn: dev.Sn, Way: way, TurnOf: turnOf}
+			jsonData, _ := json.Marshal(state)
+			err = MqttService.Publish(topic, jsonData)
+			if err != nil {
+				logger.Logger.Errorf("MQTT Publish err = %s", err.Error())
+			}
 		}
-		time.Sleep(time.Millisecond * 150)
 	}
 }
 

+ 16 - 0
service/model.go

@@ -11,3 +11,19 @@ type OpticalData struct {
 	Sn          string `json:"sn"`
 	Illuminance int64  `json:"illuminance"`
 }
+
+type InductanceData struct {
+	Sn         string `json:"sn"`
+	TotalPower int64  `json:"totalPower"`
+}
+
+type RelayState struct {
+	Sn     string `json:"sn"`
+	Way    int    `json:"way"`
+	TurnOf int    `json:"turnOf"`
+}
+
+type LampBrightNess struct {
+	Way        int8 `json:"way"`
+	BrightNess int  `json:"brightNess"`
+}

+ 11 - 8
service/mqtt_handle.go

@@ -89,7 +89,7 @@ func (o *MqttHandler) Handler() interface{} {
 			data2 := data[1:]
 			radarId, _ := strconv.Atoi(data1)
 			brightNess, _ := strconv.Atoi(data2)
-			SetLampBright(int8(radarId), brightNess)
+			SetLampBright([]int8{int8(radarId)}, brightNess)
 		case TopicSwitchControl:
 			data := m.PayloadString()
 			data1 := data[0:1]
@@ -98,7 +98,7 @@ func (o *MqttHandler) Handler() interface{} {
 			radarId, _ := strconv.Atoi(data1)
 			way, _ := strconv.Atoi(data2)
 			turnOf, _ := strconv.Atoi(data3)
-			SetSwitchRelay(int8(radarId), way, turnOf)
+			SetSwitchRelay([]int8{int8(radarId)}, way, turnOf)
 		case TopicTunnelTactics:
 			// 修改策略
 			num, _ := strconv.Atoi(m.PayloadString())
@@ -157,10 +157,13 @@ func updateConfigAndReload(updates map[string]interface{}) bool {
 }
 
 const (
-	TopicGatherDataEnv = "gatherDataEnv"
-	TopicGatherDataOpt = "gatherDataOpt"
-	TopicTunnelTactics = "tunnelTactics"
-	TopicTunnelTiming  = "tunnelTiming"
-	TopicLampControl   = "lampControl"
-	TopicSwitchControl = "switchControl"
+	TopicGatherDataEnv  = "gatherDataEnv"
+	TopicGatherDataOpt  = "gatherDataOpt"
+	TopicGatherDataDG   = "gatherDataDG"
+	TopicSwitchStates   = "switchStates"
+	TopicLampBrightNess = "lampBrightNess"
+	TopicTunnelTactics  = "tunnelTactics"
+	TopicTunnelTiming   = "tunnelTiming"
+	TopicLampControl    = "lampControl"
+	TopicSwitchControl  = "switchControl"
 )

+ 24 - 31
service/serialmgr.go

@@ -75,7 +75,7 @@ func OpenSerialPort(portMap map[int8]*config.SerialPort) error {
 
 func listenPort(portCode int8, port *serial.Port) {
 	fmt.Println("监听串口...")
-	buf := make([]byte, 128)
+	buf := make([]byte, 512)
 	for {
 		// 读取数据
 		n, err := port.Read(buf)
@@ -85,10 +85,8 @@ func listenPort(portCode int8, port *serial.Port) {
 		}
 		if n > 0 {
 			dataString := hex.EncodeToString(buf[:n])
-			//fmt.Println("数据:", dataString)
 			switch {
 			case len(dataString) == 42 && dataString[2:6] == "0310": //环境传感器数据
-				//fmt.Print("环境传感:")
 				shiDu, _ := strconv.ParseInt(dataString[6:10], 16, 0)
 				wenDu, _ := strconv.ParseInt(dataString[10:14], 16, 0)
 				gz, _ := strconv.ParseInt(dataString[30:38], 16, 0)
@@ -113,7 +111,6 @@ func listenPort(portCode int8, port *serial.Port) {
 				}
 
 			case len(dataString) == 14 && dataString[2:6] == "0302": //光照传感器数据
-				//fmt.Printf("光传感:")
 				gz, _ := strconv.ParseInt(dataString[6:10], 16, 0)
 
 				if _, exists := env[dataString[0:2]]; !exists {
@@ -136,6 +133,24 @@ func listenPort(portCode int8, port *serial.Port) {
 					continue
 				}
 
+			case len(dataString) == 170 && dataString[2:6] == "0350": //电感数据
+				totalPower, _ := strconv.ParseInt(dataString[42:50], 16, 0)
+				data := InductanceData{TotalPower: totalPower}
+				for _, dev := range config.DevConfig.EnvDevs {
+					if dev.Address == dataString[0:2] {
+						data.Sn = dev.Sn
+						break
+					}
+				}
+
+				jsonData, _ := json.Marshal(data)
+				topic := MqttService.GetTopic(TopicGatherDataDG)
+				err := MqttService.Publish(topic, jsonData)
+				if err != nil {
+					logger.Logger.Errorf("MQTT Publish err = %s", err.Error())
+					continue
+				}
+
 			case len(dataString) == 16 && dataString[0:2] == "78" && dataString[8:16] == "40790d0a": //雷达数据
 				dataBytes, _ := hex.DecodeString(dataString)
 				speed, _ := strconv.Atoi(string(dataBytes)[1:4])
@@ -150,10 +165,10 @@ func listenPort(portCode int8, port *serial.Port) {
 							timer.Reset(lightDuration)
 						}
 					} else {
-						OperationLampSwitchJudge(portCode, HighLightLevel, 2, 1) //brightness代表亮度,way代表开关继电器回路数,turnOf代表开还是关,1代表开,0代表关
+						OperationLampSwitchJudge([]int8{portCode}, MediumLightLevel, MediumPower) //brightness代表亮度,way代表开关继电器回路数,turnOf代表开还是关,1代表开,0代表关
 						isLightOperate = true
 						timer = time.AfterFunc(lightDuration, func() {
-							OperationLampSwitchJudge(portCode, LowLightLevel, 2, 0)
+							OperationLampSwitchJudge([]int8{portCode}, LowLightLevel, LowPower)
 							isLightOperate = false
 						})
 					}
@@ -166,37 +181,15 @@ func listenPort(portCode int8, port *serial.Port) {
 				//	fmt.Printf("错误数据: %s \n", dataString)
 			}
 			if config.Instance().Policy.Id == 1 && config.Instance().Nums.EnvNum == len(env) && config.Instance().Nums.OptNum == len(opt) {
-
 				envAverage := calculateAverage(env)
 				optAverage := calculateAverage(opt)
 
-				control := config.Instance().Policy.Control
 				if envAverage-optAverage >= 20000 { //如果相差20000Lux开两路或者调节亮度为90%
-					if control == RegulateLight {
-						go SetLampBright(1, 90)
-						go SetLampBright(2, 90)
-					} else if control == RegulateSwitch {
-						go SetSwitchMultiRelay(1, 1, []int{1, 2, 3}) //int[]{}表达控制的回路
-						go SetSwitchMultiRelay(2, 1, []int{1, 2, 3})
-					}
+					OperationLampSwitchJudge([]int8{1, 2}, FullLightLevel, FullPower)
 				} else if envAverage-optAverage >= 10000 { //如果相差10000Lux开两路或者调节亮度为60%
-					if control == RegulateLight {
-						go SetLampBright(1, 60)
-						go SetLampBright(2, 60)
-					} else if control == RegulateSwitch {
-						go SetSwitchRelay(1, 3, 0) //不管如何先将第三路关闭
-						go SetSwitchRelay(2, 3, 0)
-						go SetSwitchMultiRelay(1, 1, []int{1, 2})
-						go SetSwitchMultiRelay(2, 1, []int{1, 2})
-					}
+					OperationLampSwitchJudge([]int8{1, 2}, MediumLightLevel, MediumPower)
 				} else {
-					if control == RegulateLight {
-						go SetLampBright(1, 30)
-						go SetLampBright(2, 30)
-					} else if control == RegulateSwitch {
-						go SetSwitchMultiRelay(1, 0, []int{2, 3})
-						go SetSwitchMultiRelay(2, 0, []int{2, 3})
-					}
+					OperationLampSwitchJudge([]int8{1, 2}, LowLightLevel, LowPower)
 				}
 
 				env = make(map[string]int64)

+ 37 - 4
timer/task.go

@@ -18,14 +18,47 @@ func TimeTasks() {
 			currentTime := time.Now().Format("15:04")
 			if currentTime == startTime {
 				//开灯,将两条路亮度调高
-				go service.OperationLampSwitchJudge(1, service.HighLightLevel, 2, 1)
-				go service.OperationLampSwitchJudge(2, service.HighLightLevel, 2, 1)
+				service.OperationLampSwitchJudge([]int8{1, 2}, service.MediumLightLevel, service.MediumPower)
 			} else if currentTime == endTime {
 				//关灯,将两条路亮度调低
-				go service.OperationLampSwitchJudge(1, service.LowLightLevel, 2, 0)
-				go service.OperationLampSwitchJudge(2, service.LowLightLevel, 2, 0)
+				service.OperationLampSwitchJudge([]int8{1, 2}, service.LowLightLevel, service.LowPower)
 			}
 		}
 	})
+
+	//_ = c.AddFunc("0/5 * * * * ?", func() {
+	//上报回路状态
+	//topic := service.MqttService.GetTopic(service.TopicLampBrightNess)
+	//state := service.LampBrightNess{Sn: "yyy", BrightNess: 60}
+	//jsonData, _ := json.Marshal(state)
+	//err := service.MqttService.Publish(topic, jsonData)
+	//if err != nil {
+	//	logger.Logger.Errorf("MQTT Publish err = %s", err.Error())
+	//}
+
+	//for _, dev := range config.DevConfig.EnvDevs {
+	//	if dev.Name == "电感" {
+	//		port, _ := service.GetSerialPort(dev.SerialId)
+	//		decodeString, _ := hex.DecodeString("0303000000284436")
+	//		port.Write(decodeString)
+	//		xxx := "010350004c004c004b00ea00ea00ea06f206e606d3000014ab000000"
+	//		shiDu, _ := strconv.ParseInt(xxx[42:50], 16, 0)
+	//
+	//		data := service.InductanceData{Sn: "99999", TotalPower: shiDu}
+	//		jsonData, _ := json.Marshal(data)
+	//		topic := service.MqttService.GetTopic(service.TopicGatherDataDG)
+	//		err := service.MqttService.Publish(topic, jsonData)
+	//		if err != nil {
+	//			logger.Logger.Errorf("MQTT Publish err = %s", err.Error())
+	//			continue
+	//		}
+	//
+	//		fmt.Println("+++++++", shiDu)
+	//	}
+	//}
+	//dataPack := envSensor.DataPack{Address: "01", Start: []byte{0x00, 0x00}, DataLen: []byte{0x00, 0x28}}
+	//command := dataPack.GetEnvGatherCommand()
+	//fmt.Println("命令:", hex.EncodeToString(command.Bytes()))
+	//})
 	c.Start()
 }