diff --git a/Dockerfile b/Dockerfile index e69de29..eec2ed8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -0,0 +1,21 @@ +FROM debian:bullseye-slim +RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ + echo "Asia/Shanghai" > /etc/timezone + +RUN mkdir -p /usr/local/dthjjc +ENV WORKDIR=/usr/local/dthjjc +WORKDIR $WORKDIR + +# 复制可执行文件和启动脚本 +COPY ./dthjjc $WORKDIR/dthjjc +COPY ./start.sh $WORKDIR/start.sh +COPY ./485_serial_demo $WORKDIR/485_serial_demo + +RUN chmod +x $WORKDIR/dthjjc && \ + chmod +x $WORKDIR/start.sh && \ + chmod +x $WORKDIR/485_serial_demo + +RUN mkdir -p /data/logs + +# 使用start.sh作为启动脚本 +CMD ["/usr/local/dthjjc/start.sh"] \ No newline at end of file diff --git a/business/config_parser.go b/business/config_parser.go index ead81a6..e20763d 100644 --- a/business/config_parser.go +++ b/business/config_parser.go @@ -17,6 +17,7 @@ type SensorConfig struct { Type int `json:"type"` // 改为int类型 Facility string `json:"facility"` SlaveID int `json:"slave_id"` + Name string `json:"name"` } // GetSensorType 获取传感器类型枚举 diff --git a/business/data_types.go b/business/data_types.go index 256c189..7af7f84 100644 --- a/business/data_types.go +++ b/business/data_types.go @@ -32,6 +32,8 @@ type DeviceData struct { Facility string `json:"facility"` Address string `json:"address"` Value any `json:"value"` // string 或 array + Name string `json:"name"` + HostUUID string `json:"host_uuid"` } type EventData struct { diff --git a/business/main_business.go b/business/main_business.go index 6c7aaac..8d503a5 100644 --- a/business/main_business.go +++ b/business/main_business.go @@ -38,7 +38,7 @@ func NewBusinessManager(sensorConfigs []SensorConfig) (*BusinessManager, error) // 创建数据采集器、处理器和上报管理器 dataCollector := NewDataCollector(modbusConfig) dataProcessor := NewDataProcessor() - reportManager := NewReportManager(hostUUID) + reportManager := NewReportManager(hostUUID, sensorConfigs) logger.Logger.Printf("DEBUG: Business manager created, isFirstCollect initialized to: true") diff --git a/business/report_manager.go b/business/report_manager.go index 4218ab0..2e049a8 100644 --- a/business/report_manager.go +++ b/business/report_manager.go @@ -12,13 +12,15 @@ import ( type ReportManager struct { hostUUID string faultDetector *FaultDetector + sensorConfigs []SensorConfig } // NewReportManager 创建数据上报管理器 -func NewReportManager(hostUUID string) *ReportManager { +func NewReportManager(hostUUID string, sensorConfigs []SensorConfig) *ReportManager { return &ReportManager{ hostUUID: hostUUID, faultDetector: NewFaultDetector(hostUUID), + sensorConfigs: sensorConfigs, } } @@ -119,7 +121,15 @@ func (rm *ReportManager) ReportEventData(event *EventData) error { } if event.DeviceUUID != "" { - item["deviceuuid"] = event.DeviceUUID + item["device_uuid"] = event.DeviceUUID // 修复字段名 + + // 从全局 sensorConfigs 里找对应的 name(你本来就传进来了!) + for _, cfg := range rm.sensorConfigs { // ← 这里我们马上加一个字段 + if cfg.DeviceUUID == event.DeviceUUID { + item["name"] = cfg.Name + break + } + } } if event.LastSuccessfulTime != "" { item["last_successful_time"] = event.LastSuccessfulTime @@ -176,13 +186,14 @@ func (rm *ReportManager) convertToDeviceData(data *ProcessedSensorData, sensorCo Type: strconv.Itoa(int(data.SensorType)), Facility: sensorConfig.Facility, Address: sensorConfig.Address, + Name: sensorConfig.Name, + HostUUID: sensorConfig.HostUUID, } // 根据传感器类型设置value字段 switch data.SensorType { case SensorTypeTemperatureHumidity: if len(data.Values) >= 2 { - // 直接构造 map,不包数组!! valueMap := map[string]string{ "temp": fmt.Sprintf("%.1f", data.Values[0]), "humidity": fmt.Sprintf("%.1f", data.Values[1]), diff --git a/dthjjc b/dthjjc index 9231c4e..dfcf994 100644 Binary files a/dthjjc and b/dthjjc differ diff --git a/start.sh b/start.sh index e69de29..904fb87 100644 --- a/start.sh +++ b/start.sh @@ -0,0 +1,7 @@ +#!/bin/sh +set -e + +echo "Starting environmental detection system..." +cd /usr/local/dthjjc + +exec /usr/local/dthjjc/dthjjc "$@" \ No newline at end of file