Selaa lähdekoodia

去除ipole中打印

terry 4 kuukautta sitten
vanhempi
commit
18f787eba3
40 muutettua tiedostoa jossa 283 lisäystä ja 1097 poistoa
  1. 7 7
      common/led/colorlight/programitems.go
  2. 2 2
      common/onvif/profiles/analytics/analytics.go
  3. 2 2
      common/onvif/profiles/authenticationbehavior/authenticationbehavior.go
  4. 2 2
      common/onvif/profiles/deviceio/deviceio.go
  5. 2 2
      common/onvif/profiles/devicemgmt/devicemgmt.go
  6. 2 2
      common/onvif/profiles/display/display.go
  7. 2 2
      common/onvif/profiles/imaging/imaging.go
  8. 2 2
      common/onvif/profiles/media/media.go
  9. 2 2
      common/onvif/profiles/media2/media2.go
  10. 2 2
      common/onvif/profiles/provisioning/provisioning.go
  11. 2 2
      common/onvif/profiles/ptz/ptz.go
  12. 2 2
      common/onvif/profiles/receiver/receiver.go
  13. 2 2
      common/onvif/profiles/recording/recording.go
  14. 2 2
      common/onvif/profiles/replay/replay.go
  15. 6 6
      common/onvif/profiles/search/search.go
  16. 2 2
      common/onvif/profiles/thermal/thermal.go
  17. 2 2
      common/onvif/profiles/uplink/uplink.go
  18. 2 2
      common/util/sunrisesunset.go
  19. 2 4
      edge/ipole/auto_reload.go
  20. 100 187
      edge/ipole/concentrator.go
  21. 3 3
      edge/ipole/config.go
  22. 15 15
      edge/ipole/devmgr.go
  23. 0 141
      edge/ipole/handlefile.go
  24. 0 66
      edge/ipole/liquid.go
  25. 16 41
      edge/ipole/main.go
  26. 43 92
      edge/ipole/modbusrtu.go
  27. 0 88
      edge/ipole/monitor.go
  28. 2 5
      edge/ipole/mqttclient.go
  29. 0 143
      edge/ipole/mqtthandle.go
  30. 10 16
      edge/ipole/mqttmgr.go
  31. 2 2
      edge/ipole/redis.go
  32. 0 2
      edge/ipole/serial.go
  33. 18 23
      edge/ipole/serialmgr.go
  34. 0 157
      edge/ipole/sysinfo.go
  35. 21 61
      edge/ipole/uploaddata.go
  36. 1 1
      edge/ipole/ym485.go
  37. 1 1
      edge/its/websvr.go
  38. 1 1
      edge/its_win/websvr.go
  39. 1 1
      edge/led_screen/clt_client/protocol.go
  40. 2 2
      edge/led_screen/clt_client/protocol_test.go

+ 7 - 7
common/led/colorlight/programitems.go

@@ -9,7 +9,7 @@ type LogFont struct {
 	LfFaceName  string `json:"lfFaceName"`  //font name. "default" for english.
 }
 
-//单行文本
+// 单行文本
 type ItemSingleLineText struct {
 	Type              string  `json:"Type"`      //(DONT change this, 4 – is for single line text item)
 	TextColor         string  `json:"TextColor"` // e.g. 0xFF000000
@@ -23,7 +23,7 @@ type ItemSingleLineText struct {
 	PlayLenth         string  `json:"PlayLenth"`         //Duration (miliseconds)
 }
 
-//多行文本
+// 多行文本
 type ItemMultiLineText struct {
 	Type           string  `json:"Type"`      //(DONT change this id, 5-multiline)
 	TextColor      string  `json:"TextColor"` // e.g. 0xFF000000
@@ -40,19 +40,19 @@ type ItemMultiLineText struct {
 
 type InEffect struct {
 	Type string `json:"Type"`
-	Time string `json:"Time"` // Transition duration in milisecond.
+	Time string `json:"DateTime"` // Transition duration in milisecond.
 }
 
-//图片
+// 图片
 type ItemPicture struct {
 	Type       string     `json:"Type"` // (DONT change this, 2-Picture item)
 	FileSource FileSource `json:"FileSource"`
-	Duration   string     `json:"Duration"` // Duration in millisecond, including the inEffect->Time.
+	Duration   string     `json:"Duration"` // Duration in millisecond, including the inEffect->DateTime.
 	InEffect   InEffect   `json:"inEffect"`
 	ReserveAS  string     `json:"ReserveAS"` //Keep image aspect ratio.
 }
 
-//视频
+// 视频
 type ItemVideo struct {
 	Type       string     `json:"Type"`     // (DONT change this id. Fixed, 3 – this item is video)
 	Volume     string     `json:"Volume"`   // Volume(0-1.000000) (* Mandatory)
@@ -61,7 +61,7 @@ type ItemVideo struct {
 	ReserveAS  string     `json:"ReserveAS"` //Keep image aspect ratio.
 }
 
-//网页
+// 网页
 type ItemWebPage struct {
 	Type string `json:"Type"` // (DONT change this, 27-WEB page item)
 	Url  string `json:"Url"`  //

+ 2 - 2
common/onvif/profiles/analytics/analytics.go

@@ -3956,7 +3956,7 @@ type SystemDateTimeExtension struct {
 
 // DateTime type
 type DateTime struct {
-	Time string `xml:"http://www.onvif.org/ver10/schema Time,omitempty"`
+	Time string `xml:"http://www.onvif.org/ver10/schema DateTime,omitempty"`
 
 	Date string `xml:"http://www.onvif.org/ver10/schema Date,omitempty"`
 }
@@ -6458,7 +6458,7 @@ type MaximumNumberOfOSDs struct {
 
 	Date int32 `xml:"http://www.onvif.org/ver10/schema Date,attr,omitempty"`
 
-	Time int32 `xml:"http://www.onvif.org/ver10/schema Time,attr,omitempty"`
+	Time int32 `xml:"http://www.onvif.org/ver10/schema DateTime,attr,omitempty"`
 
 	DateAndTime int32 `xml:"http://www.onvif.org/ver10/schema DateAndTime,attr,omitempty"`
 }

+ 2 - 2
common/onvif/profiles/authenticationbehavior/authenticationbehavior.go

@@ -4257,7 +4257,7 @@ type SystemDateTimeExtension struct {
 
 // DateTime type
 type DateTime struct {
-	Time string `xml:"http://www.onvif.org/ver10/schema Time,omitempty"`
+	Time string `xml:"http://www.onvif.org/ver10/schema DateTime,omitempty"`
 
 	Date string `xml:"http://www.onvif.org/ver10/schema Date,omitempty"`
 }
@@ -6759,7 +6759,7 @@ type MaximumNumberOfOSDs struct {
 
 	Date int32 `xml:"http://www.onvif.org/ver10/schema Date,attr,omitempty"`
 
-	Time int32 `xml:"http://www.onvif.org/ver10/schema Time,attr,omitempty"`
+	Time int32 `xml:"http://www.onvif.org/ver10/schema DateTime,attr,omitempty"`
 
 	DateAndTime int32 `xml:"http://www.onvif.org/ver10/schema DateAndTime,attr,omitempty"`
 }

+ 2 - 2
common/onvif/profiles/deviceio/deviceio.go

@@ -4304,7 +4304,7 @@ type SystemDateTimeExtension struct {
 
 // DateTime type
 type DateTime struct {
-	Time string `xml:"http://www.onvif.org/ver10/schema Time,omitempty"`
+	Time string `xml:"http://www.onvif.org/ver10/schema DateTime,omitempty"`
 
 	Date string `xml:"http://www.onvif.org/ver10/schema Date,omitempty"`
 }
@@ -6817,7 +6817,7 @@ type MaximumNumberOfOSDs struct {
 
 	Date int32 `xml:"http://www.onvif.org/ver10/schema Date,attr,omitempty"`
 
-	Time int32 `xml:"http://www.onvif.org/ver10/schema Time,attr,omitempty"`
+	Time int32 `xml:"http://www.onvif.org/ver10/schema DateTime,attr,omitempty"`
 
 	DateAndTime int32 `xml:"http://www.onvif.org/ver10/schema DateAndTime,attr,omitempty"`
 }

+ 2 - 2
common/onvif/profiles/devicemgmt/devicemgmt.go

@@ -5431,7 +5431,7 @@ type SystemDateTimeExtension struct {
 
 // DateTime type
 type DateTime struct {
-	Time string `xml:"http://www.onvif.org/ver10/schema Time,omitempty"`
+	Time string `xml:"http://www.onvif.org/ver10/schema DateTime,omitempty"`
 
 	Date string `xml:"http://www.onvif.org/ver10/schema Date,omitempty"`
 }
@@ -7961,7 +7961,7 @@ type MaximumNumberOfOSDs struct {
 
 	Date int32 `xml:"http://www.onvif.org/ver10/schema Date,attr,omitempty"`
 
-	Time int32 `xml:"http://www.onvif.org/ver10/schema Time,attr,omitempty"`
+	Time int32 `xml:"http://www.onvif.org/ver10/schema DateTime,attr,omitempty"`
 
 	DateAndTime int32 `xml:"http://www.onvif.org/ver10/schema DateAndTime,attr,omitempty"`
 }

+ 2 - 2
common/onvif/profiles/display/display.go

@@ -3890,7 +3890,7 @@ type SystemDateTimeExtension struct {
 
 // DateTime type
 type DateTime struct {
-	Time string `xml:"http://www.onvif.org/ver10/schema Time,omitempty"`
+	Time string `xml:"http://www.onvif.org/ver10/schema DateTime,omitempty"`
 
 	Date string `xml:"http://www.onvif.org/ver10/schema Date,omitempty"`
 }
@@ -6433,7 +6433,7 @@ type MaximumNumberOfOSDs struct {
 
 	Date int32 `xml:"http://www.onvif.org/ver10/schema Date,attr,omitempty"`
 
-	Time int32 `xml:"http://www.onvif.org/ver10/schema Time,attr,omitempty"`
+	Time int32 `xml:"http://www.onvif.org/ver10/schema DateTime,attr,omitempty"`
 
 	DateAndTime int32 `xml:"http://www.onvif.org/ver10/schema DateAndTime,attr,omitempty"`
 }

+ 2 - 2
common/onvif/profiles/imaging/imaging.go

@@ -4004,7 +4004,7 @@ type SystemDateTimeExtension struct {
 
 // DateTime type
 type DateTime struct {
-	Time string `xml:"http://www.onvif.org/ver10/schema Time,omitempty"`
+	Time string `xml:"http://www.onvif.org/ver10/schema DateTime,omitempty"`
 
 	Date string `xml:"http://www.onvif.org/ver10/schema Date,omitempty"`
 }
@@ -6641,7 +6641,7 @@ type MaximumNumberOfOSDs struct {
 
 	Date int32 `xml:"http://www.onvif.org/ver10/schema Date,attr,omitempty"`
 
-	Time int32 `xml:"http://www.onvif.org/ver10/schema Time,attr,omitempty"`
+	Time int32 `xml:"http://www.onvif.org/ver10/schema DateTime,attr,omitempty"`
 
 	DateAndTime int32 `xml:"http://www.onvif.org/ver10/schema DateAndTime,attr,omitempty"`
 }

+ 2 - 2
common/onvif/profiles/media/media.go

@@ -5109,7 +5109,7 @@ type SystemDateTimeExtension struct {
 
 // DateTime type
 type DateTime struct {
-	Time string `xml:"http://www.onvif.org/ver10/schema Time,omitempty"`
+	Time string `xml:"http://www.onvif.org/ver10/schema DateTime,omitempty"`
 
 	Date string `xml:"http://www.onvif.org/ver10/schema Date,omitempty"`
 }
@@ -7611,7 +7611,7 @@ type MaximumNumberOfOSDs struct {
 
 	Date int32 `xml:"http://www.onvif.org/ver10/schema Date,attr,omitempty"`
 
-	Time int32 `xml:"http://www.onvif.org/ver10/schema Time,attr,omitempty"`
+	Time int32 `xml:"http://www.onvif.org/ver10/schema DateTime,attr,omitempty"`
 
 	DateAndTime int32 `xml:"http://www.onvif.org/ver10/schema DateAndTime,attr,omitempty"`
 }

+ 2 - 2
common/onvif/profiles/media2/media2.go

@@ -4711,7 +4711,7 @@ type SystemDateTimeExtension struct {
 
 // DateTime type
 type DateTime struct {
-	Time string `xml:"http://www.onvif.org/ver10/schema Time,omitempty"`
+	Time string `xml:"http://www.onvif.org/ver10/schema DateTime,omitempty"`
 
 	Date string `xml:"http://www.onvif.org/ver10/schema Date,omitempty"`
 }
@@ -7213,7 +7213,7 @@ type MaximumNumberOfOSDs struct {
 
 	Date int32 `xml:"http://www.onvif.org/ver10/schema Date,attr,omitempty"`
 
-	Time int32 `xml:"http://www.onvif.org/ver10/schema Time,attr,omitempty"`
+	Time int32 `xml:"http://www.onvif.org/ver10/schema DateTime,attr,omitempty"`
 
 	DateAndTime int32 `xml:"http://www.onvif.org/ver10/schema DateAndTime,attr,omitempty"`
 }

+ 2 - 2
common/onvif/profiles/provisioning/provisioning.go

@@ -3985,7 +3985,7 @@ type SystemDateTimeExtension struct {
 
 // DateTime type
 type DateTime struct {
-	Time string `xml:"http://www.onvif.org/ver10/schema Time,omitempty"`
+	Time string `xml:"http://www.onvif.org/ver10/schema DateTime,omitempty"`
 
 	Date string `xml:"http://www.onvif.org/ver10/schema Date,omitempty"`
 }
@@ -6524,7 +6524,7 @@ type MaximumNumberOfOSDs struct {
 
 	Date int32 `xml:"http://www.onvif.org/ver10/schema Date,attr,omitempty"`
 
-	Time int32 `xml:"http://www.onvif.org/ver10/schema Time,attr,omitempty"`
+	Time int32 `xml:"http://www.onvif.org/ver10/schema DateTime,attr,omitempty"`
 
 	DateAndTime int32 `xml:"http://www.onvif.org/ver10/schema DateAndTime,attr,omitempty"`
 }

+ 2 - 2
common/onvif/profiles/ptz/ptz.go

@@ -4241,7 +4241,7 @@ type SystemDateTimeExtension struct {
 
 // DateTime type
 type DateTime struct {
-	Time string `xml:"http://www.onvif.org/ver10/schema Time,omitempty"`
+	Time string `xml:"http://www.onvif.org/ver10/schema DateTime,omitempty"`
 
 	Date string `xml:"http://www.onvif.org/ver10/schema Date,omitempty"`
 }
@@ -6795,7 +6795,7 @@ type MaximumNumberOfOSDs struct {
 
 	Date int32 `xml:"http://www.onvif.org/ver10/schema Date,attr,omitempty"`
 
-	Time int32 `xml:"http://www.onvif.org/ver10/schema Time,attr,omitempty"`
+	Time int32 `xml:"http://www.onvif.org/ver10/schema DateTime,attr,omitempty"`
 
 	DateAndTime int32 `xml:"http://www.onvif.org/ver10/schema DateAndTime,attr,omitempty"`
 }

+ 2 - 2
common/onvif/profiles/receiver/receiver.go

@@ -3838,7 +3838,7 @@ type SystemDateTimeExtension struct {
 
 // DateTime type
 type DateTime struct {
-	Time string `xml:"http://www.onvif.org/ver10/schema Time,omitempty"`
+	Time string `xml:"http://www.onvif.org/ver10/schema DateTime,omitempty"`
 
 	Date string `xml:"http://www.onvif.org/ver10/schema Date,omitempty"`
 }
@@ -6350,7 +6350,7 @@ type MaximumNumberOfOSDs struct {
 
 	Date int32 `xml:"http://www.onvif.org/ver10/schema Date,attr,omitempty"`
 
-	Time int32 `xml:"http://www.onvif.org/ver10/schema Time,attr,omitempty"`
+	Time int32 `xml:"http://www.onvif.org/ver10/schema DateTime,attr,omitempty"`
 
 	DateAndTime int32 `xml:"http://www.onvif.org/ver10/schema DateAndTime,attr,omitempty"`
 }

+ 2 - 2
common/onvif/profiles/recording/recording.go

@@ -4148,7 +4148,7 @@ type SystemDateTimeExtension struct {
 
 // DateTime type
 type DateTime struct {
-	Time string `xml:"http://www.onvif.org/ver10/schema Time,omitempty"`
+	Time string `xml:"http://www.onvif.org/ver10/schema DateTime,omitempty"`
 
 	Date string `xml:"http://www.onvif.org/ver10/schema Date,omitempty"`
 }
@@ -6716,7 +6716,7 @@ type MaximumNumberOfOSDs struct {
 
 	Date int32 `xml:"http://www.onvif.org/ver10/schema Date,attr,omitempty"`
 
-	Time int32 `xml:"http://www.onvif.org/ver10/schema Time,attr,omitempty"`
+	Time int32 `xml:"http://www.onvif.org/ver10/schema DateTime,attr,omitempty"`
 
 	DateAndTime int32 `xml:"http://www.onvif.org/ver10/schema DateAndTime,attr,omitempty"`
 }

+ 2 - 2
common/onvif/profiles/replay/replay.go

@@ -3773,7 +3773,7 @@ type SystemDateTimeExtension struct {
 
 // DateTime type
 type DateTime struct {
-	Time string `xml:"http://www.onvif.org/ver10/schema Time,omitempty"`
+	Time string `xml:"http://www.onvif.org/ver10/schema DateTime,omitempty"`
 
 	Date string `xml:"http://www.onvif.org/ver10/schema Date,omitempty"`
 }
@@ -6282,7 +6282,7 @@ type MaximumNumberOfOSDs struct {
 
 	Date int32 `xml:"http://www.onvif.org/ver10/schema Date,attr,omitempty"`
 
-	Time int32 `xml:"http://www.onvif.org/ver10/schema Time,attr,omitempty"`
+	Time int32 `xml:"http://www.onvif.org/ver10/schema DateTime,attr,omitempty"`
 
 	DateAndTime int32 `xml:"http://www.onvif.org/ver10/schema DateAndTime,attr,omitempty"`
 }

+ 6 - 6
common/onvif/profiles/search/search.go

@@ -57,7 +57,7 @@ type GetMediaAttributes struct {
 
 	RecordingTokens []RecordingReference `xml:"http://www.onvif.org/ver10/search/wsdl RecordingTokens,omitempty"`
 
-	Time string `xml:"http://www.onvif.org/ver10/schema Time,omitempty"`
+	Time string `xml:"http://www.onvif.org/ver10/schema DateTime,omitempty"`
 }
 
 // GetMediaAttributesResponse type
@@ -3997,7 +3997,7 @@ type SystemDateTimeExtension struct {
 
 // DateTime type
 type DateTime struct {
-	Time string `xml:"http://www.onvif.org/ver10/schema Time,omitempty"`
+	Time string `xml:"http://www.onvif.org/ver10/schema DateTime,omitempty"`
 
 	Date string `xml:"http://www.onvif.org/ver10/schema Date,omitempty"`
 }
@@ -5981,7 +5981,7 @@ type FindEventResult struct {
 	TrackToken TrackReference `xml:"http://www.onvif.org/ver10/schema TrackToken,omitempty"`
 
 	// The time when the event occured.
-	Time string `xml:"http://www.onvif.org/ver10/schema Time,omitempty"`
+	Time string `xml:"http://www.onvif.org/ver10/schema DateTime,omitempty"`
 
 	// The description of the event.
 	Event NotificationMessageHolderType `xml:"Event,omitempty"`
@@ -6010,7 +6010,7 @@ type FindPTZPositionResult struct {
 	TrackToken TrackReference `xml:"http://www.onvif.org/ver10/schema TrackToken,omitempty"`
 
 	// The time when the PTZ position was valid.
-	Time string `xml:"http://www.onvif.org/ver10/schema Time,omitempty"`
+	Time string `xml:"http://www.onvif.org/ver10/schema DateTime,omitempty"`
 
 	// The PTZ position.
 	Position PTZVector `xml:"http://www.onvif.org/ver10/schema Position,omitempty"`
@@ -6036,7 +6036,7 @@ type FindMetadataResult struct {
 	TrackToken TrackReference `xml:"http://www.onvif.org/ver10/schema TrackToken,omitempty"`
 
 	// The point in time when the matching metadata occurs in the metadata track.
-	Time string `xml:"http://www.onvif.org/ver10/schema Time,omitempty"`
+	Time string `xml:"http://www.onvif.org/ver10/schema DateTime,omitempty"`
 }
 
 // RecordingInformation type
@@ -6662,7 +6662,7 @@ type MaximumNumberOfOSDs struct {
 
 	Date int32 `xml:"http://www.onvif.org/ver10/schema Date,attr,omitempty"`
 
-	Time int32 `xml:"http://www.onvif.org/ver10/schema Time,attr,omitempty"`
+	Time int32 `xml:"http://www.onvif.org/ver10/schema DateTime,attr,omitempty"`
 
 	DateAndTime int32 `xml:"http://www.onvif.org/ver10/schema DateAndTime,attr,omitempty"`
 }

+ 2 - 2
common/onvif/profiles/thermal/thermal.go

@@ -4113,7 +4113,7 @@ type SystemDateTimeExtension struct {
 
 // DateTime type
 type DateTime struct {
-	Time string `xml:"http://www.onvif.org/ver10/schema Time,omitempty"`
+	Time string `xml:"http://www.onvif.org/ver10/schema DateTime,omitempty"`
 
 	Date string `xml:"http://www.onvif.org/ver10/schema Date,omitempty"`
 }
@@ -6615,7 +6615,7 @@ type MaximumNumberOfOSDs struct {
 
 	Date int32 `xml:"http://www.onvif.org/ver10/schema Date,attr,omitempty"`
 
-	Time int32 `xml:"http://www.onvif.org/ver10/schema Time,attr,omitempty"`
+	Time int32 `xml:"http://www.onvif.org/ver10/schema DateTime,attr,omitempty"`
 
 	DateAndTime int32 `xml:"http://www.onvif.org/ver10/schema DateAndTime,attr,omitempty"`
 }

+ 2 - 2
common/onvif/profiles/uplink/uplink.go

@@ -3785,7 +3785,7 @@ type SystemDateTimeExtension struct {
 
 // DateTime type
 type DateTime struct {
-	Time string `xml:"http://www.onvif.org/ver10/schema Time,omitempty"`
+	Time string `xml:"http://www.onvif.org/ver10/schema DateTime,omitempty"`
 
 	Date string `xml:"http://www.onvif.org/ver10/schema Date,omitempty"`
 }
@@ -6287,7 +6287,7 @@ type MaximumNumberOfOSDs struct {
 
 	Date int32 `xml:"http://www.onvif.org/ver10/schema Date,attr,omitempty"`
 
-	Time int32 `xml:"http://www.onvif.org/ver10/schema Time,attr,omitempty"`
+	Time int32 `xml:"http://www.onvif.org/ver10/schema DateTime,attr,omitempty"`
 
 	DateAndTime int32 `xml:"http://www.onvif.org/ver10/schema DateAndTime,attr,omitempty"`
 }

+ 2 - 2
common/util/sunrisesunset.go

@@ -235,7 +235,7 @@ func calcHaSunrise(latitude float64, sunDeclination []float64) (haSunrise []floa
 
 // Calculate the Solar Noon based on the formula: (720 - 4 * longitude - equationOfTime + utcOffset * 60) * 60
 // longitude - The longitude is defined by the user
-// equationOfTime - The Equation of Time slice is calculated by the calcEquationOfTime function
+// equationOfTime - The Equation of DateTime slice is calculated by the calcEquationOfTime function
 // utcOffset - The UTC offset is defined by the user
 // Return the Solar Noon slice
 func calcSolarNoon(longitude float64, equationOfTime []float64, utcOffset float64) (solarNoon []float64) {
@@ -394,7 +394,7 @@ func GetSunriseSunset(latitude float64, longitude float64, utcOffset float64, da
 		multiFactor = append(multiFactor, temp)
 	}
 
-	// Eq of Time (minutes)
+	// Eq of DateTime (minutes)
 	equationOfTime := calcEquationOfTime(multiFactor, geomMeanLongSun, eccentEarthOrbit, geomMeanAnomSun)
 
 	// HA Sunrise (deg)

+ 2 - 4
edge/ipole/auto_reload.go

@@ -39,8 +39,6 @@ func WatchDevConfig(args ...interface{}) interface{} {
 						}
 					}
 				}
-			case err := <-w.Error:
-				logrus.Errorf("WatchDevConfig:发生错误:%s", err.Error())
 			case <-w.Closed:
 				return
 			}
@@ -48,10 +46,10 @@ func WatchDevConfig(args ...interface{}) interface{} {
 	}()
 
 	if err := w.Add(util.GetPath(1)); err != nil {
-		logrus.Errorf("WatchDevConfig:Add(conf)发生错误:%s", err.Error())
+		return 0
 	}
 	if err := w.Start(time.Second); err != nil {
-		logrus.Errorf("WatchDevConfig:Start发生错误:%s", err.Error())
+		return 0
 	}
 	return 0
 }

+ 100 - 187
edge/ipole/concentrator.go

@@ -3,15 +3,12 @@ package main
 import (
 	"context"
 	"encoding/binary"
-	"encoding/hex"
 	"errors"
-	"runtime/debug"
 	"strconv"
 	"sync"
 	"time"
 
 	"github.com/go-redis/redis/v7"
-	"github.com/sirupsen/logrus"
 	"github.com/valyala/bytebufferpool"
 
 	"lc/common/mqtt"
@@ -60,7 +57,7 @@ type LampAlarmInfo struct {
 type Concentrator struct {
 	seq               uint8
 	mutexSeq          sync.Mutex
-	devinfo           *protocol.DevInfo
+	devInfo           *protocol.DevInfo
 	model             *protocol.IotModel
 	ctx               context.Context
 	cancel            context.CancelFunc
@@ -80,7 +77,7 @@ func NewConcentrator(info *protocol.DevInfo) Device {
 	ctx, cancel := context.WithCancel(context.Background())
 	dev := &Concentrator{
 		mapLamps:          make(map[uint32]string),
-		devinfo:           info,
+		devInfo:           info,
 		ctx:               ctx,
 		cancel:            cancel,
 		downQueue:         util.NewQueue(200),
@@ -103,25 +100,22 @@ func NewConcentrator(info *protocol.DevInfo) Device {
 }
 
 func (o *Concentrator) SetTopicHandle() {
-	o.mapTopicHandle[GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_SET_BROADCASTTIME)] = o.HandleTpChzbSetBroadcasttime
-	o.mapTopicHandle[GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_SET_WAITTIME)] = o.HandleTpChzbSetWaittime
-	o.mapTopicHandle[GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_SET_SWITCH)] = o.HandleTpChzbSetSwitch
-	o.mapTopicHandle[GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_SET_RECOVERY_AUTO)] = o.HandleTpChzbSetRecoveryAuto
-	o.mapTopicHandle[GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_SET_ONOFFTIME)] = o.HandleTpChzbSetOnofftime
-	o.mapTopicHandle[GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_QUERY_ONOFFTIME)] = o.HandleTpChzbQueryOnofftime
-	o.mapTopicHandle[GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_SET_UPDATE_LAMP)] = o.HandleTpChzbSetUpdateLamp
-	o.mapTopicHandle[GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_QUERY_TIME)] = o.HandleTpChzbQueryTime
+	o.mapTopicHandle[GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_SET_SWITCH)] = o.HandleTpChzbSetSwitch
+	o.mapTopicHandle[GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_SET_RECOVERY_AUTO)] = o.HandleTpChzbSetRecoveryAuto
+	o.mapTopicHandle[GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_SET_ONOFFTIME)] = o.HandleSetOnOffTime
+	o.mapTopicHandle[GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_SET_UPDATE_LAMP)] = o.HandleSetUpdateLamp
+	o.mapTopicHandle[GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_QUERY_TIME)] = o.HandleQueryTime
 }
 
 func (o *Concentrator) MQTTSubscribe() {
-	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_SET_BROADCASTTIME), mqtt.ExactlyOnce, o.HandleCache, ToCloud) //广播校时
-	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_SET_WAITTIME), mqtt.ExactlyOnce, o.HandleCache, ToCloud)      //设置zigbee集中器收发等待时间
-	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_SET_SWITCH), mqtt.ExactlyOnce, o.HandleCache, ToAll)          //开关灯,广播开关灯
-	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_SET_RECOVERY_AUTO), mqtt.ExactlyOnce, o.HandleCache, ToAll)   //广播开关灯
-	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_SET_ONOFFTIME), mqtt.ExactlyOnce, o.HandleCache, ToCloud)     //设置开关灯时间段
-	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_QUERY_ONOFFTIME), mqtt.ExactlyOnce, o.HandleCache, ToCloud)   //读取开关灯时间段
-	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_SET_UPDATE_LAMP), mqtt.ExactlyOnce, o.HandleCache, ToCloud)   //更新灯控末端
-	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_QUERY_TIME), mqtt.ExactlyOnce, o.HandleCache, ToCloud)        //读取单灯末端时间
+	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_SET_BROADCASTTIME), mqtt.ExactlyOnce, o.HandleCache, ToCloud) //广播校时
+	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_SET_WAITTIME), mqtt.ExactlyOnce, o.HandleCache, ToCloud)      //设置zigbee集中器收发等待时间
+	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_SET_SWITCH), mqtt.ExactlyOnce, o.HandleCache, ToAll)          //开关灯,广播开关灯
+	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_SET_RECOVERY_AUTO), mqtt.ExactlyOnce, o.HandleCache, ToAll)   //广播开关灯
+	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_SET_ONOFFTIME), mqtt.ExactlyOnce, o.HandleCache, ToCloud)     //设置开关灯时间段
+	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_QUERY_ONOFFTIME), mqtt.ExactlyOnce, o.HandleCache, ToCloud)   //读取开关灯时间段
+	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_SET_UPDATE_LAMP), mqtt.ExactlyOnce, o.HandleCache, ToCloud)   //更新灯控末端
+	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_QUERY_TIME), mqtt.ExactlyOnce, o.HandleCache, ToCloud)        //读取单灯末端时间
 }
 
 func (o *Concentrator) Start() {
@@ -167,7 +161,7 @@ func (o *Concentrator) UpdateInfo(devinfo protocol.DevInfo) {
 }
 
 func (o *Concentrator) GetDevInfo() *protocol.DevInfo {
-	return o.devinfo
+	return o.devInfo
 }
 
 func (o *Concentrator) UpdateModel(tid uint16, flag int) {
@@ -181,72 +175,63 @@ func (o *Concentrator) UpdateModel(tid uint16, flag int) {
 }
 
 func (o *Concentrator) UpdateModel2(mi *ModelInfo) {
-	if o.devinfo.TID != mi.TID {
+	if o.devInfo.TID != mi.TID {
 		return
 	}
 	if mi.Flag == 0 {
-		logrus.Errorf("Concentrator.UpdateModel2:设备[%s]的物模型[tid=%d]模型文件被删除,下次启动即将生效。", o.devinfo.DevCode, mi.TID)
 		return
 	}
-	logrus.Debugf("Concentrator.UpdateModel2:更新设备[%s]的物模型[%d]", o.devinfo.DevCode, mi.TID)
 	iot, err := loadModel(mi.TID)
 	if err != nil {
-		logrus.Errorf("Concentrator.UpdateModel2:加载模型[%d]文件错误:%s", mi.TID, err.Error())
 		return
 	}
 	if iot.Protocol == ConcentratorProtocol { //合法的物模型
 		o.model = iot
-		logrus.Infof("Concentrator.UpdateModel2:更新设备[%s]的物模型[%d]成功", o.devinfo.DevCode, mi.TID)
-	} else {
-		logrus.Error("Concentrator.UpdateModel2:物模型错误,TID和文件名tid不一致或协议非ModbusRTU协议")
 	}
 }
 
 func (o *Concentrator) ReloadOOTFromRedis() error {
-	mapdata, err := redisEdgeData.HGetAll(LampOotPrefix + o.devinfo.DevCode).Result()
+	result, err := redisEdgeData.HGetAll(LampOotPrefix + o.devInfo.DevCode).Result()
 	if err != nil {
 		if err == redis.Nil {
 			return nil
 		}
-		logrus.Errorf("Concentrator.ReloadOOTFromRedis设备[%s]从redis加载时间策略失败:%s", o.devinfo.DevCode, err.Error())
 		return err
 	}
-	for k, v := range mapdata {
+	for k, v := range result {
 		var oot []zigbee.OnOffTime
-		lampid, errkey := strconv.Atoi(k)
-		errval := json.UnmarshalFromString(v, &oot)
-		if errkey == nil && errval == nil {
-			o.mapLamps2OOT[uint32(lampid)] = oot
+		lampId, err2 := strconv.Atoi(k)
+		err3 := json.UnmarshalFromString(v, &oot)
+		if err2 == nil && err3 == nil {
+			o.mapLamps2OOT[uint32(lampId)] = oot
 		}
 	}
 	return nil
 }
 func (o *Concentrator) ReloadSwitchOOTFromRedis() error {
-	mapdata, err := redisEdgeData.HGetAll(LampSwitchPrefix + o.devinfo.DevCode).Result()
+	result, err := redisEdgeData.HGetAll(LampSwitchPrefix + o.devInfo.DevCode).Result()
 	if err != nil {
 		if err == redis.Nil {
 			return nil
 		}
-		logrus.Errorf("Concentrator.ReloadSwitchOOTFromRedis设备[%s]从redis加载时间策略失败:%s", o.devinfo.DevCode, err.Error())
 		return err
 	}
-	for k, v := range mapdata {
+	for k, v := range result {
 		var ltr LampTimeRange
-		lampid, errkey := strconv.Atoi(k)
-		errval := json.UnmarshalFromString(v, &ltr)
-		if errkey == nil && errval == nil {
-			o.mapTempLampsOOT[uint32(lampid)] = &ltr
+		lampId, err2 := strconv.Atoi(k)
+		err3 := json.UnmarshalFromString(v, &ltr)
+		if err2 == nil && err3 == nil {
+			o.mapTempLampsOOT[uint32(lampId)] = &ltr
 		}
 	}
 	return nil
 }
 func (o *Concentrator) ReloadBroadCastFromRedis() error {
-	strTime, err := redisEdgeData.Get(LampBroadcastPrefix + o.devinfo.DevCode).Result()
+	strTime, err := redisEdgeData.Get(LampBroadcastPrefix + o.devInfo.DevCode).Result()
 	if err != nil {
 		if err == redis.Nil {
 			return nil
 		}
-		logrus.Errorf("Concentrator.ReloadBroadCastFromRedis设备[%s]从redis加载广播恢复截止时间失败:%s", o.devinfo.DevCode, err.Error())
 		return err
 	}
 	if t, err := util.MlParseTime(strTime); err == nil {
@@ -256,20 +241,17 @@ func (o *Concentrator) ReloadBroadCastFromRedis() error {
 }
 
 func (o *Concentrator) ReloadLampAlarmFromRedis() error {
-	mapAlarm, err := redisEdgeData.HGetAll(LampAlarmPrefix + o.devinfo.DevCode).Result()
+	mapAlarm, err := redisEdgeData.HGetAll(LampAlarmPrefix + o.devInfo.DevCode).Result()
 	if err != nil {
 		if err == redis.Nil {
 			return nil
 		}
-		logrus.Errorf("Concentrator.ReloadLampAlarmFromRedis设备[%s]从redis加载广播恢复截止时间失败:%s", o.devinfo.DevCode, err.Error())
 		return err
 	}
 	for k, v := range mapAlarm {
 		var lai LampAlarmInfo
 		if err := json.UnmarshalFromString(v, &lai); err == nil {
 			o.mapLampAlarm[k] = &lai
-		} else {
-			logrus.Errorf("从redis获取的告警信息还原失败,原内容:%s,失败原因:%s", v, err.Error())
 		}
 	}
 	return nil
@@ -277,14 +259,12 @@ func (o *Concentrator) ReloadLampAlarmFromRedis() error {
 
 func (o *Concentrator) Handle() {
 	defer func() {
-		if err := recover(); err != nil {
-			logrus.Errorf("Concentrator.Handle发生异常:%v", err)
-			logrus.Errorf("Concentrator.Handle发生异常,堆栈信息:%s", string(debug.Stack()))
-			go o.Handle()
-		}
+		recover()
+		go o.Handle()
+
 	}()
 
-	o.queryPoleids()
+	o.queryPush()
 	o.BroadcastTime()
 
 	exit := false
@@ -294,10 +274,9 @@ func (o *Concentrator) Handle() {
 	for {
 		select {
 		case <-o.ctx.Done():
-			logrus.Errorf("设备[%s]的HandlePole退出,原因:%v", o.devinfo.DevCode, o.ctx.Err())
 			exit = true
-		case devinfo_ := <-o.chanDevInfo:
-			o.devinfo = devinfo_
+		case devInfo := <-o.chanDevInfo:
+			o.devInfo = devInfo
 		case mi := <-o.chanModelInfo:
 			o.UpdateModel2(mi)
 		default:
@@ -306,8 +285,6 @@ func (o *Concentrator) Handle() {
 				if mm, ok := m.(mqtt.Message); ok {
 					if fn, ok := o.mapTopicHandle[mm.Topic()]; ok {
 						fn(mm)
-					} else {
-						logrus.Errorf("Concentrator.Handle:不支持的主题:%s", mm.Topic())
 					}
 				}
 			} else {
@@ -317,7 +294,7 @@ func (o *Concentrator) Handle() {
 				}
 				//每小时同步一次时间
 				if time.Now().Sub(LastTime).Minutes() > 60 {
-					o.queryPoleids()  //每小时从服务端同步一次单灯编号
+					o.queryPush()     //每小时从服务端同步一次单灯编号
 					o.BroadcastTime() //每小时广播一次时间同步消息
 					LastTime = time.Now()
 				}
@@ -328,7 +305,7 @@ func (o *Concentrator) Handle() {
 				if quantity == 0 || send {
 					if nextFillTime.IsZero() || nextFillTime.Before(util.MlNow()) {
 						o.fillReadQueue()
-						nextFillTime = util.MlNow().Add(time.Duration(o.devinfo.SendCloud) * time.Millisecond)
+						nextFillTime = util.MlNow().Add(time.Duration(o.devInfo.SendCloud) * time.Millisecond)
 					}
 					if send {
 						mapData = make(map[string]*protocol.CHZB_LampData)
@@ -348,58 +325,32 @@ func (o *Concentrator) CheckRecoveryAuto(force bool) {
 		for k := range o.mapTempLampsOOT {
 			delete(o.mapTempLampsOOT, k)
 		}
-		if err := o.BroadcastAuto(); err != nil {
-			logrus.Errorf("广播恢复时控失败:%s", err.Error())
-		} else {
+		if err := o.BroadcastAuto(); err == nil {
 			o.broadcastAutoTime = time.Time{}
 			//删除redis中所有临时开关灯记录
-			if err := redisEdgeData.Del(LampSwitchPrefix + o.devinfo.DevCode).Err(); err != nil {
-				logrus.Errorf("手动广播恢复时控,更新redis失败:%s", err.Error())
-			}
-			logrus.Info("广播恢复时控成功")
+			redisEdgeData.Del(LampSwitchPrefix + o.devInfo.DevCode)
 		}
 	} else {
 		//如果广播控模式未过期,则判断单灯是否手动控过期,过期则恢复
 		var strList []string
 		for k, v := range o.mapTempLampsOOT {
 			if time.Time(v.End).Before(util.MlNow()) {
-				if err := o.SetPoleAuto(k); err != nil {
-					logrus.Errorf("单灯[%d]恢复时控失败:%s", k, err.Error())
-				} else {
-					logrus.Infof("单灯[%d]恢复时控成功", k)
+				if err := o.SetPoleAuto(k); err == nil {
 					strList = append(strList, strconv.Itoa(int(k)))
 					delete(o.mapTempLampsOOT, k)
 				}
 			}
 		}
 		if len(strList) > 0 {
-			if err := redisEdgeData.HDel(LampSwitchPrefix+o.devinfo.DevCode, strList...).Err(); err != nil {
-				logrus.Errorf("手动恢复灯控[%v]时控模式,更新redis失败:%s", strList, err.Error())
-			}
+			_ = redisEdgeData.HDel(LampSwitchPrefix+o.devInfo.DevCode, strList...)
 		}
 	}
 }
 
-func (o *Concentrator) queryPoleids() {
+func (o *Concentrator) queryPush() {
 	var obj protocol.Pack_CHZB_EmptyObject
-	if str, err := obj.EnCode(o.devinfo.DevCode, appConfig.GID, GetNextUint64()); err == nil {
-		GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_QUERY_LAMP), str, mqtt.AtMostOnce, ToCloud)
-	}
-}
-
-func ConvertExcept(except uint16) string {
-	//-1初始值 0正常,1异常亮灯,2异常熄灯,3亮度异常
-	switch except {
-	case protocol.LE_OK: //正常(正常开灯或熄灯状态)
-		return "正常"
-	case protocol.LE_ON: //亮灯异常(本该关灯状态)
-		return "熄灯时段亮灯"
-	case protocol.LE_OFF: //亮灯,但亮度异常(本该开灯状态,但开灯亮度不对)
-		return "亮灯时段熄灯"
-	case protocol.LE_ON_BRIGHTNESS:
-		return "亮灯但亮度异常"
-	default:
-		return "状态未知"
+	if str, err := obj.EnCode(o.devInfo.DevCode, appConfig.GID, GetNextUint64()); err == nil {
+		GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_QUERY_LAMP), str, mqtt.AtMostOnce, ToCloud)
 	}
 }
 
@@ -446,8 +397,8 @@ func (o *Concentrator) NextQueueRead(mapData map[string]*protocol.CHZB_LampData)
 
 	if quantity == 0 && len(mapData) > 0 {
 		var obj protocol.Pack_CHZB_UploadData
-		if str, err := obj.EnCode(o.devinfo.DevCode, appConfig.GID, GetNextUint64(), o.devinfo.TID, mapData); err == nil {
-			GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_DATA), str, mqtt.AtMostOnce, ToCloud)
+		if str, err := obj.EnCode(o.devInfo.DevCode, appConfig.GID, GetNextUint64(), o.devInfo.TID, mapData); err == nil {
+			GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_DATA), str, mqtt.AtMostOnce, ToCloud)
 		}
 		return quantity, true
 	}
@@ -461,8 +412,8 @@ func (o *Concentrator) UploadLampAlarm() {
 	for k, v := range o.mapLampAlarm {
 		if !v.Send && v.Alarm.EndTime == "" { //告警开始上报
 			var obj protocol.Pack_CHZB_LampAlarm
-			if str, err := obj.EnCode(o.devinfo.DevCode, appConfig.GID, GetNextUint64(), v.Alarm); err == nil {
-				GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_ALARM), str, mqtt.AtMostOnce, ToCloud)
+			if str, err := obj.EnCode(o.devInfo.DevCode, appConfig.GID, GetNextUint64(), v.Alarm); err == nil {
+				GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_ALARM), str, mqtt.AtMostOnce, ToCloud)
 			}
 			v.Send = true
 
@@ -470,30 +421,25 @@ func (o *Concentrator) UploadLampAlarm() {
 			strAlarm, _ := json.MarshalToString(v)
 			mapRedis := make(map[string]interface{})
 			mapRedis[k] = strAlarm
-			if err := redisEdgeData.HSet(LampAlarmPrefix+o.devinfo.DevCode, mapRedis).Err(); err != nil {
-				logrus.Errorf("告警信息缓存入redis失败:%s", err.Error())
-			}
-
+			redisEdgeData.HSet(LampAlarmPrefix+o.devInfo.DevCode, mapRedis)
 		} else if v.Alarm.EndTime != "" { //告警结束上报
 			var obj protocol.Pack_CHZB_LampAlarm
-			if str, err := obj.EnCode(o.devinfo.DevCode, appConfig.GID, GetNextUint64(), v.Alarm); err == nil {
-				GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_ALARM), str, mqtt.AtMostOnce, ToCloud)
+			if str, err := obj.EnCode(o.devInfo.DevCode, appConfig.GID, GetNextUint64(), v.Alarm); err == nil {
+				GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_ALARM), str, mqtt.AtMostOnce, ToCloud)
 			}
 			toDelete = append(toDelete, k)
 			delete(o.mapLampAlarm, k)
 		}
 	}
 	if len(toDelete) > 0 {
-		if err := redisEdgeData.HDel(LampAlarmPrefix+o.devinfo.DevCode, toDelete...).Err(); err != nil {
-			logrus.Errorf("告警信息从redis删除失败:%s", err.Error())
-		}
+		redisEdgeData.HDel(LampAlarmPrefix+o.devInfo.DevCode, toDelete...)
 	}
 }
 
 // CheckLampAlarm 检查开灯、关灯、亮度异常
 func (o *Concentrator) CheckLampAlarm(lnd LampNumberDID, b1, b2 uint8) {
 	//真实数据时间
-	now := util.MlNow().Add(-time.Duration(o.devinfo.WaitTime) * time.Millisecond)
+	now := util.MlNow().Add(-time.Duration(o.devInfo.WaitTime) * time.Millisecond)
 	except := uint16(protocol.LE_UNKNOWN)
 	//策略时间段检查
 	if oots, ok := o.mapLamps2OOT[lnd.LampID]; ok {
@@ -543,14 +489,12 @@ func (o *Concentrator) CheckLampAlarm(lnd LampNumberDID, b1, b2 uint8) {
 		if except == protocol.LE_OK { //告警结束
 			a.Alarm.EndTime = now.Format("2006-01-02 15:04:05")
 			a.Alarm.Brightness = b1
-			logrus.Debugf("灯控[%s]状态[%s]", lnd.DID, ConvertExcept(except))
 		}
 	} else {
 		if except != protocol.LE_OK { //告警开始
 			a := protocol.LampAlarm{DID: lnd.DID, AlarmType: except, AlarmBrightness: b1, StartTime: now.Format("2006-01-02 15:04:05")}
 			lai := LampAlarmInfo{Alarm: &a, Send: false}
 			o.mapLampAlarm[lnd.DID] = &lai
-			logrus.Debugf("灯控[%s]状态[%s]", lnd.DID, ConvertExcept(except))
 		}
 	}
 }
@@ -563,7 +507,7 @@ func (o *Concentrator) nextSeq() uint8 {
 }
 
 func (o *Concentrator) SendRecvData(aduRequest []byte, retry int) (aduResponse []byte, err error) {
-	serial := GetSerialMgr().GetSerialPort(o.devinfo.Code)
+	serial := GetSerialMgr().GetSerialPort(o.devInfo.Code)
 	if serial == nil {
 		return nil, ErrClosedConnection
 	}
@@ -571,7 +515,7 @@ func (o *Concentrator) SendRecvData(aduRequest []byte, retry int) (aduResponse [
 		retry = 1
 	}
 	for ; retry > 0; retry-- {
-		aduResponse, err = serial.SendRecvData(aduRequest, FlagChZigbee, o.devinfo.WaitTime)
+		aduResponse, err = serial.SendRecvData(aduRequest, FlagChZigbee, o.devInfo.WaitTime)
 		if err == nil {
 			break
 		}
@@ -580,7 +524,7 @@ func (o *Concentrator) SendRecvData(aduRequest []byte, retry int) (aduResponse [
 }
 
 func (o *Concentrator) SendData(aduRequest []byte, retry int) (err error) {
-	serial := GetSerialMgr().GetSerialPort(o.devinfo.Code)
+	serial := GetSerialMgr().GetSerialPort(o.devInfo.Code)
 	if serial == nil {
 		return ErrClosedConnection
 	}
@@ -588,7 +532,7 @@ func (o *Concentrator) SendData(aduRequest []byte, retry int) (err error) {
 		retry = 1
 	}
 	for ; retry > 0; retry-- {
-		if err = serial.SendData(aduRequest, FlagChZigbee, o.devinfo.WaitTime); err == nil {
+		if err = serial.SendData(aduRequest, FlagChZigbee, o.devInfo.WaitTime); err == nil {
 			break
 		}
 	}
@@ -616,7 +560,6 @@ func (o *Concentrator) BroadcastOnOrOff(on, brightness uint8) error {
 		cmd = zigbee.CmdSetBroadcastOff
 	}
 	var pack zigbee.PackUpgradeFuncCommand
-	//pack.SetData(0x0000FEFE, cmd, o.nextSeq(), []byte{0xFE, 0xFE, 0xFF})
 	pack.SetData(0x0000FEFE, cmd, o.nextSeq(), []byte{0xFE, 0xFE, 0xFF, brightness, brightness}) //灯1和2
 	buff, err := pack.EnCode()
 	defer PoolPut(buff)
@@ -645,9 +588,9 @@ func (o *Concentrator) SetOnOffTime(PoleID uint32, Cmd uint8, data []zigbee.OnOf
 	defer PoolPut(buff0)
 	buff0.Write(GetPoleIDByte(PoleID))
 
-	len := len(data)
+	length := len(data)
 	for i := 0; i < 4; i++ {
-		if i < len {
+		if i < length {
 			buff0.Write(data[i].EnCode())
 		} else {
 			buff0.Write((&zigbee.OnOffTime{}).EnCode())
@@ -701,8 +644,6 @@ func (o *Concentrator) GetOnOffTime(PoleID uint32, Cmd uint8) ([]zigbee.OnOffTim
 			ret = append(ret, v)
 		}
 		return ret, nil
-	} else {
-		logrus.Errorf("读取开关灯时间返回的内容错误:%s", hex.EncodeToString(recvdata))
 	}
 	return nil, errors.New("读取开关灯时间返回的内容错误")
 }
@@ -730,8 +671,6 @@ func (o *Concentrator) ReadPoleTime(PoleID uint32) (uint8, uint8, uint8, error)
 	}
 	if len(pgfcresp.Data) >= 5 {
 		return pgfcresp.Data[2], pgfcresp.Data[3], pgfcresp.Data[4], nil
-	} else {
-		logrus.Errorf("读取单灯时间返回的内容错误:%s", hex.EncodeToString(recvdata))
 	}
 	return 0, 0, 0, errors.New("读取单灯时间返回的内容错误")
 }
@@ -772,8 +711,6 @@ func (o *Concentrator) ReadElectricalPara(PoleID uint32) (*ElecPara, error) {
 		ep.Degree[0] = binary.BigEndian.Uint16(pgfcresp.Data[9:11])
 		ep.Degree[1] = binary.BigEndian.Uint16(pgfcresp.Data[11:13])
 		return &ep, nil
-	} else {
-		logrus.Errorf("读取电流电压电度返回的内容错误:%s", hex.EncodeToString(recvdata))
 	}
 	return nil, errors.New("读取电流电压电度返回错误")
 }
@@ -817,8 +754,6 @@ func (o *Concentrator) GetBrightness(PoleID uint32) (uint8, uint8, error) {
 	}
 	if pgfcresp.Cmd == zigbee.CmdReadBrightness && len(pgfcresp.Data) >= 4 {
 		return pgfcresp.Data[2], pgfcresp.Data[3], nil
-	} else {
-		logrus.Errorf("查询亮度返回的内容错误:%s", hex.EncodeToString(recvdata))
 	}
 	return 0, 0, errors.New("查询亮度返回错误")
 }
@@ -860,12 +795,11 @@ func (o *Concentrator) HandleTpChzbSetBroadcasttime(m mqtt.Message) {
 	var ret protocol.Pack_Ack
 	var err error
 	if err = obj.DeCode(m.PayloadString()); err != nil {
-		logrus.Errorf("协议解析错误:%s,协议主题:%s,协议内容:%s", err.Error(), m.Topic(), m.PayloadString())
 		return
 	}
 	err = o.BroadcastTime()
-	if str, err := ret.EnCode(o.devinfo.DevCode, appConfig.GID, obj.Seq, err); err == nil {
-		GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_SET_BROADCASTTIME_ACK), str, mqtt.AtMostOnce, ToCloud)
+	if str, err := ret.EnCode(o.devInfo.DevCode, appConfig.GID, obj.Seq, err); err == nil {
+		GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_SET_BROADCASTTIME_ACK), str, mqtt.AtMostOnce, ToCloud)
 	}
 }
 
@@ -874,16 +808,15 @@ func (o *Concentrator) HandleTpChzbSetWaittime(m mqtt.Message) {
 	var ret protocol.Pack_Ack
 	var err error
 	if err = obj.DeCode(m.PayloadString()); err != nil {
-		logrus.Errorf("协议解析错误:%s,协议主题:%s,协议内容:%s", err.Error(), m.Topic(), m.PayloadString())
 		return
 	}
 	if obj.Data.Waittime < 1000 || obj.Data.Waittime > 15000 {
 		err = errors.New("设置的等待时间不在[1000,15000]范围")
 	} else {
-		o.devinfo.WaitTime = obj.Data.Waittime
+		o.devInfo.WaitTime = obj.Data.Waittime
 	}
-	if str, err := ret.EnCode(o.devinfo.DevCode, appConfig.GID, obj.Seq, err); err == nil {
-		GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_SET_WAITTIME_ACK), str, mqtt.AtMostOnce, ToCloud)
+	if str, err := ret.EnCode(o.devInfo.DevCode, appConfig.GID, obj.Seq, err); err == nil {
+		GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_SET_WAITTIME_ACK), str, mqtt.AtMostOnce, ToCloud)
 	}
 }
 
@@ -893,10 +826,9 @@ func (o *Concentrator) HandleTpChzbSetSwitch(m mqtt.Message) {
 	var err error
 	mapIpole := make(map[uint32]*protocol.StateError)
 	if err = obj.DeCode(m.PayloadString()); err != nil {
-		logrus.Errorf("协议解析错误:%s,协议主题:%s,协议内容:%s", err.Error(), m.Topic(), m.PayloadString())
 		return
 	}
-	if obj.Id != o.devinfo.DevCode {
+	if obj.Id != o.devInfo.DevCode {
 		return
 	}
 	Brightness := obj.Data.Brightness
@@ -909,13 +841,13 @@ func (o *Concentrator) HandleTpChzbSetSwitch(m mqtt.Message) {
 		End:        util.MLTime(util.MlNow().Add(time.Duration(obj.Data.Recovery) * time.Second)), //延迟2分钟,以防指令在队列中未及时执行
 		Brightness: Brightness,
 	}
-	ltrstr, _ := json.MarshalToString(ltr)
+	str, _ := json.MarshalToString(ltr)
 	if len(obj.Data.LampIDs) == 0 { //广播
 		err = o.BroadcastOnOrOff(obj.Data.Switch, Brightness)
 		o.broadcastAutoTime = util.MlNow().Add(time.Duration(obj.Data.Recovery) * time.Second)
 		for k := range o.mapLamps {
-			mapRedisTempLampsOOT[strconv.Itoa(int(k))] = ltrstr //redis
-			o.mapTempLampsOOT[k] = &ltr                         //内存
+			mapRedisTempLampsOOT[strconv.Itoa(int(k))] = str //redis
+			o.mapTempLampsOOT[k] = &ltr                      //内存
 		}
 	} else { //指定的灯
 		for _, pid := range obj.Data.LampIDs {
@@ -925,15 +857,13 @@ func (o *Concentrator) HandleTpChzbSetSwitch(m mqtt.Message) {
 			}
 			err = o.SetBrightness(pid, Brightness, Brightness)
 			mapIpole[pid] = protocol.NewStateError(err)
-			mapRedisTempLampsOOT[strconv.Itoa(int(pid))] = ltrstr //redis
-			o.mapTempLampsOOT[pid] = &ltr                         //内存
+			mapRedisTempLampsOOT[strconv.Itoa(int(pid))] = str //redis
+			o.mapTempLampsOOT[pid] = &ltr                      //内存
 		}
 	}
-	if err := redisEdgeData.HSet(LampSwitchPrefix+o.devinfo.DevCode, mapRedisTempLampsOOT).Err(); err != nil {
-		logrus.Errorf("手动开关灯时间设置[内容:%v]缓存到redis失败:%s", mapRedisTempLampsOOT, err.Error())
-	}
-	if str, err := ret.EnCode(o.devinfo.DevCode, appConfig.GID, obj.Seq, mapIpole); err == nil {
-		GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_SET_SWITCH_ACK), str, mqtt.AtMostOnce, ToAll)
+	redisEdgeData.HSet(LampSwitchPrefix+o.devInfo.DevCode, mapRedisTempLampsOOT)
+	if str, err := ret.EnCode(o.devInfo.DevCode, appConfig.GID, obj.Seq, mapIpole); err == nil {
+		GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_SET_SWITCH_ACK), str, mqtt.AtMostOnce, ToAll)
 	}
 }
 func (o *Concentrator) HandleTpChzbSetRecoveryAuto(m mqtt.Message) {
@@ -942,10 +872,9 @@ func (o *Concentrator) HandleTpChzbSetRecoveryAuto(m mqtt.Message) {
 	var err error
 	mapIpole := make(map[uint32]*protocol.StateError)
 	if err = obj.DeCode(m.PayloadString()); err != nil {
-		logrus.Errorf("协议解析错误:%s,协议主题:%s,协议内容:%s", err.Error(), m.Topic(), m.PayloadString())
 		return
 	}
-	if obj.Id != o.devinfo.DevCode {
+	if obj.Id != o.devInfo.DevCode {
 		return
 	}
 	if len(obj.Data.LampIDs) == 0 { //广播
@@ -957,36 +886,29 @@ func (o *Concentrator) HandleTpChzbSetRecoveryAuto(m mqtt.Message) {
 			if err == nil {
 				delete(o.mapTempLampsOOT, v)
 				strList = append(strList, strconv.Itoa(int(v)))
-			} else {
-				logrus.Errorf("手动单灯[%d]恢复时控失败:%s", v, err.Error())
 			}
 			mapIpole[v] = protocol.NewStateError(err)
 		}
-		if err := redisEdgeData.HDel(LampSwitchPrefix+o.devinfo.DevCode, strList...).Err(); err != nil {
-			logrus.Errorf("手动恢复灯控[%v]时控模式,更新redis失败:%s", strList, err.Error())
-		}
+		redisEdgeData.HDel(LampSwitchPrefix+o.devInfo.DevCode, strList...)
 	}
 
-	if str, err := ret.EnCode(o.devinfo.DevCode, appConfig.GID, obj.Seq, mapIpole); err == nil {
-		GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_SET_RECOVERY_AUTO_ACK), str, mqtt.AtMostOnce, ToAll)
+	if str, err := ret.EnCode(o.devInfo.DevCode, appConfig.GID, obj.Seq, mapIpole); err == nil {
+		GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_SET_RECOVERY_AUTO_ACK), str, mqtt.AtMostOnce, ToAll)
 	}
 }
 
-func (o *Concentrator) HandleTpChzbSetOnofftime(m mqtt.Message) {
+func (o *Concentrator) HandleSetOnOffTime(m mqtt.Message) {
 	var obj protocol.Pack_SetOnOffTime
 	var ret protocol.Pack_CHZB_SeqLampAck
 	var err error
 	mapIpole := make(map[uint32]*protocol.StateError)
 	if err = obj.DeCode(m.PayloadString()); err != nil {
-		logrus.Errorf("协议解析错误:%s,协议主题:%s,协议内容:%s", err.Error(), m.Topic(), m.PayloadString())
 		return
 	}
-	if obj.Id != o.devinfo.DevCode {
+	if obj.Id != o.devInfo.DevCode {
 		return
 	}
 	if len(obj.Data.LampIDs) == 0 || len(obj.Data.OnOffTime) == 0 {
-		logrus.Errorf("Handle_TP_CHZB_SET_ONOFFTIME:错误,灯控编号[%v],时间段个数:%v",
-			obj.Data.LampIDs, obj.Data.OnOffTime)
 		return
 	}
 	mapRedisOOT := make(map[string]interface{})
@@ -1001,45 +923,38 @@ func (o *Concentrator) HandleTpChzbSetOnofftime(m mqtt.Message) {
 		}
 		data = append(data, dat)
 	}
-	datastr, _ := json.MarshalToString(data)
+	dataStr, _ := json.MarshalToString(data)
 	for _, v := range obj.Data.LampIDs {
 		if v == 0 || v == 0x0000FEFE { //编号等于0或为广播地址则不处理
 			continue
 		}
-		if err = o.SetOnOffTime(v, zigbee.CmdSetOnofftime, data); err != nil {
-			logrus.Errorf("单灯[%d]设置开关灯时间失败:%s", v, err.Error())
-		} else {
-			logrus.Infof("单灯[%d]设置开关灯时间成功", v)
-		}
+		o.SetOnOffTime(v, zigbee.CmdSetOnofftime, data)
 		mapIpole[v] = protocol.NewStateError(err)
-		mapRedisOOT[strconv.Itoa(int(v))] = datastr //缓存到redis
+		mapRedisOOT[strconv.Itoa(int(v))] = dataStr //缓存到redis
 		o.mapLamps2OOT[v] = data                    //缓存在内存中
 	}
 	//持久缓存到redis,以便于重启后读取进内存中
-	if err := redisEdgeData.HSet(LampOotPrefix+o.devinfo.DevCode, mapRedisOOT).Err(); err != nil {
-		logrus.Errorf("灯控时间设置[内容:%v]缓存到redis失败:%s", mapRedisOOT, err.Error())
-	}
-	if str, err := ret.EnCode(o.devinfo.DevCode, appConfig.GID, obj.Seq, mapIpole); err == nil {
-		GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_SET_ONOFFTIME_ACK), str, mqtt.AtMostOnce, ToCloud)
+	redisEdgeData.HSet(LampOotPrefix+o.devInfo.DevCode, mapRedisOOT)
+	if str, err := ret.EnCode(o.devInfo.DevCode, appConfig.GID, obj.Seq, mapIpole); err == nil {
+		GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_SET_ONOFFTIME_ACK), str, mqtt.AtMostOnce, ToCloud)
 	}
 }
 
-func (o *Concentrator) HandleTpChzbQueryOnofftime(m mqtt.Message) {
+func (o *Concentrator) HandleQueryOnOffTime(m mqtt.Message) {
 	var obj protocol.Pack_CHZB_QueryOnOffTime
 	var oot []zigbee.OnOffTime
 	var err error
 	if err = obj.DeCode(m.PayloadString()); err != nil {
-		logrus.Errorf("协议解析错误:%s,协议主题:%s,协议内容:%s", err.Error(), m.Topic(), m.PayloadString())
 		return
 	}
-	if obj.Id != o.devinfo.DevCode {
+	if obj.Id != o.devInfo.DevCode {
 		return
 	}
 	if obj.Data.Poleid > 0 {
 		oot, err = o.GetOnOffTime(obj.Data.Poleid, zigbee.CmdReadOnofftime)
 	}
 	var ret protocol.Pack_CHZB_QueryOnOffTimeAck
-	var poot []protocol.CHZB_OnOffTime
+	var offTimes []protocol.CHZB_OnOffTime
 	for _, v := range oot {
 		x := protocol.CHZB_OnOffTime{
 			OnHour:     v.OnHour,
@@ -1048,22 +963,21 @@ func (o *Concentrator) HandleTpChzbQueryOnofftime(m mqtt.Message) {
 			OffMinite:  v.OffMinite,
 			Brightness: v.Brightness,
 		}
-		poot = append(poot, x)
+		offTimes = append(offTimes, x)
 	}
-	if str, err := ret.EnCode(o.devinfo.DevCode, appConfig.GID, obj.Seq, obj.Data.Poleid, err, poot); err == nil {
-		GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_QUERY_ONOFFTIME_ACK), str, mqtt.AtMostOnce, ToCloud)
+	if str, err := ret.EnCode(o.devInfo.DevCode, appConfig.GID, obj.Seq, obj.Data.Poleid, err, offTimes); err == nil {
+		GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_QUERY_ONOFFTIME_ACK), str, mqtt.AtMostOnce, ToCloud)
 	}
 }
 
-func (o *Concentrator) HandleTpChzbSetUpdateLamp(m mqtt.Message) {
+func (o *Concentrator) HandleSetUpdateLamp(m mqtt.Message) {
 	var obj protocol.Pack_CHZB_LampIDs
 	var ret protocol.Pack_Ack
 	var err error
 	if err = obj.DeCode(m.PayloadString()); err != nil {
-		logrus.Errorf("协议解析错误:%s,协议主题:%s,协议内容:%s", err.Error(), m.Topic(), m.PayloadString())
 		return
 	}
-	if obj.Id != o.devinfo.DevCode {
+	if obj.Id != o.devInfo.DevCode {
 		return
 	}
 	if len(obj.Data.MapLamps) > 0 {
@@ -1076,16 +990,15 @@ func (o *Concentrator) HandleTpChzbSetUpdateLamp(m mqtt.Message) {
 		}
 		o.mapLamps = mapLampsTmp
 	}
-	if str, err := ret.EnCode(o.devinfo.DevCode, appConfig.GID, obj.Seq, err); err == nil {
-		GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_SET_UPDATE_LAMP_ACK), str, mqtt.AtMostOnce, ToCloud)
+	if str, err := ret.EnCode(o.devInfo.DevCode, appConfig.GID, obj.Seq, err); err == nil {
+		GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_SET_UPDATE_LAMP_ACK), str, mqtt.AtMostOnce, ToCloud)
 	}
 }
 
-func (o *Concentrator) HandleTpChzbQueryTime(m mqtt.Message) {
+func (o *Concentrator) HandleQueryTime(m mqtt.Message) {
 	var obj protocol.Pack_CHZB_QueryTime
 	var ret protocol.Pack_CHZB_QueryTimeAck
 	if err := obj.DeCode(m.PayloadString()); err != nil {
-		logrus.Errorf("协议解析错误:%s,协议主题:%s,协议内容:%s", err.Error(), m.Topic(), m.PayloadString())
 		return
 	}
 	var pt *protocol.CHZB_LampTime = nil
@@ -1093,7 +1006,7 @@ func (o *Concentrator) HandleTpChzbQueryTime(m mqtt.Message) {
 	if err == nil {
 		pt = &protocol.CHZB_LampTime{Hour: hh, Minite: mm, Second: ss}
 	}
-	if str, err := ret.EnCode(o.devinfo.DevCode, appConfig.GID, obj.Seq, obj.Data.LampID, err, pt); err == nil {
-		GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devinfo.DevCode, protocol.TP_CHZB_QUERY_TIME_ACK), str, mqtt.AtMostOnce, ToCloud)
+	if str, err := ret.EnCode(o.devInfo.DevCode, appConfig.GID, obj.Seq, obj.Data.LampID, err, pt); err == nil {
+		GetMQTTMgr().Publish(GetTopic(protocol.DT_CONCENTRATOR, o.devInfo.DevCode, protocol.TP_CHZB_QUERY_TIME_ACK), str, mqtt.AtMostOnce, ToCloud)
 	}
 }

+ 3 - 3
edge/ipole/config.go

@@ -13,8 +13,8 @@ import (
 var appConfig protocol.AppConfig
 var serialConfig protocol.SerialConfig
 
-func GetTopic(devtype, id, topic string) string {
-	return appConfig.Tenant + "/" + devtype + "/" + id + "/" + topic
+func GetTopic(devType, id, topic string) string {
+	return appConfig.Tenant + "/" + devType + "/" + id + "/" + topic
 }
 
 func loadAppConfig() error {
@@ -35,7 +35,7 @@ func loadSerialConfig() error {
 	return err
 }
 
-//加载模型文件
+// 加载模型文件
 func loadModel(tid uint16) (*protocol.IotModel, error) {
 	var o protocol.IotModel
 	var fname = util.GetPath(2) + strconv.Itoa(int(tid)) + ".json"

+ 15 - 15
edge/ipole/devmgr.go

@@ -52,10 +52,10 @@ type DeviceMgr struct {
 }
 
 // AddDevices 新增
-func (o *DeviceMgr) AddDevices(devinfos []protocol.DevInfo) {
+func (o *DeviceMgr) AddDevices(infos []protocol.DevInfo) {
 	o.mu.Lock()
 	defer o.mu.Unlock()
-	for _, v := range devinfos {
+	for _, v := range infos {
 		if _, ok := o.mapDevice[v.DevCode]; ok {
 			logrus.Errorf("AddDevices:已添加该设备,不可重复添加:devcode=%s", v.DevCode)
 			continue
@@ -69,26 +69,26 @@ func (o *DeviceMgr) AddDevices(devinfos []protocol.DevInfo) {
 }
 
 // RemoveDevice 删除
-func (o *DeviceMgr) RemoveDevice(devcode string) {
+func (o *DeviceMgr) RemoveDevice(devCode string) {
 	o.mu.Lock()
 	defer o.mu.Unlock()
-	if device, ok := o.mapDevice[devcode]; ok {
+	if device, ok := o.mapDevice[devCode]; ok {
 		device.Stop()
-		delete(o.mapDevice, devcode)
+		delete(o.mapDevice, devCode)
 	}
 }
 
 // UpdateDevices 新增或修改
-func (o *DeviceMgr) UpdateDevices(code uint8, devinfos []protocol.DevInfo) {
+func (o *DeviceMgr) UpdateDevices(code uint8, infos []protocol.DevInfo) {
 	//先遍历devinfos
-	mapDevinfos := make(map[string]*protocol.DevInfo)
-	for _, v := range devinfos {
-		mapDevinfos[v.DevCode] = &v
+	deviceInfos := make(map[string]*protocol.DevInfo)
+	for _, v := range infos {
+		deviceInfos[v.DevCode] = &v
 	}
 
 	o.mu.Lock()
 	defer o.mu.Unlock()
-	if len(devinfos) == 0 {
+	if len(infos) == 0 {
 		for k, v := range o.mapDevice {
 			if v.GetDevInfo().Code == code {
 				v.Stop()
@@ -103,14 +103,14 @@ func (o *DeviceMgr) UpdateDevices(code uint8, devinfos []protocol.DevInfo) {
 		if v.GetDevInfo().Code != code {
 			continue
 		}
-		if _, ok := mapDevinfos[k]; !ok {
+		if _, ok := deviceInfos[k]; !ok {
 			v.Stop()
 			delete(o.mapDevice, k)
 		}
 	}
 
 	//再添加新的设备或更新设备
-	for _, v := range devinfos {
+	for _, v := range infos {
 		if device, ok := o.mapDevice[v.DevCode]; ok {
 			old := device.GetDevInfo()
 			if v.ProtocolType == old.ProtocolType { //设备类型没变
@@ -142,12 +142,12 @@ func (o *DeviceMgr) GetDevice(devcode string) Device {
 }
 
 // StopDevice 停止
-func (o *DeviceMgr) StopDevice(devcode string) {
+func (o *DeviceMgr) StopDevice(devCode string) {
 	o.mu.Lock()
 	defer o.mu.Unlock()
-	if device, ok := o.mapDevice[devcode]; ok {
+	if device, ok := o.mapDevice[devCode]; ok {
 		device.Stop()
-		delete(o.mapDevice, devcode)
+		delete(o.mapDevice, devCode)
 	}
 }
 

+ 0 - 141
edge/ipole/handlefile.go

@@ -1,141 +0,0 @@
-package main
-
-import (
-	"io/ioutil"
-	"os"
-	"regexp"
-	"strconv"
-	"strings"
-
-	"lc/common/protocol"
-	"lc/common/util"
-)
-
-func HandleFile(topic string, obj *protocol.Pack_SeqFileObject) error {
-	switch topic {
-	case protocol.TP_GW_SET_APP:
-		var app protocol.AppConfig
-		if err := json.UnmarshalFromString(obj.Data.Content, &app); err != nil {
-			return err
-		}
-		return SaveFile(obj.Data.File, obj.Data.Content, 0)
-	case protocol.TP_GW_SET_SERIAL:
-		var sc protocol.SerialConfig
-		if err := json.UnmarshalFromString(obj.Data.Content, &sc); err != nil {
-			return err
-		}
-		return SaveFile(obj.Data.File, obj.Data.Content, 0)
-	case protocol.TP_GW_SET_RTU:
-		var rtu protocol.MapDevConfig
-		if err := json.UnmarshalFromString(obj.Data.Content, &rtu); err != nil {
-			return err
-		}
-		return SaveFile(obj.Data.File, obj.Data.Content, 1)
-	case protocol.TP_GW_SET_MODEL:
-		var iot protocol.IotModel
-		if err := json.UnmarshalFromString(obj.Data.Content, &iot); err != nil {
-			return err
-		}
-		return SaveFile(obj.Data.File, obj.Data.Content, 2)
-	}
-	return nil
-}
-
-func SaveFile(fname, content string, flag uint8) error {
-	var SavePath string
-	switch flag {
-	case 0:
-		SavePath = util.GetPath(0)
-	case 1:
-		SavePath = util.GetPath(1)
-	case 2:
-		SavePath = util.GetPath(2)
-	}
-	//存成临时文件
-	if err := ioutil.WriteFile(util.GetPath(4)+fname, []byte(content), os.ModePerm); err != nil {
-		return err
-	}
-	//备份原文件
-	if err := os.Rename(SavePath+fname, SavePath+fname+".bak"); err != nil {
-		return err
-	}
-
-	//拷贝新文件
-	if err := os.Rename(util.GetPath(4)+fname, SavePath+fname); err != nil {
-		//拷贝失败,则还原文件
-		if err := os.Rename(SavePath+fname+".bak", SavePath+fname); err != nil {
-			return err
-		}
-		return err
-	}
-	return nil
-}
-
-func ReadFileContent(topic string, o *protocol.Pack_SeqFileObject) {
-	switch topic {
-	case protocol.TP_GW_APP:
-		if buf, err := ioutil.ReadFile(util.GetPath(0) + "app.json"); err == nil {
-			o.Data.File = "app.json"
-			o.Data.Content = string(buf)
-		}
-	case protocol.TP_GW_SERIAL:
-		if buf, err := ioutil.ReadFile(util.GetPath(0) + "serial.json"); err == nil {
-			o.Data.File = "serial.json"
-			o.Data.Content = string(buf)
-		}
-	}
-}
-
-func ReadMutilFileContent(topic string, id uint, o *protocol.Pack_MutilFileObject) {
-	var FileDir string
-	if topic == protocol.TP_GW_RTU {
-		FileDir = util.GetPath(1)
-	} else if topic == protocol.TP_GW_MODEL {
-		FileDir = util.GetPath(2)
-	} else if topic == protocol.TP_GW_LOG {
-		FileDir = util.GetPath(3)
-	} else if topic == protocol.TP_GW_APP || topic == protocol.TP_GW_SERIAL {
-		FileDir = util.GetPath(0)
-	}
-
-	//RTU或模型文件
-	if topic == protocol.TP_GW_RTU || topic == protocol.TP_GW_MODEL {
-		if id > 0 {
-			fname := strconv.Itoa(int(id)) + ".json"
-			AddFileObject(FileDir, fname, o)
-		} else {
-			rd, _ := ioutil.ReadDir(FileDir)
-			for _, fi := range rd {
-				if !fi.IsDir() {
-					ok, _ := regexp.MatchString(`[1-9].*json`, fi.Name())
-					if ok {
-						AddFileObject(FileDir, fi.Name(), o)
-					}
-				}
-			}
-		}
-	} else if topic == protocol.TP_GW_LOG { //日志
-		rd, _ := ioutil.ReadDir(FileDir)
-		for _, fi := range rd {
-			if !fi.IsDir() {
-				ok := strings.HasSuffix(fi.Name(), ".log")
-				if ok {
-					AddFileObject(FileDir, fi.Name(), o)
-				}
-			}
-		}
-	} else if topic == protocol.TP_GW_APP {
-		AddFileObject(FileDir, "app.json", o)
-	} else if topic == protocol.TP_GW_SERIAL {
-		AddFileObject(FileDir, "serial.json", o)
-	}
-}
-
-func AddFileObject(fpath, fname string, o *protocol.Pack_MutilFileObject) {
-	if buf, err := ioutil.ReadFile(fpath + fname); err == nil {
-		var fo protocol.FileObject
-		fo.File = fname
-		fo.Content = string(buf)
-		o.Data.Files = append(o.Data.Files, fo)
-	}
-}

+ 0 - 66
edge/ipole/liquid.go

@@ -1,66 +0,0 @@
-package main
-
-import (
-	"math"
-	"time"
-
-	"lc/common/util"
-)
-
-type LiquidData struct {
-	Time      time.Time //采集时间
-	SensorVal float64   //传感器采集值
-	CalcVal   float64   //深度
-}
-
-type LiguidDataMgr struct {
-	LastHourData []LiquidData //最近一小时数据
-}
-
-func (o *LiguidDataMgr) GetAverageLast() (float64, float64) {
-	n := 0
-	for i, v := range o.LastHourData {
-		if util.MlNow().Sub(v.Time).Minutes() > 1 {
-			n = i
-		} else {
-			break
-		}
-	}
-	if n > 0 {
-		o.LastHourData = o.LastHourData[n+1:]
-	}
-	if len(o.LastHourData) > 0 {
-		//取过去一小时的平均值
-		depthSum := 0.000
-		for _, v := range o.LastHourData {
-			depthSum += v.CalcVal
-		}
-		depthSum = depthSum / float64(len(o.LastHourData))
-		return Precision(depthSum, 3, false), o.LastHourData[len(o.LastHourData)-1].CalcVal
-	}
-	return 0.000, 0.000
-}
-
-func (o *LiguidDataMgr) Adjust(h0, h float64) float64 {
-	depth := 0.000
-	if h0 > h {
-		depth = Precision(h0-h, 3, false)
-	}
-	data := LiquidData{Time: util.MlNow(), SensorVal: h, CalcVal: 0.000}
-	if len(o.LastHourData) > 0 {
-		agv, last := o.GetAverageLast()
-		diff := math.Abs(last - depth)
-		//本次深度值和上次相差100mm,则忽略本次值
-		if diff > 100 {
-			data.CalcVal = agv
-		} else {
-			data.CalcVal = depth
-		}
-	} else {
-		if depth < 200 {
-			data.CalcVal = depth
-		}
-	}
-	o.LastHourData = append(o.LastHourData, data)
-	return data.CalcVal
-}

+ 16 - 41
edge/ipole/main.go

@@ -1,17 +1,12 @@
 package main
 
 import (
-	"net/http"
 	_ "net/http/pprof"
-	"os"
 	"os/exec"
-	"os/signal"
 	"runtime"
-	"syscall"
 	"time"
 
 	jsoniter "github.com/json-iterator/go"
-	"github.com/sanbornm/go-selfupdate/selfupdate"
 	"github.com/sirupsen/logrus"
 	"github.com/thinkgos/timing/v3"
 
@@ -20,11 +15,11 @@ import (
 
 var json = jsoniter.ConfigCompatibleWithStandardLibrary
 
-var gopool *util.Pool
+var pool *util.Pool
 var IDGen util.IdWorker
 
 var version = "1.4.1"
-var appname = "ipole"
+var appName = "ipole"
 
 func Stat(args ...interface{}) interface{} {
 	lastGC := time.Now()
@@ -47,20 +42,6 @@ func GetNextUint64() uint64 {
 	return uint64(u64)
 }
 
-func EnableUpdate() {
-	var updater = &selfupdate.Updater{
-		CurrentVersion: version,
-		ApiURL:         "http://106.52.134.22:8180/",
-		BinURL:         "http://106.52.134.22:8180/",
-		DiffURL:        "http://106.52.134.22:8180/",
-		Dir:            "update/",
-		CmdName:        appname, // app name
-	}
-	if updater != nil {
-		go updater.BackgroundRun()
-	}
-}
-
 // SyncTime 每半小时同步一次时间
 func SyncTime(args ...interface{}) interface{} {
 	for {
@@ -79,30 +60,24 @@ func main() {
 
 	util.InitLogrus("release")
 
-	logrus.Infof("当前程序版本:%s", appname+" "+version)
+	logrus.Infof("当前程序版本:%s", appName+" "+version)
 
 	if err := loadAppConfig(); err != nil {
 		logrus.Errorf("loadAppConfig错误:%s", err.Error())
 		return
 	}
-	//升级检查
-	if appConfig.Upgrade {
-		EnableUpdate()
-	}
 
 	if err := loadSerialConfig(); err != nil {
 		logrus.Errorf("loadAppConfig错误:%s", err.Error())
 		return
 	}
 
-	IDGen.InitIdWorker(1000, 1)
+	_ = IDGen.InitIdWorker(1000, 1)
 
 	GetMQTTMgr()
 
 	InitRedis(&util.RedisConfig{Redis_Address: appConfig.Edge.Redis.Server, Redis_Password: appConfig.Edge.Redis.Password})
-	defer UninitRedis()
-
-	InitCloudMqttSubscribeTopics()
+	defer UnInitRedis()
 
 	//打开串口
 	GetSerialMgr().AddSerialPorts(serialConfig.Serial)
@@ -114,15 +89,15 @@ func main() {
 		}
 	}
 
-	gopool = util.NewPool(10)
-	gopool.Add(SyncTime, 0)
-
-	gopool.Add(WatchDevConfig, 1)
-	gopool.Add(WatchModelConfig, 2)
-	gopool.Add(WatchConfConfig, 3)
-	gopool.Add(GetMQTTMgr().MQTTMessageHandle, 4)
-	gopool.Add(GetMQTTMgr().MQTTConnectMgr, 5)
-	gopool.Add(Stat, 6)
-	gopool.Run()
-	gopool.Wait()
+	pool = util.NewPool(10)
+	pool.Add(SyncTime, 0)
+
+	pool.Add(WatchDevConfig, 1)
+	pool.Add(WatchModelConfig, 2)
+	pool.Add(WatchConfConfig, 3)
+	pool.Add(GetMQTTMgr().MQTTMessageHandle, 4)
+	pool.Add(GetMQTTMgr().MQTTConnectMgr, 5)
+	pool.Add(Stat, 6)
+	pool.Run()
+	pool.Wait()
 }

+ 43 - 92
edge/ipole/modbusrtu.go

@@ -3,13 +3,10 @@ package main
 import (
 	"context"
 	"encoding/binary"
-	"encoding/hex"
 	"errors"
 	"fmt"
-	"runtime/debug"
 	"time"
 
-	"github.com/sirupsen/logrus"
 	"github.com/thinkgos/timing/v3"
 
 	"lc/common/mqtt"
@@ -40,7 +37,7 @@ type Request struct {
 
 type ModbusRtu struct {
 	reqList       []*Request
-	devinfo       *protocol.DevInfo
+	devInfo       *protocol.DevInfo
 	model         *protocol.IotModel
 	ready         chan *Request
 	ctx           context.Context
@@ -52,7 +49,7 @@ type ModbusRtu struct {
 func NewModbusRtu(info *protocol.DevInfo) Device {
 	ctx, cancel := context.WithCancel(context.Background())
 	rtu := &ModbusRtu{
-		devinfo:       info,
+		devInfo:       info,
 		ready:         make(chan *Request, DefaultReadyQueuesLength),
 		ctx:           ctx,
 		cancel:        cancel,
@@ -62,21 +59,19 @@ func NewModbusRtu(info *protocol.DevInfo) Device {
 
 	iot, err := loadModel(info.TID)
 	if err != nil {
-		logrus.Errorf("ReloadModel:加载模型[tid=%d]文件发生错误:%s", info.TID, err.Error())
-	} else {
-		if iot.Protocol == ModbusRtuProtocol {
-			rtu.model = iot
-		} else {
-			logrus.Error("ModbusRtu.UpdateModel:物模型错误,非ModbusRTU协议")
-		}
+		return nil
+	}
+	if iot.Protocol == ModbusRtuProtocol {
+		rtu.model = iot
 	}
+
 	mapRtuUploadManager.Store(info.DevCode, NewRtuUploadManager(info))
 
 	return rtu
 }
 
 func (o *ModbusRtu) Start() {
-	GetMQTTMgr().Subscribe(GetTopic(o.GetDevType(), o.devinfo.DevCode, protocol.TP_MODBUS_CONTROL), mqtt.ExactlyOnce, o.HandleTpWControl, ToAll)
+	GetMQTTMgr().Subscribe(GetTopic(o.GetDevType(), o.devInfo.DevCode, protocol.TP_MODBUS_CONTROL), mqtt.ExactlyOnce, o.HandleTpWControl, ToAll)
 	go o.HandleData()
 }
 
@@ -84,20 +79,20 @@ func (o *ModbusRtu) Stop() {
 	//停止采集和处理
 	o.cancel()
 	//停止上传
-	if rtumgr, ok := mapRtuUploadManager.Load(o.devinfo.DevCode); ok {
-		prtumgr := rtumgr.(*RtuUploadManager)
-		if prtumgr != nil {
-			prtumgr.Stop()
+	if value, ok := mapRtuUploadManager.Load(o.devInfo.DevCode); ok {
+		uploadManager := value.(*RtuUploadManager)
+		if uploadManager != nil {
+			uploadManager.Stop()
 		}
 	}
 }
 
-func (o *ModbusRtu) UpdateInfo(devinfo protocol.DevInfo) {
-	o.chanDevInfo <- &devinfo
+func (o *ModbusRtu) UpdateInfo(devInfo protocol.DevInfo) {
+	o.chanDevInfo <- &devInfo
 }
 
 func (o *ModbusRtu) GetDevInfo() *protocol.DevInfo {
-	return o.devinfo
+	return o.devInfo
 }
 
 func (o *ModbusRtu) UpdateModel(tid uint16, flag int) {
@@ -111,37 +106,31 @@ func (o *ModbusRtu) UpdateModel(tid uint16, flag int) {
 }
 
 func (o *ModbusRtu) UpdateModel2(mi *ModelInfo) {
-	if o.devinfo.TID != mi.TID {
+	if o.devInfo.TID != mi.TID {
 		return
 	}
 	if mi.Flag == 0 {
-		logrus.Errorf("设备[%s]的物模型[tid=%d]模型文件被删除,下次启动即将生效。", o.devinfo.DevCode, mi.TID)
 		return
 	}
-	logrus.Debugf("ModbusRtu.UpdateModel2:更新设备[%s]的物模型[%d]", o.devinfo.DevCode, mi.TID)
 	iot, err := loadModel(mi.TID)
 	if err != nil {
-		logrus.Errorf("ModbusRtu.UpdateModel2:加载模型[%d]文件错误:%s", mi.TID, err.Error())
 		return
 	}
 	if iot.Protocol == ModbusRtuProtocol { //合法的物模型
 		o.model = iot
 		o.clearRequest()
 		o.updateRequest()
-		logrus.Infof("ModbusRtu.UpdateModel2:更新设备[%s]的物模型[%d]成功", o.devinfo.DevCode, mi.TID)
-	} else {
-		logrus.Error("ModbusRtu.UpdateModel2:物模型错误,TID和文件名tid不一致或协议非ModbusRTU协议")
 	}
 }
 
 func (o *ModbusRtu) GetDevType() string {
-	if o.devinfo.DevType == 1 {
+	if o.devInfo.DevType == 1 {
 		return protocol.DT_CONCENTRATOR
-	} else if o.devinfo.DevType == 2 {
+	} else if o.devInfo.DevType == 2 {
 		return protocol.DT_ENVIRONMENT
-	} else if o.devinfo.DevType == 4 {
+	} else if o.devInfo.DevType == 4 {
 		return protocol.DT_LIQUID
-	} else if o.devinfo.DevType == 5 {
+	} else if o.devInfo.DevType == 5 {
 		return protocol.DT_ROAD_COND
 	}
 	return "unknown"
@@ -150,21 +139,17 @@ func (o *ModbusRtu) GetDevType() string {
 // HandleData 数据处理协程
 func (o *ModbusRtu) HandleData() {
 	defer func() {
-		if err := recover(); err != nil {
-			logrus.Error("ModbusRtu.HandleData:panic:", err)
-			logrus.Error("stack:", string(debug.Stack()))
-			go o.HandleData()
-		}
+		recover()
+		go o.HandleData()
 	}()
 	o.updateRequest()
 	var req *Request
 	for {
 		select {
 		case <-o.ctx.Done():
-			logrus.Errorf("设备[%s]的HandleData退出,原因:%v", o.devinfo.DevCode, o.ctx.Err())
 			return
-		case devinfo_ := <-o.chanDevInfo:
-			o.devinfo = devinfo_
+		case info := <-o.chanDevInfo:
+			o.devInfo = info
 		case mi := <-o.chanModelInfo:
 			o.UpdateModel2(mi) //物模型配置文件更新
 		case req = <-o.ready: //查看是否有准备好的请求
@@ -184,13 +169,10 @@ func (o *ModbusRtu) clearRequest() {
 
 func (o *ModbusRtu) updateRequest() {
 	for k, v := range o.model.Packet {
-		r := Request{CID: k, Rtuinfo: o.devinfo, FuncCode: v.Code, Address: v.Addr,
+		r := Request{CID: k, Rtuinfo: o.devInfo, FuncCode: v.Code, Address: v.Addr,
 			Quantity: v.Quantity, ScanRate: time.Duration(v.Cycle) * time.Millisecond,
 		}
-		if err := o.AddGatherJob(&r); err != nil {
-			logrus.Errorf("给串口[%d]添加采集任务[DevCode=%s,SlaveID=%d,TID=%d,CID=%d]失败:%s",
-				o.devinfo.Code, o.devinfo.DevCode, o.devinfo.DevID, o.devinfo.TID, k, err.Error())
-		} else {
+		if err := o.AddGatherJob(&r); err == nil {
 			o.reqList = append(o.reqList, &r)
 		}
 	}
@@ -226,12 +208,11 @@ func (o *ModbusRtu) AddGatherJob(r *Request) error {
 func (o *ModbusRtu) ProcReadCoils(cid uint8, address, quality uint16, valBuf []byte) {
 
 }
-func (o *ModbusRtu) ProcReadDiscretes(cid uint8, address, quality uint16, valBuf []byte) {
+func (o *ModbusRtu) ReadDiscrete(cid uint8, address, quality uint16, valBuf []byte) {
 
 }
 
 func (o *ModbusRtu) ProcReadHoldingRegisters(cid uint8, address, quality uint16, valBuf []byte) {
-	logrus.Debugf("收到自寄存器地址%d;开始的数据:%v", address, hex.EncodeToString(valBuf))
 	dataLen := len(valBuf)
 	if o.model.Packet[cid].Resplen != uint(dataLen) {
 		return
@@ -242,7 +223,6 @@ func (o *ModbusRtu) ProcReadHoldingRegisters(cid uint8, address, quality uint16,
 			continue
 		}
 		if int(v.Start+v.Len) > dataLen { //索引超长,忽略该项目
-			logrus.Errorf("物模型[TID=%d]配置的数据项[sid=%d]start加len超过采集响应的长度", o.model.TID, v.SID)
 			continue
 		}
 		var fVal float64
@@ -277,37 +257,31 @@ func (o *ModbusRtu) ProcReadHoldingRegisters(cid uint8, address, quality uint16,
 		}
 		fVal = fVal - float64(v.Base)
 
-		logrus.Debugf(v.NameZh, ":", fVal)
-
 		if v.Type == 0 || v.Type == 1 { //整数
 			dataMap[v.SID] = Precision(fVal, 0, true)
 		} else if v.Type == 2 || v.Type == 3 { //浮点数
 			dataMap[v.SID] = Precision(fVal, 3, false)
 		}
 	}
-	if rtumgr, ok := mapRtuUploadManager.Load(o.devinfo.DevCode); ok {
-		prtumgr := rtumgr.(*RtuUploadManager)
-		if prtumgr != nil {
-			prtumgr.AddData(dataMap)
+	if value, ok := mapRtuUploadManager.Load(o.devInfo.DevCode); ok {
+		uploadManager := value.(*RtuUploadManager)
+		if uploadManager != nil {
+			uploadManager.AddData(dataMap)
 		}
 	}
 }
 
 func (o *ModbusRtu) ProcReadInputRegisters(cid uint8, address, quality uint16, valBuf []byte) {
-	logrus.Debugf("收到自寄存器地址%d, 开始的数据:%v, 长度为:%d", address, hex.EncodeToString(valBuf), len(valBuf))
 	dataLen := len(valBuf)
 	if o.model.Packet[cid].Resplen != uint(dataLen) {
-		logrus.Errorf("ProcReadInputRegisters len no equal")
 		return
 	}
 	dataMap := make(map[uint16]float64)
 	for _, v := range o.model.DataUp {
 		if v.Cid != cid || v.Len == 0 {
-			logrus.Errorf("ProcReadInputRegisters Cid no equal")
 			continue
 		}
 		if int(v.Start+v.Len) > dataLen { //索引超长,忽略该项目
-			logrus.Errorf("物模型[TID=%d]配置的数据项[sid=%d]start加len超过采集响应的长度", o.model.TID, v.SID)
 			continue
 		}
 		var fVal float64
@@ -349,11 +323,10 @@ func (o *ModbusRtu) ProcReadInputRegisters(cid uint8, address, quality uint16, v
 		}
 	}
 
-	logrus.Debugf("ProcReadInputRegisters dataMap = %v", dataMap)
-	if rtumgr, ok := mapRtuUploadManager.Load(o.devinfo.DevCode); ok {
-		prtumgr := rtumgr.(*RtuUploadManager)
-		if prtumgr != nil {
-			prtumgr.AddData(dataMap)
+	if value, ok := mapRtuUploadManager.Load(o.devInfo.DevCode); ok {
+		uploadManager := value.(*RtuUploadManager)
+		if uploadManager != nil {
+			uploadManager.AddData(dataMap)
 		}
 	}
 }
@@ -366,15 +339,11 @@ func (o *ModbusRtu) ProcResult(err error, req *Request) {
 	} else {
 		//连续采集超过5次都错误,则报告设备离线
 		if req.ErrCnt == 5 {
-			logrus.Errorf("采集设备[DevCode=%s,SlaveID=%d,Tid=%d,Cid=%d]的数据发生错误:%s",
-				req.Rtuinfo.DevCode, req.Rtuinfo.DevID, req.Rtuinfo.TID, req.CID, err.Error())
-
 			//离线状态报告
 			var obj protocol.Pack_UploadData
 			if str, err := obj.EnCode(req.Rtuinfo.DevCode, appConfig.GID, GetNextUint64(), err, req.Rtuinfo.TID, nil); err == nil {
 				topic := GetTopic(o.GetDevType(), req.Rtuinfo.DevCode, protocol.TP_MODBUS_DATA)
 				GetMQTTMgr().Publish(topic, str, 0, ToAll)
-				logrus.Debugf("topic:%s,payload:%s", topic, str)
 			}
 		}
 	}
@@ -384,40 +353,30 @@ func (o *ModbusRtu) procRequest(req *Request) {
 	var err error
 	var result []byte
 	defer func() {
-		if err := recover(); err != nil {
-			logrus.Error("procRequest:panic:", err)
-			logrus.Error("stack:", string(debug.Stack()))
-		}
+		recover()
 	}()
 	req.TxCnt++
 	switch req.FuncCode {
 	// A bit of access read
 	case modbus.FuncCodeReadCoils:
 		result, err = o.ReadCoils(req.Rtuinfo.DevID, req.Address, req.Quantity)
-		logrus.Debugf("ReadCoils result:= %s", string(result))
 		if err == nil {
 			o.ProcReadCoils(req.CID, req.Address, req.Quantity, result)
 		}
 	case modbus.FuncCodeReadDiscreteInputs:
 		result, err = o.ReadDiscreteInputs(req.Rtuinfo.DevID, req.Address, req.Quantity)
-		logrus.Debugf("ReadDiscreteInputs result:= %s", string(result))
 		if err == nil {
-			o.ProcReadDiscretes(req.CID, req.Address, req.Quantity, result)
+			o.ReadDiscrete(req.CID, req.Address, req.Quantity, result)
 		}
 	// 16-bit access read
 	case modbus.FuncCodeReadHoldingRegisters: //03
 		result, err = o.ReadHoldingRegistersBytes(req.Rtuinfo.DevID, req.Address, req.Quantity)
-		logrus.Debugf("ReadHoldingRegistersBytes result:= %s", string(result))
 		if err == nil {
 			o.ProcReadHoldingRegisters(req.CID, req.Address, req.Quantity, result)
-		} else {
-			logrus.Errorf("设备上传网关数据为空!可能原因:未配置正确,请检查配置文件;设备线路或设备本身损坏;网关串口损坏.\n")
-			logrus.Errorf("error:%v\n", err)
 		}
 
 	case modbus.FuncCodeReadInputRegisters:
 		result, err = o.ReadInputRegistersBytes(req.Rtuinfo.DevID, req.Address, req.Quantity)
-		logrus.Debugf("ReadInputRegistersBytes result:= %s", string(result))
 		if err == nil {
 			o.ProcReadInputRegisters(req.CID, req.Address, req.Quantity, result)
 		}
@@ -451,23 +410,20 @@ func (o *ModbusRtu) HandleTpWControl(m mqtt.Message) {
 				data = make([]byte, 4, 4)
 				binary.BigEndian.PutUint32(data, uint32(obj.Data.Val))
 			}
-			err = o.WriteData(o.devinfo.DevID, v.Code, v.Addr, v.Quantity, data)
+			err = o.WriteData(o.devInfo.DevID, v.Code, v.Addr, v.Quantity, data)
 		} else {
 			err = errors.New(fmt.Sprintf("物模型[TID=%d]未配置该SID[sid=%d],请确保模型文件存在", obj.Data.Tid, obj.Data.Sid))
 		}
 	}
-	if str, err := ret.EnCode(o.devinfo.DevCode, appConfig.GID, obj.Seq, err); err == nil {
-		GetMQTTMgr().Publish(GetTopic(o.GetDevType(), o.devinfo.DevCode, protocol.TP_MODBUS_CONTROL_ACK), str, 0, ToAll)
+	if str, err := ret.EnCode(o.devInfo.DevCode, appConfig.GID, obj.Seq, err); err == nil {
+		GetMQTTMgr().Publish(GetTopic(o.GetDevType(), o.devInfo.DevCode, protocol.TP_MODBUS_CONTROL_ACK), str, 0, ToAll)
 	}
 }
 
 func (o *ModbusRtu) WriteData(slaveID, funcCode byte, address, quantity uint16, value []byte) error {
 	var err error
 	defer func() {
-		if err := recover(); err != nil {
-			logrus.Error("WriteData:panic:", err)
-			logrus.Error("stack:", string(debug.Stack()))
-		}
+		recover()
 	}()
 	switch funcCode {
 	case modbus.FuncCodeWriteSingleCoil: //5
@@ -486,18 +442,17 @@ func (o *ModbusRtu) WriteData(slaveID, funcCode byte, address, quantity uint16,
 	case modbus.FuncCodeWriteMultipleRegisters: //16
 		err = o.WriteMultipleRegistersBytes(slaveID, address, quantity, value)
 	default:
-		logrus.Errorf("不支持的功能码:%d", funcCode)
 		err = errors.New("不支持的功能码")
 	}
 	return err
 }
 
 func (o *ModbusRtu) SendRecvData(aduRequest []byte) (aduResponse []byte, err error) {
-	serial := GetSerialMgr().GetSerialPort(o.devinfo.Code)
+	serial := GetSerialMgr().GetSerialPort(o.devInfo.Code)
 	if serial == nil {
 		return nil, ErrClosedConnection
 	}
-	return serial.SendRecvData(aduRequest, FlagModbusRtu, o.devinfo.WaitTime)
+	return serial.SendRecvData(aduRequest, FlagModbusRtu, o.devInfo.WaitTime)
 }
 
 // Send request to the remote server, it implements on SendRawFrame
@@ -507,17 +462,13 @@ func (o *ModbusRtu) Send(slaveID byte, request modbus.ProtocolDataUnit) (modbus.
 	if err != nil {
 		return response, err
 	}
-	logrus.Debugf("发送给设备: %s 的数据: [% x]", o.devinfo.DevCode, aduRequest)
 	aduResponse, err := o.SendRecvData(aduRequest)
-	logrus.Debugf("收到的数据: %s 的数据: [% x]", o.devinfo.DevCode, aduResponse)
 
 	if err != nil {
-		logrus.Debugf("ReadHoldingRegistersBytes SendRecvData err:= %v", err)
 		return response, err
 	}
 	rspSlaveID, pdu, err := modbus.DecodeRTUFrame(aduResponse)
 	if err != nil {
-		logrus.Debugf("ReadHoldingRegistersBytes DecodeRTUFrame err:= %v", err)
 		return response, err
 	}
 	response = modbus.ProtocolDataUnit{FuncCode: pdu[0], Data: pdu[1:]}

+ 0 - 88
edge/ipole/monitor.go

@@ -1,88 +0,0 @@
-package main
-
-import (
-	"fmt"
-	"os"
-	"os/exec"
-	"path/filepath"
-	"strings"
-	"sync"
-	"time"
-
-	"github.com/sirupsen/logrus"
-)
-
-const (
-	diffTime        = 3600 * 24 * 3
-	MaxErrorMinutes = 20
-)
-
-type MonitorStatus struct {
-	MQTTMessageHandle time.Time
-	MQTTConnectMgr    time.Time
-}
-
-var mypath = [...]string{"/usr/app/ipole/log/", "/usr/app/camera/log/", "/usr/app/its/log/"}
-
-var _once1 sync.Once
-var _single1 *MonitorStatus
-
-func GetMonitorStatus() *MonitorStatus {
-	_once1.Do(func() {
-		_single1 = &MonitorStatus{
-			MQTTMessageHandle: time.Now(),
-			MQTTConnectMgr:    time.Now(),
-		}
-	})
-	return _single1
-}
-
-func (o *MonitorStatus) GetMonitorRunStatus() bool {
-	t1 := time.Since(o.MQTTConnectMgr).Minutes()
-	t2 := time.Since(o.MQTTMessageHandle).Minutes()
-	return int(t1) < MaxErrorMinutes && int(t2) < MaxErrorMinutes
-}
-
-func runInLinux(cmd string) (string, error) {
-	result, err := exec.Command("/bin/sh", "-c", cmd).Output()
-	if err != nil {
-		return "", err
-	}
-	return strings.TrimSpace(string(result)), err
-}
-
-// CheckProRunning 根据进程名判断进程是否运行
-func CheckProRunning(serverName string) (bool, error) {
-	a := "ps |grep " + serverName
-	str, err := runInLinux(a)
-	if err != nil {
-		return false, err
-	}
-
-	logrus.Info("ps len", len(str), str)
-	return len(str) > 30, nil
-}
-
-func CheckAndDeleteLogfile() {
-	for _, v := range mypath {
-		getFilelist(v)
-	}
-}
-
-func getFilelist(path string) {
-	nowTime := time.Now().Unix()
-	err := filepath.Walk(path, func(path string, f os.FileInfo, err error) error {
-		if f == nil {
-			return err
-		}
-		fileTime := f.ModTime().Unix()
-		if (nowTime-fileTime) > diffTime && !strings.ContainsAny(strings.TrimSuffix(f.Name(), ".log"), "abcdefghijkmlnopqrstuvwxyz") { //判断文件是否超过3天
-			fmt.Printf("Delete file %v !\r\n", path)
-			os.RemoveAll(path + "/" + f.Name())
-		}
-		return nil
-	})
-	if err != nil {
-		logrus.Infof("filepath.Walk() returned %v\r\n", err)
-	}
-}

+ 2 - 5
edge/ipole/mqttclient.go

@@ -2,7 +2,6 @@ package main
 
 import (
 	"context"
-	"fmt"
 	"sync"
 	"time"
 
@@ -34,7 +33,7 @@ type MqttClient struct {
 	MqttOnline BaseMqttOnline      //是否发布上线消息&遗嘱消息
 }
 
-func NewMqttClient(server, clientid, user, password string, timeout uint, mqttOnline BaseMqttOnline) *MqttClient {
+func NewMqttClient(server, clientId, user, password string, timeout uint, mqttOnline BaseMqttOnline) *MqttClient {
 	o := MqttClient{
 		mapTopics:  make(map[string]mqtt.QOS),
 		timeout:    timeout,
@@ -42,13 +41,12 @@ func NewMqttClient(server, clientid, user, password string, timeout uint, mqttOn
 	}
 	client, err := mqtt.NewClient(mqtt.ClientOptions{
 		Servers:       []string{server},
-		ClientID:      clientid,
+		ClientID:      clientId,
 		Username:      user,
 		Password:      password,
 		AutoReconnect: true,
 	}, &o)
 	if err != nil {
-		panic(fmt.Sprintln("MQTT错误:", err.Error()))
 		return nil
 	}
 	o.mqtt = client
@@ -61,7 +59,6 @@ func (o *MqttClient) ConnectionLostHandler(err error) {
 }
 
 func (o *MqttClient) OnConnectHandler() {
-	logrus.Infoln("MqttClient.OnConnectHandler:MQTT连接成功")
 	//连接成功则订阅主题
 	for k, v := range o.mapTopics {
 		o.Subscribe(k, v)

+ 0 - 143
edge/ipole/mqtthandle.go

@@ -1,137 +1,9 @@
 package main
 
 import (
-	"io/ioutil"
-	"os"
-	"strings"
-
-	"lc/common/mqtt"
 	"lc/common/protocol"
-	"lc/common/util"
 )
 
-func HandleTpQApp(m mqtt.Message) {
-	var obj protocol.Pack_IDObject
-	var ret protocol.Pack_MutilFileObject
-	if err := obj.DeCode(m.PayloadString()); err == nil {
-		//读文件内容
-		ReadMutilFileContent(protocol.TP_GW_APP, obj.Data.Id, &ret)
-		if str, err := ret.EnCode(appConfig.GID, obj.Seq); err == nil {
-			GetMQTTMgr().Publish(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_APP_ACK), str, 0, ToCloud)
-		}
-	}
-}
-func HandleTpWApp(m mqtt.Message) {
-	var obj protocol.Pack_SeqFileObject
-	var ret protocol.Pack_Ack
-	err := obj.DeCode(m.PayloadString())
-	if err == nil {
-		err = HandleFile(protocol.TP_GW_SET_APP, &obj)
-	}
-	if str, err := ret.EnCode(appConfig.GID, appConfig.GID, obj.Seq, err); err == nil {
-		GetMQTTMgr().Publish(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_SET_APP_ACK), str, 0, ToCloud)
-	}
-}
-func HandleTpQSerial(m mqtt.Message) {
-	var obj protocol.Pack_IDObject
-	var ret protocol.Pack_MutilFileObject
-	if err := obj.DeCode(m.PayloadString()); err == nil {
-		//读文件内容
-		ReadMutilFileContent(protocol.TP_GW_SERIAL, obj.Data.Id, &ret)
-		if str, err := ret.EnCode(appConfig.GID, obj.Seq); err == nil {
-			GetMQTTMgr().Publish(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_SERIAL_ACK), str, 0, ToCloud)
-		}
-	}
-}
-func HandleTpWSerial(m mqtt.Message) {
-	var obj protocol.Pack_SeqFileObject
-	var ret protocol.Pack_Ack
-	err := obj.DeCode(m.PayloadString())
-	if err == nil {
-		err = HandleFile(protocol.TP_GW_SET_SERIAL, &obj)
-	}
-	if str, err := ret.EnCode(appConfig.GID, appConfig.GID, obj.Seq, err); err == nil {
-		GetMQTTMgr().Publish(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_SET_SERIAL_ACK), str, 0, ToCloud)
-	}
-}
-func HandleTpQRtu(m mqtt.Message) {
-	var obj protocol.Pack_IDObject
-	var ret protocol.Pack_MutilFileObject
-	if err := obj.DeCode(m.PayloadString()); err == nil {
-		//读文件内容
-		ReadMutilFileContent(protocol.TP_GW_RTU, obj.Data.Id, &ret)
-		if str, err := ret.EnCode(appConfig.GID, obj.Seq); err == nil {
-			GetMQTTMgr().Publish(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_RTU_ACK), str, 0, ToCloud)
-		}
-	}
-}
-func HandleTpWRtu(m mqtt.Message) {
-	var obj protocol.Pack_SeqFileObject
-	var ret protocol.Pack_Ack
-	err := obj.DeCode(m.PayloadString())
-	if err == nil {
-		err = HandleFile(protocol.TP_GW_SET_RTU, &obj)
-	}
-	if str, err := ret.EnCode(appConfig.GID, appConfig.GID, obj.Seq, err); err == nil {
-		GetMQTTMgr().Publish(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_SET_RTU_ACK), str, 0, ToCloud)
-	}
-}
-func HandleTpQModel(m mqtt.Message) {
-	var obj protocol.Pack_IDObject
-	var ret protocol.Pack_MutilFileObject
-	if err := obj.DeCode(m.PayloadString()); err == nil {
-		//读文件内容
-		ReadMutilFileContent(protocol.TP_GW_MODEL, obj.Data.Id, &ret)
-		if str, err := ret.EnCode(appConfig.GID, obj.Seq); err == nil {
-			GetMQTTMgr().Publish(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_MODEL_ACK), str, 0, ToCloud)
-		}
-	}
-}
-func HandleTpWModel(m mqtt.Message) {
-	var obj protocol.Pack_SeqFileObject
-	var ret protocol.Pack_Ack
-	err := obj.DeCode(m.PayloadString())
-	if err == nil {
-		err = HandleFile(protocol.TP_GW_SET_MODEL, &obj)
-	}
-	if str, err := ret.EnCode(appConfig.GID, appConfig.GID, obj.Seq, err); err == nil {
-		GetMQTTMgr().Publish(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_SET_MODEL_ACK), str, 0, ToCloud)
-	}
-}
-func HandleTpQLog(m mqtt.Message) {
-	var obj protocol.Pack_IDObject
-	var ret protocol.Pack_MutilFileObject
-	if err := obj.DeCode(m.PayloadString()); err == nil {
-		//读文件内容
-		ReadMutilFileContent(protocol.TP_GW_LOG, obj.Data.Id, &ret)
-		if str, err := ret.EnCode(appConfig.GID, obj.Seq); err == nil {
-			GetMQTTMgr().Publish(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_LOG_ACK), str, 0, ToCloud)
-		}
-	}
-}
-func HandleTpRLog(m mqtt.Message) {
-	var obj protocol.Pack_IDObject
-	var ret protocol.Pack_Ack
-	var err error
-	if err = obj.DeCode(m.PayloadString()); err == nil {
-		rd, _ := ioutil.ReadDir(util.GetPath(3))
-		for _, fi := range rd {
-			if ok := strings.HasSuffix(fi.Name(), ".log"); ok {
-				err = os.Remove(util.GetPath(3) + fi.Name())
-			}
-		}
-		if str, err := ret.EnCode(appConfig.GID, appConfig.GID, obj.Seq, err); err == nil {
-			GetMQTTMgr().Publish(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_REMOVE_LOG_ACK), str, 0, ToCloud)
-		}
-	}
-}
-func HandleTpQSys(m mqtt.Message) {
-	var obj protocol.Pack_IDObject
-	if err := obj.DeCode(m.PayloadString()); err == nil {
-		go SysInfoStat(obj.Seq)
-	}
-}
-
 type MqttOnline struct {
 }
 
@@ -149,18 +21,3 @@ func (o *MqttOnline) GetWillMsg() (string, string) {
 	payload, _ := (&protocol.Pack_IDObject{}).EnCode(appConfig.GID, GetNextUint64(), 0) //遗嘱消息
 	return GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_WILL), payload
 }
-
-// InitCloudMqttSubscribeTopics 初始化网关级别的主题订阅及路由
-func InitCloudMqttSubscribeTopics() {
-	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_APP), mqtt.AtMostOnce, HandleTpQApp, ToCloud)
-	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_SET_APP), mqtt.AtMostOnce, HandleTpWApp, ToCloud)
-	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_SERIAL), mqtt.AtMostOnce, HandleTpQSerial, ToCloud)
-	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_SET_SERIAL), mqtt.AtMostOnce, HandleTpWSerial, ToCloud)
-	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_RTU), mqtt.AtMostOnce, HandleTpQRtu, ToCloud)
-	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_SET_RTU), mqtt.AtMostOnce, HandleTpWRtu, ToCloud)
-	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_MODEL), mqtt.AtMostOnce, HandleTpQModel, ToCloud)
-	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_SET_MODEL), mqtt.AtMostOnce, HandleTpWModel, ToCloud)
-	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_LOG), mqtt.AtMostOnce, HandleTpQLog, ToCloud)
-	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_REMOVE_LOG), mqtt.AtMostOnce, HandleTpRLog, ToCloud)
-	GetMQTTMgr().Subscribe(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_SYS), mqtt.AtMostOnce, HandleTpQSys, ToCloud)
-}

+ 10 - 16
edge/ipole/mqttmgr.go

@@ -1,7 +1,6 @@
 package main
 
 import (
-	"runtime/debug"
 	"sync"
 	"time"
 
@@ -19,14 +18,14 @@ const (
 	ToEdge  OptType = 2 //发布和订阅边缘端的消息
 )
 
-var _mqttMgronce sync.Once
-var _mqttMgrsingle *MQTTMgr
+var _mqttMgrOnce sync.Once
+var mqttMgrSingle *MQTTMgr
 
 func GetMQTTMgr() *MQTTMgr {
-	_mqttMgronce.Do(func() {
-		_mqttMgrsingle = _newMQTTMgr()
+	_mqttMgrOnce.Do(func() {
+		mqttMgrSingle = _newMQTTMgr()
 	})
-	return _mqttMgrsingle
+	return mqttMgrSingle
 }
 
 type MQTTMgr struct {
@@ -41,7 +40,7 @@ func _newMQTTMgr() *MQTTMgr {
 	}
 	if appConfig.Edge.Mqtt.Server != "" {
 		mgr.Edge = NewMqttClient(appConfig.Edge.Mqtt.Server,
-			appConfig.GID+"@"+appname+version,
+			appConfig.GID+"@"+appName+version,
 			appConfig.Edge.Mqtt.User,
 			appConfig.Edge.Mqtt.Password,
 			appConfig.Edge.Mqtt.Timeout,
@@ -49,7 +48,7 @@ func _newMQTTMgr() *MQTTMgr {
 	}
 	if appConfig.Cloud.Mqtt.Server != "" {
 		mgr.Cloud = NewMqttClient(appConfig.Cloud.Mqtt.Server,
-			appConfig.GID+"@"+appname+version,
+			appConfig.GID+"@"+appName+version,
 			appConfig.Cloud.Mqtt.User,
 			appConfig.Cloud.Mqtt.Password,
 			appConfig.Cloud.Mqtt.Timeout,
@@ -137,7 +136,6 @@ func (o *MQTTMgr) _publish(msg *MQTTMessage) error {
 func (o *MQTTMgr) MQTTConnectMgr(args ...interface{}) interface{} {
 	for {
 		time.Sleep(10 * time.Second)
-		//GetMonitorStatus().MQTTConnectMgr = time.Now() //更新状态
 		if o.Cloud != nil {
 			o.Cloud.Connect()
 		}
@@ -149,11 +147,9 @@ func (o *MQTTMgr) MQTTConnectMgr(args ...interface{}) interface{} {
 
 func (o *MQTTMgr) MQTTMessageHandle(args ...interface{}) interface{} {
 	defer func() {
-		if err := recover(); err != nil {
-			logrus.Errorf("MQTTMgr.MQTTMessageHandle发生异常:%v", err)
-			logrus.Errorf("MQTTMgr.MQTTMessageHandle发生异常,堆栈信息:%s", string(debug.Stack()))
-			gopool.Add(o.MQTTMessageHandle, args)
-		}
+		recover()
+		pool.Add(o.MQTTMessageHandle, args)
+
 	}()
 	var err error
 	for {
@@ -169,8 +165,6 @@ func (o *MQTTMgr) MQTTMessageHandle(args ...interface{}) interface{} {
 			}
 		} else {
 			time.Sleep(200 * time.Millisecond)
-			//更新状态时间
-			//GetMonitorStatus().MQTTMessageHandle = time.Now()
 		}
 	}
 }

+ 2 - 2
edge/ipole/redis.go

@@ -17,8 +17,8 @@ func InitRedis(conf *util.RedisConfig) bool {
 	return true
 }
 
-func UninitRedis() {
+func UnInitRedis() {
 	if redisEdgeData != nil {
-		redisEdgeData.Close()
+		_ = redisEdgeData.Close()
 	}
 }

+ 0 - 2
edge/ipole/serial.go

@@ -89,8 +89,6 @@ func (sf *serialPort) setSerialConfig(config serial.Config) {
 	sf.Config = config
 }
 
-func (sf *serialPort) setTCPTimeout(time.Duration) {}
-
 // Close current connection.
 func (sf *serialPort) Close() (err error) {
 	sf.mu.Lock()

+ 18 - 23
edge/ipole/serialmgr.go

@@ -5,7 +5,6 @@ import (
 	"time"
 
 	"github.com/goburrow/serial"
-	"github.com/sirupsen/logrus"
 
 	"lc/common/protocol"
 )
@@ -34,16 +33,14 @@ func openSerialPort(sp *protocol.SerialPort) (*serialPort, error) {
 		StopBits: int(sp.StopBits), Parity: sp.Parity,
 		Timeout: time.Duration(sp.Timeout) * time.Microsecond}
 	var err error
-	var serial serialPort
-	serial.setSerialConfig(config)
-	serial.SetAutoReconnect(SerialDefaultAutoReconnect)
-	err = serial.connect()
+	var port serialPort
+	port.setSerialConfig(config)
+	port.SetAutoReconnect(SerialDefaultAutoReconnect)
+	err = port.connect()
 	if err != nil {
-		logrus.Errorf("打开串口[code=%d,address=%s]失败:%s", sp.Code, sp.Address, err.Error())
 		return nil, err
 	}
-	logrus.Infof("打开串口[code=%d,address=%s]成功", sp.Code, sp.Address)
-	return &serial, nil
+	return &port, nil
 }
 
 func (o *SerialMgr) AddSerialPorts(mapSP map[uint8]*protocol.SerialPort) {
@@ -54,16 +51,16 @@ func (o *SerialMgr) AddSerialPorts(mapSP map[uint8]*protocol.SerialPort) {
 	defer o.mu.Unlock()
 	//先全部关闭并删除
 	for k, v := range o.mapSerial {
-		v.Close()
+		_ = v.Close()
 		delete(o.mapSerial, k)
 	}
 	//重新打开
 	for _, sp := range mapSP {
 		var s protocol.SerialPort
 		s = *sp
-		newsp, _ := openSerialPort(&s)
-		if newsp != nil {
-			o.mapSerial[sp.Code] = newsp
+		port, _ := openSerialPort(&s)
+		if port != nil {
+			o.mapSerial[sp.Code] = port
 		}
 	}
 	o.mapSerialPort = mapSP
@@ -76,15 +73,13 @@ func (o *SerialMgr) UpdateSerialPort(sp *protocol.SerialPort) error {
 	o.mu.Lock()
 	defer o.mu.Unlock()
 	if s, ok := o.mapSerial[sp.Code]; ok { //存在则关闭,并重新打开
-		err := s.Close() //关闭
-		if err != nil {
-			logrus.Errorf("关闭串口[code=%d,address=%s]失败:%s", sp.Code, sp.Address, err.Error())
-		}
+		_ = s.Close() //关闭
+
 		delete(o.mapSerial, sp.Code)
 	}
-	newsp, err := openSerialPort(sp)
-	if newsp != nil {
-		o.mapSerial[sp.Code] = newsp
+	port, err := openSerialPort(sp)
+	if port != nil {
+		o.mapSerial[sp.Code] = port
 	}
 	o.mapSerialPort[sp.Code] = sp
 	return err
@@ -112,10 +107,10 @@ func (o *SerialMgr) GetSerialPort(code uint8) *serialPort {
 		return s
 	}
 	if sp, ok := o.mapSerialPort[code]; ok {
-		newsp, _ := openSerialPort(sp)
-		if newsp != nil {
-			o.mapSerial[code] = newsp
-			return newsp
+		port, _ := openSerialPort(sp)
+		if port != nil {
+			o.mapSerial[code] = port
+			return port
 		}
 	}
 	return nil

+ 0 - 157
edge/ipole/sysinfo.go

@@ -1,157 +0,0 @@
-package main
-
-import (
-	"strconv"
-	"strings"
-	"time"
-
-	"github.com/shirou/gopsutil/cpu"
-	"github.com/shirou/gopsutil/disk"
-	"github.com/shirou/gopsutil/mem"
-	"github.com/shirou/gopsutil/net"
-	"github.com/shirou/gopsutil/process"
-
-	"lc/common/protocol"
-)
-
-func SysInfoStat(seq uint64) {
-	var si protocol.SysInfo
-	si.Appinfo.Name = appname
-	si.Appinfo.Version = version
-	//CPU信息
-	var cpuinfo protocol.CpuInfo
-	if is, err := cpu.Info(); err == nil && len(is) > 0 {
-		cpuinfo.Cpus = len(is)
-		cpuinfo.Cores = int(is[0].Cores)
-		cpuinfo.ModelName = is[0].ModelName
-		if percent, err := cpu.Percent(time.Second*10, false); err == nil && len(percent) > 0 {
-			cpuinfo.Percent = Precision(percent[0], 1, false)
-		}
-		si.Cpuinfo = &cpuinfo
-	}
-	//内存信息
-	var meminfo protocol.MemInfo
-	if vms, err := mem.VirtualMemory(); err == nil {
-		meminfo.Total = vms.Total / (1024 * 1024)
-		meminfo.Available = vms.Available / (1024 * 1024)
-		meminfo.Used = vms.Used / (1024 * 1024)
-		meminfo.Percent = Precision(vms.UsedPercent, 1, false)
-		si.Meminfo = &meminfo
-	}
-
-	//硬盘信息
-	var diskinfos []protocol.DiskInfo
-	if parts, err := disk.Partitions(true); err == nil {
-		for _, v := range parts {
-			var diskinfo protocol.DiskInfo
-			diskinfo.Mountpoint = v.Mountpoint
-			diskinfo.Device = v.Device
-			diskinfo.Fstype = v.Fstype
-			if di, err := disk.Usage(v.Mountpoint); err == nil {
-				diskinfo.Path = di.Path
-				diskinfo.Total = di.Total / (1024 * 1024)
-				diskinfo.Free = di.Free / (1024 * 1024)
-				diskinfo.Used = di.Used / (1024 * 1024)
-				diskinfo.Percent = Precision(di.UsedPercent, 1, false)
-			}
-			diskinfos = append(diskinfos, diskinfo)
-		}
-		si.Diskinfos = diskinfos
-	}
-
-	//网卡信息
-	var ifss []protocol.LcInterfaces
-	if iss, err := net.Interfaces(); err == nil {
-		for _, v := range iss {
-			var up = false
-			var ipv4 = ""
-			for _, v1 := range v.Flags {
-				if v1 == "up" {
-					up = true
-				}
-			}
-			for _, v2 := range v.Addrs {
-				if strings.Contains(v2.Addr, ".") {
-					if strlist := strings.Split(v2.Addr, "/"); len(strlist) > 0 {
-						ipv4 = strlist[0]
-					}
-				}
-			}
-			if up && ipv4 != "" && v.HardwareAddr != "" {
-				var ifs protocol.LcInterfaces
-				ifs.Name = v.Name
-				ifs.HardwareAddr = v.HardwareAddr
-				ifs.Addr = ipv4
-				if sts, err := net.IOCounters(true); err == nil {
-					for _, vv := range sts {
-						if v.Name == vv.Name {
-							ifs.Recv = vv.BytesRecv / (1024 * 1024)
-							ifs.Sent = vv.BytesSent / (1024 * 1024)
-							ifs.PacketsRecv = vv.PacketsRecv
-							ifs.PacketsSent = vv.PacketsSent
-							ifss = append(ifss, ifs)
-							break
-						}
-					}
-				}
-			}
-		}
-		si.Ifs = ifss
-	}
-
-	//监听端口,连接信息
-
-	if arr, err := net.Connections("inet4"); err == nil {
-		var tcpListen []protocol.ConnectionInfo
-		var tcpConn []protocol.ConnectionInfo
-		var udp []protocol.ConnectionInfo
-		for _, v := range arr {
-			laddr := v.Laddr.IP + ":" + strconv.Itoa(int(v.Laddr.Port))
-			raddr := v.Raddr.IP + ":" + strconv.Itoa(int(v.Raddr.Port))
-			x := protocol.ConnectionInfo{
-				Type:   v.Type,
-				Laddr:  laddr,
-				Raddr:  raddr,
-				Status: v.Status,
-				Pid:    v.Pid,
-			}
-			if v.Type == 1 { //TCP
-				if v.Status == "LISTEN" { //TCP监听信息
-					tcpListen = append(tcpListen, x)
-				} else { //TCP连接信息
-					tcpConn = append(tcpConn, x)
-				}
-			} else if v.Type == 2 { //UDP
-				udp = append(udp, x)
-			}
-		}
-		si.TcpListen = tcpListen
-		si.TcpConn = tcpConn
-		si.Udp = udp
-	}
-
-	//进程cpu和内存
-	var pis []protocol.ProcessInfo
-	ps, _ := process.Processes()
-	for _, v := range ps {
-		var pi protocol.ProcessInfo
-		if cpup, err := v.CPUPercent(); err == nil {
-			pi.Cpu = Precision(cpup, 1, false)
-		}
-		if mp, err := v.MemoryPercent(); err == nil {
-			pi.Mem = Precision(float64(mp), 1, false)
-		}
-		if nm, err := v.Name(); err == nil {
-			pi.Name = nm
-		}
-		pi.Pid = v.Pid
-		pis = append(pis, pi)
-	}
-	si.Pis = pis
-
-	var obj protocol.Pack_SysInfo
-	if str, err := obj.EnCode(appConfig.GID, appConfig.GID, seq, si); err == nil {
-		GetMQTTMgr().Publish(GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_SYS_ACK), str, 0, ToCloud)
-	}
-	return
-}

+ 21 - 61
edge/ipole/uploaddata.go

@@ -1,11 +1,8 @@
 package main
 
 import (
-	"fmt"
-	"github.com/sirupsen/logrus"
 	"lc/common/models"
 	"math"
-	"sort"
 	"sync"
 	"time"
 
@@ -15,9 +12,6 @@ import (
 	"lc/common/util"
 )
 
-func truncateNaive(f float64, unit float64) float64 {
-	return math.Trunc(f/unit) * unit
-}
 func Precision(f float64, prec int, round bool) float64 {
 	pow10N := math.Pow10(prec)
 	if round {
@@ -29,25 +23,21 @@ func Precision(f float64, prec int, round bool) float64 {
 var mapRtuUploadManager sync.Map
 
 type RtuUploadManager struct {
-	DataLock      sync.Mutex
-	Rtuinfo       *protocol.DevInfo
-	Datatime      time.Time
-	Data          map[uint16]float64
-	Timer         *timing.Timing
-	LiguidDataMgr *LiguidDataMgr //液位计专用
+	DataLock sync.Mutex
+	DevInfo  *protocol.DevInfo
+	DateTime time.Time
+	Data     map[uint16]float64
+	Timer    *timing.Timing
 }
 
 func NewRtuUploadManager(rtuinfo *protocol.DevInfo) *RtuUploadManager {
 	o := RtuUploadManager{
-		Rtuinfo: rtuinfo,
+		DevInfo: rtuinfo,
 		Data:    make(map[uint16]float64),
 		Timer:   timing.New().Run(),
 	}
-	if rtuinfo.DevType == 4 && (rtuinfo.TID == 3 || rtuinfo.TID == 5) {
-		o.LiguidDataMgr = &LiguidDataMgr{}
-	}
-	logrus.Infof("NewRtuUploadManager rtuinfo = %v \n", rtuinfo)
-	o.Timer.AddJobFunc(o.SendData, time.Duration(o.Rtuinfo.SendCloud)*time.Millisecond)
+
+	o.Timer.AddJobFunc(o.SendData, time.Duration(o.DevInfo.SendCloud)*time.Millisecond)
 	return &o
 }
 
@@ -55,29 +45,18 @@ func (o *RtuUploadManager) Stop() {
 	o.Timer.Close()
 	o.DataLock.Lock()
 	defer o.DataLock.Unlock()
-	o.Rtuinfo = nil
+	o.DevInfo = nil
 	o.Data = nil
 }
 
 func (o *RtuUploadManager) AddData(data map[uint16]float64) {
 	o.DataLock.Lock()
 	defer o.DataLock.Unlock()
-	//液位计需要追加深度数据
-	if o.Rtuinfo.DevType == 4 && (o.Rtuinfo.TID == 3 || o.Rtuinfo.TID == 5) {
-		for k, v := range data {
-			o.Data[k] = v
-			if k == 1 {
-				fval := o.LiguidDataMgr.Adjust(o.Rtuinfo.Height, v)
-				o.Data[2] = fval
-			}
-		}
-	} else {
-		for k, v := range data {
-			o.Data[k] = v
-		}
+
+	for k, v := range data {
+		o.Data[k] = v
 	}
-	// PrintMap(o.Data)
-	o.Datatime = util.MlNow()
+	o.DateTime = util.MlNow()
 }
 
 func (o *RtuUploadManager) SendData() {
@@ -85,49 +64,30 @@ func (o *RtuUploadManager) SendData() {
 	defer func() {
 		o.Data = make(map[uint16]float64)
 		o.DataLock.Unlock()
-		o.Timer.AddJobFunc(o.SendData, time.Duration(o.Rtuinfo.SendCloud)*time.Millisecond)
+		o.Timer.AddJobFunc(o.SendData, time.Duration(o.DevInfo.SendCloud)*time.Millisecond)
 	}()
 	if len(o.Data) == 0 {
 		return
 	}
 
 	var obj protocol.Pack_UploadData
-	if str, err := obj.EnCode(o.Rtuinfo.DevCode, appConfig.GID, GetNextUint64(), nil, o.Rtuinfo.TID, o.Data); err == nil {
-		topic := GetTopic(o.GetDevType(), o.Rtuinfo.DevCode, protocol.TP_MODBUS_DATA)
+	if str, err := obj.EnCode(o.DevInfo.DevCode, appConfig.GID, GetNextUint64(), nil, o.DevInfo.TID, o.Data); err == nil {
+		topic := GetTopic(o.GetDevType(), o.DevInfo.DevCode, protocol.TP_MODBUS_DATA)
 		GetMQTTMgr().Publish(topic, str, 0, ToAll) //上传消息 modbus rtu
 	}
 }
 
 func (o *RtuUploadManager) GetDevType() string {
-	if o.Rtuinfo.DevType == 1 {
+	if o.DevInfo.DevType == 1 {
 		return protocol.DT_CONCENTRATOR
-	} else if o.Rtuinfo.DevType == 2 {
+	} else if o.DevInfo.DevType == 2 {
 		return protocol.DT_ENVIRONMENT
-	} else if o.Rtuinfo.DevType == 4 {
+	} else if o.DevInfo.DevType == 4 {
 		return protocol.DT_LIQUID
-	} else if o.Rtuinfo.DevType == 5 {
+	} else if o.DevInfo.DevType == 5 {
 		return protocol.DT_ROAD_COND
-	} else if o.Rtuinfo.DevType == uint8(models.CableGuardian) {
+	} else if o.DevInfo.DevType == uint8(models.CableGuardian) {
 		return protocol.DT_CableGuardian
 	}
 	return "unknown"
 }
-
-type kv struct {
-	Key   uint16
-	Value float64
-}
-
-func PrintMap(m map[uint16]float64) {
-	var ss []kv
-	for k, v := range m {
-		ss = append(ss, kv{k, v})
-	}
-	sort.Slice(ss, func(i, j int) bool {
-		//return ss[i].Key > ss[j].Key  // 降序
-		return ss[i].Key < ss[j].Key // 升序
-	})
-	for _, kv := range ss {
-		fmt.Printf("%d, %0.3f\n", kv.Key, kv.Value)
-	}
-}

+ 1 - 1
edge/ipole/ym485.go

@@ -310,7 +310,7 @@ func (o *YmLampController) QueryDeviceState() {
 
 	var ret ym485.QueryDeviceStateAck
 	if err = ret.DeCode(recvbuf); err == nil { //解码串口返回的数据
-		// if ret.Dp.Addr != o.devinfo.DevCode { //不是本灯数据
+		// if ret.Dp.Addr != o.devInfo.DevCode { //不是本灯数据
 		if !strings.Contains(o.devinfo.DevCode, ret.Dp.Addr) { //不是本灯数据
 			o.State = nil
 			return

+ 1 - 1
edge/its/websvr.go

@@ -227,7 +227,7 @@ func (o *WebSvr) GetData(c echo.Context) error {
 
 	o.muEnvdata.Lock()
 	if o.Envdata != nil {
-		//if util.MlNow().Sub(o.Envdata.Time).Seconds() < 24*3600 {
+		//if util.MlNow().Sub(o.Envdata.DateTime).Seconds() < 24*3600 {
 		obj.Fengji = o.Envdata.Fengji
 		obj.Tianqi = o.Envdata.Tianqi
 		obj.Aqi = o.Envdata.Aqi

+ 1 - 1
edge/its_win/websvr.go

@@ -226,7 +226,7 @@ func (o *WebSvr) GetData(c echo.Context) error {
 
 	o.muEnvdata.Lock()
 	if o.Envdata != nil {
-		//if util.MlNow().Sub(o.Envdata.Time).Seconds() < 24*3600 {
+		//if util.MlNow().Sub(o.Envdata.DateTime).Seconds() < 24*3600 {
 		obj.Fengji = o.Envdata.Fengji
 		obj.Tianqi = o.Envdata.Tianqi
 		obj.Aqi = o.Envdata.Aqi

+ 1 - 1
edge/led_screen/clt_client/protocol.go

@@ -150,7 +150,7 @@ type FileSource struct {
 }
 type InEffect struct {
 	Type string `json:"Type"` //0- No transition, 1-Random, 2-Left unveil, 3-Right unveil
-	Time string `json:"Time"`
+	Time string `json:"DateTime"`
 }
 type Items struct {
 	Type       string     `json:"Type"`

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 2 - 2
edge/led_screen/clt_client/protocol_test.go