From 3cc88a52486cf0060a14ffc2ef71955e1483d886 Mon Sep 17 00:00:00 2001 From: huang <1724659546@qq.com> Date: Wed, 1 Oct 2025 20:39:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9E=9A=E4=B8=BE=E6=94=B9=E6=88=90=E4=B8=AD?= =?UTF-8?q?=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/docs.go | 57 +++++++++---------- docs/swagger.json | 57 +++++++++---------- docs/swagger.yaml | 57 +++++++++---------- .../app/controller/plan/plan_controller.go | 14 ++--- internal/app/service/task/scheduler.go | 2 +- internal/core/application.go | 2 +- internal/infra/models/device_template.go | 4 +- internal/infra/models/execution.go | 20 +++---- internal/infra/models/feed.go | 5 ++ internal/infra/models/pig.go | 5 ++ internal/infra/models/plan.go | 31 +++++----- internal/infra/models/sensor_data.go | 10 ++-- 12 files changed, 136 insertions(+), 128 deletions(-) create mode 100644 internal/infra/models/feed.go create mode 100644 internal/infra/models/pig.go diff --git a/docs/docs.go b/docs/docs.go index f03b544..fb7fc98 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -1345,8 +1345,8 @@ const docTemplate = `{ "models.DeviceCategory": { "type": "string", "enum": [ - "actuator", - "sensor" + "执行器", + "传感器" ], "x-enum-varnames": [ "CategoryActuator", @@ -1356,8 +1356,8 @@ const docTemplate = `{ "models.PlanContentType": { "type": "string", "enum": [ - "sub_plans", - "tasks" + "子计划", + "任务" ], "x-enum-comments": { "PlanContentTypeSubPlans": "计划包含子计划", @@ -1375,8 +1375,8 @@ const docTemplate = `{ "models.PlanExecutionType": { "type": "string", "enum": [ - "automatic", - "manual" + "自动", + "手动" ], "x-enum-comments": { "PlanExecutionTypeAutomatic": "自动执行 (包含定时和循环)", @@ -1392,19 +1392,18 @@ const docTemplate = `{ ] }, "models.PlanStatus": { - "type": "integer", - "format": "int32", + "type": "string", "enum": [ - 0, - 1, - 2, - 3 + "已禁用", + "已启用", + "执行完毕", + "执行失败" ], "x-enum-comments": { "PlanStatusDisabled": "禁用计划", "PlanStatusEnabled": "启用计划", "PlanStatusFailed": "执行失败", - "PlanStatusStopeed": "执行完毕" + "PlanStatusStopped": "执行完毕" }, "x-enum-descriptions": [ "禁用计划", @@ -1415,18 +1414,18 @@ const docTemplate = `{ "x-enum-varnames": [ "PlanStatusDisabled", "PlanStatusEnabled", - "PlanStatusStopeed", + "PlanStatusStopped", "PlanStatusFailed" ] }, "models.SensorType": { "type": "string", "enum": [ - "signal_metrics", - "battery_level", - "temperature", - "humidity", - "weight" + "信号强度", + "电池电量", + "温度", + "湿度", + "重量" ], "x-enum-comments": { "SensorTypeBatteryLevel": "电池电量", @@ -1453,9 +1452,9 @@ const docTemplate = `{ "models.TaskType": { "type": "string", "enum": [ - "plan_analysis", - "waiting", - "release_feed_weight" + "计划分析", + "等待", + "下料" ], "x-enum-comments": { "TaskPlanAnalysis": "解析Plan的Task列表并添加到待执行队列的特殊任务", @@ -1514,7 +1513,7 @@ const docTemplate = `{ "$ref": "#/definitions/models.PlanExecutionType" } ], - "example": "automatic" + "example": "自动" }, "name": { "type": "string", @@ -1558,7 +1557,7 @@ const docTemplate = `{ "$ref": "#/definitions/models.PlanContentType" } ], - "example": "tasks" + "example": "任务" }, "cron_expression": { "type": "string", @@ -1582,7 +1581,7 @@ const docTemplate = `{ "$ref": "#/definitions/models.PlanExecutionType" } ], - "example": "automatic" + "example": "自动" }, "id": { "type": "integer", @@ -1598,7 +1597,7 @@ const docTemplate = `{ "$ref": "#/definitions/models.PlanStatus" } ], - "example": 0 + "example": "已启用" }, "sub_plans": { "type": "array", @@ -1663,7 +1662,7 @@ const docTemplate = `{ "$ref": "#/definitions/models.TaskType" } ], - "example": "waiting" + "example": "等待" } } }, @@ -1700,7 +1699,7 @@ const docTemplate = `{ "$ref": "#/definitions/models.TaskType" } ], - "example": "waiting" + "example": "等待" } } }, @@ -1725,7 +1724,7 @@ const docTemplate = `{ "$ref": "#/definitions/models.PlanExecutionType" } ], - "example": "automatic" + "example": "自动" }, "name": { "type": "string", diff --git a/docs/swagger.json b/docs/swagger.json index 080e250..60e6dec 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -1334,8 +1334,8 @@ "models.DeviceCategory": { "type": "string", "enum": [ - "actuator", - "sensor" + "执行器", + "传感器" ], "x-enum-varnames": [ "CategoryActuator", @@ -1345,8 +1345,8 @@ "models.PlanContentType": { "type": "string", "enum": [ - "sub_plans", - "tasks" + "子计划", + "任务" ], "x-enum-comments": { "PlanContentTypeSubPlans": "计划包含子计划", @@ -1364,8 +1364,8 @@ "models.PlanExecutionType": { "type": "string", "enum": [ - "automatic", - "manual" + "自动", + "手动" ], "x-enum-comments": { "PlanExecutionTypeAutomatic": "自动执行 (包含定时和循环)", @@ -1381,19 +1381,18 @@ ] }, "models.PlanStatus": { - "type": "integer", - "format": "int32", + "type": "string", "enum": [ - 0, - 1, - 2, - 3 + "已禁用", + "已启用", + "执行完毕", + "执行失败" ], "x-enum-comments": { "PlanStatusDisabled": "禁用计划", "PlanStatusEnabled": "启用计划", "PlanStatusFailed": "执行失败", - "PlanStatusStopeed": "执行完毕" + "PlanStatusStopped": "执行完毕" }, "x-enum-descriptions": [ "禁用计划", @@ -1404,18 +1403,18 @@ "x-enum-varnames": [ "PlanStatusDisabled", "PlanStatusEnabled", - "PlanStatusStopeed", + "PlanStatusStopped", "PlanStatusFailed" ] }, "models.SensorType": { "type": "string", "enum": [ - "signal_metrics", - "battery_level", - "temperature", - "humidity", - "weight" + "信号强度", + "电池电量", + "温度", + "湿度", + "重量" ], "x-enum-comments": { "SensorTypeBatteryLevel": "电池电量", @@ -1442,9 +1441,9 @@ "models.TaskType": { "type": "string", "enum": [ - "plan_analysis", - "waiting", - "release_feed_weight" + "计划分析", + "等待", + "下料" ], "x-enum-comments": { "TaskPlanAnalysis": "解析Plan的Task列表并添加到待执行队列的特殊任务", @@ -1503,7 +1502,7 @@ "$ref": "#/definitions/models.PlanExecutionType" } ], - "example": "automatic" + "example": "自动" }, "name": { "type": "string", @@ -1547,7 +1546,7 @@ "$ref": "#/definitions/models.PlanContentType" } ], - "example": "tasks" + "example": "任务" }, "cron_expression": { "type": "string", @@ -1571,7 +1570,7 @@ "$ref": "#/definitions/models.PlanExecutionType" } ], - "example": "automatic" + "example": "自动" }, "id": { "type": "integer", @@ -1587,7 +1586,7 @@ "$ref": "#/definitions/models.PlanStatus" } ], - "example": 0 + "example": "已启用" }, "sub_plans": { "type": "array", @@ -1652,7 +1651,7 @@ "$ref": "#/definitions/models.TaskType" } ], - "example": "waiting" + "example": "等待" } } }, @@ -1689,7 +1688,7 @@ "$ref": "#/definitions/models.TaskType" } ], - "example": "waiting" + "example": "等待" } } }, @@ -1714,7 +1713,7 @@ "$ref": "#/definitions/models.PlanExecutionType" } ], - "example": "automatic" + "example": "自动" }, "name": { "type": "string", diff --git a/docs/swagger.yaml b/docs/swagger.yaml index a17b732..2e66b9f 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -229,16 +229,16 @@ definitions: type: object models.DeviceCategory: enum: - - actuator - - sensor + - 执行器 + - 传感器 type: string x-enum-varnames: - CategoryActuator - CategorySensor models.PlanContentType: enum: - - sub_plans - - tasks + - 子计划 + - 任务 type: string x-enum-comments: PlanContentTypeSubPlans: 计划包含子计划 @@ -251,8 +251,8 @@ definitions: - PlanContentTypeTasks models.PlanExecutionType: enum: - - automatic - - manual + - 自动 + - 手动 type: string x-enum-comments: PlanExecutionTypeAutomatic: 自动执行 (包含定时和循环) @@ -265,17 +265,16 @@ definitions: - PlanExecutionTypeManual models.PlanStatus: enum: - - 0 - - 1 - - 2 - - 3 - format: int32 - type: integer + - 已禁用 + - 已启用 + - 执行完毕 + - 执行失败 + type: string x-enum-comments: PlanStatusDisabled: 禁用计划 PlanStatusEnabled: 启用计划 PlanStatusFailed: 执行失败 - PlanStatusStopeed: 执行完毕 + PlanStatusStopped: 执行完毕 x-enum-descriptions: - 禁用计划 - 启用计划 @@ -284,15 +283,15 @@ definitions: x-enum-varnames: - PlanStatusDisabled - PlanStatusEnabled - - PlanStatusStopeed + - PlanStatusStopped - PlanStatusFailed models.SensorType: enum: - - signal_metrics - - battery_level - - temperature - - humidity - - weight + - 信号强度 + - 电池电量 + - 温度 + - 湿度 + - 重量 type: string x-enum-comments: SensorTypeBatteryLevel: 电池电量 @@ -314,9 +313,9 @@ definitions: - SensorTypeWeight models.TaskType: enum: - - plan_analysis - - waiting - - release_feed_weight + - 计划分析 + - 等待 + - 下料 type: string x-enum-comments: TaskPlanAnalysis: 解析Plan的Task列表并添加到待执行队列的特殊任务 @@ -355,7 +354,7 @@ definitions: execution_type: allOf: - $ref: '#/definitions/models.PlanExecutionType' - example: automatic + example: 自动 name: example: 猪舍温度控制计划 type: string @@ -386,7 +385,7 @@ definitions: content_type: allOf: - $ref: '#/definitions/models.PlanContentType' - example: tasks + example: 任务 cron_expression: example: 0 0 6 * * * type: string @@ -402,7 +401,7 @@ definitions: execution_type: allOf: - $ref: '#/definitions/models.PlanExecutionType' - example: automatic + example: 自动 id: example: 1 type: integer @@ -412,7 +411,7 @@ definitions: status: allOf: - $ref: '#/definitions/models.PlanStatus' - example: 0 + example: 已启用 sub_plans: items: $ref: '#/definitions/plan.SubPlanResponse' @@ -456,7 +455,7 @@ definitions: type: allOf: - $ref: '#/definitions/models.TaskType' - example: waiting + example: 等待 type: object plan.TaskResponse: properties: @@ -481,7 +480,7 @@ definitions: type: allOf: - $ref: '#/definitions/models.TaskType' - example: waiting + example: 等待 type: object plan.UpdatePlanRequest: properties: @@ -497,7 +496,7 @@ definitions: execution_type: allOf: - $ref: '#/definitions/models.PlanExecutionType' - example: automatic + example: 自动 name: example: 猪舍温度控制计划V2 type: string diff --git a/internal/app/controller/plan/plan_controller.go b/internal/app/controller/plan/plan_controller.go index 6956e6a..f834f52 100644 --- a/internal/app/controller/plan/plan_controller.go +++ b/internal/app/controller/plan/plan_controller.go @@ -19,7 +19,7 @@ import ( type CreatePlanRequest struct { Name string `json:"name" binding:"required" example:"猪舍温度控制计划"` Description string `json:"description" example:"根据温度自动调节风扇和加热器"` - ExecutionType models.PlanExecutionType `json:"execution_type" binding:"required" example:"automatic"` + ExecutionType models.PlanExecutionType `json:"execution_type" binding:"required" example:"自动"` ExecuteNum uint `json:"execute_num,omitempty" example:"10"` CronExpression string `json:"cron_expression" example:"0 0 6 * * *"` SubPlanIDs []uint `json:"sub_plan_ids,omitempty"` @@ -31,12 +31,12 @@ type PlanResponse struct { ID uint `json:"id" example:"1"` Name string `json:"name" example:"猪舍温度控制计划"` Description string `json:"description" example:"根据温度自动调节风扇和加热器"` - ExecutionType models.PlanExecutionType `json:"execution_type" example:"automatic"` - Status models.PlanStatus `json:"status" example:"0"` + ExecutionType models.PlanExecutionType `json:"execution_type" example:"自动"` + Status models.PlanStatus `json:"status" example:"已启用"` ExecuteNum uint `json:"execute_num" example:"10"` ExecuteCount uint `json:"execute_count" example:"0"` CronExpression string `json:"cron_expression" example:"0 0 6 * * *"` - ContentType models.PlanContentType `json:"content_type" example:"tasks"` + ContentType models.PlanContentType `json:"content_type" example:"任务"` SubPlans []SubPlanResponse `json:"sub_plans,omitempty"` Tasks []TaskResponse `json:"tasks,omitempty"` } @@ -51,7 +51,7 @@ type ListPlansResponse struct { type UpdatePlanRequest struct { Name string `json:"name" example:"猪舍温度控制计划V2"` Description string `json:"description" example:"更新后的描述"` - ExecutionType models.PlanExecutionType `json:"execution_type" example:"automatic"` + ExecutionType models.PlanExecutionType `json:"execution_type" example:"自动"` ExecuteNum uint `json:"execute_num,omitempty" example:"10"` CronExpression string `json:"cron_expression" example:"0 0 6 * * *"` SubPlanIDs []uint `json:"sub_plan_ids,omitempty"` @@ -72,7 +72,7 @@ type TaskRequest struct { Name string `json:"name" example:"打开风扇"` Description string `json:"description" example:"打开1号风扇"` ExecutionOrder int `json:"execution_order" example:"1"` - Type models.TaskType `json:"type" example:"waiting"` + Type models.TaskType `json:"type" example:"等待"` Parameters map[string]interface{} `json:"parameters,omitempty"` } @@ -83,7 +83,7 @@ type TaskResponse struct { Name string `json:"name" example:"打开风扇"` Description string `json:"description" example:"打开1号风扇"` ExecutionOrder int `json:"execution_order" example:"1"` - Type models.TaskType `json:"type" example:"waiting"` + Type models.TaskType `json:"type" example:"等待"` Parameters map[string]interface{} `json:"parameters,omitempty"` } diff --git a/internal/app/service/task/scheduler.go b/internal/app/service/task/scheduler.go index d60d6c4..6b190f3 100644 --- a/internal/app/service/task/scheduler.go +++ b/internal/app/service/task/scheduler.go @@ -435,7 +435,7 @@ func (s *Scheduler) handlePlanCompletion(planLogID uint) { // 如果是自动计划且达到执行次数上限,或计划是手动类型,则更新计划状态为已停止 if (plan.ExecutionType == models.PlanExecutionTypeAutomatic && plan.ExecuteNum > 0 && newExecuteCount >= plan.ExecuteNum) || plan.ExecutionType == models.PlanExecutionTypeManual { - newStatus = models.PlanStatusStopeed + newStatus = models.PlanStatusStopped s.logger.Infof("计划 %d 已完成执行,状态更新为 '执行完毕'。", topLevelPlanID) } diff --git a/internal/core/application.go b/internal/core/application.go index a68c4f2..0c40657 100644 --- a/internal/core/application.go +++ b/internal/core/application.go @@ -263,7 +263,7 @@ func (app *Application) initializePendingTasks( if plan.ExecutionType == models.PlanExecutionTypeManual || (plan.ExecutionType == models.PlanExecutionTypeAutomatic && plan.ExecuteCount >= plan.ExecuteNum) { // 更新计划状态为已停止 - plan.Status = models.PlanStatusStopeed + plan.Status = models.PlanStatusStopped logger.Infof("计划 #%d 状态已更新为 '执行完毕'。", plan.ID) } diff --git a/internal/infra/models/device_template.go b/internal/infra/models/device_template.go index 5eae4f5..ceb49e4 100644 --- a/internal/infra/models/device_template.go +++ b/internal/infra/models/device_template.go @@ -15,9 +15,9 @@ type DeviceCategory string const ( // CategoryActuator 代表一个执行器,可以被控制(例如:风机、阀门) - CategoryActuator DeviceCategory = "actuator" + CategoryActuator DeviceCategory = "执行器" // CategorySensor 代表一个传感器,用于报告测量值(例如:温度计) - CategorySensor DeviceCategory = "sensor" + CategorySensor DeviceCategory = "传感器" ) // ValueDescriptor 描述了传感器可以报告的单个数值。 diff --git a/internal/infra/models/execution.go b/internal/infra/models/execution.go index 9a8a58d..721441d 100644 --- a/internal/infra/models/execution.go +++ b/internal/infra/models/execution.go @@ -17,11 +17,11 @@ const ( type ExecutionStatus string const ( - ExecutionStatusStarted ExecutionStatus = "started" // 开始执行 - ExecutionStatusCompleted ExecutionStatus = "completed" // 执行完成 - ExecutionStatusFailed ExecutionStatus = "failed" // 执行失败 - ExecutionStatusCancelled ExecutionStatus = "cancelled" // 执行取消 - ExecutionStatusWaiting ExecutionStatus = "waiting" // 等待执行 (用于预写日志) + ExecutionStatusStarted ExecutionStatus = "已开始" // 开始执行 + ExecutionStatusCompleted ExecutionStatus = "已完成" // 执行完成 + ExecutionStatusFailed ExecutionStatus = "失败" // 执行失败 + ExecutionStatusCancelled ExecutionStatus = "已取消" // 执行取消 + ExecutionStatusWaiting ExecutionStatus = "等待中" // 等待执行 (用于预写日志) ) // PlanExecutionLog 记录整个计划的一次执行历史 @@ -92,9 +92,9 @@ func (log *TaskExecutionLog) AfterFind(tx *gorm.DB) (err error) { type PendingCollectionStatus string const ( - PendingStatusPending PendingCollectionStatus = "pending" // 请求已发送,等待设备响应 - PendingStatusFulfilled PendingCollectionStatus = "fulfilled" // 已收到设备响应并成功处理 - PendingStatusTimedOut PendingCollectionStatus = "timed_out" // 请求超时,未收到设备响应 + PendingStatusPending PendingCollectionStatus = "等待中" // 请求已发送,等待设备响应 + PendingStatusFulfilled PendingCollectionStatus = "已完成" // 已收到设备响应并成功处理 + PendingStatusTimedOut PendingCollectionStatus = "已超时" // 请求超时,未收到设备响应 ) // DeviceCommandLog 记录所有“发后即忘”的下行指令日志。 @@ -160,8 +160,8 @@ func (PendingCollection) TableName() string { type AuditStatus string const ( - AuditStatusSuccess AuditStatus = "success" - AuditStatusFailed AuditStatus = "failed" + AuditStatusSuccess AuditStatus = "成功" + AuditStatusFailed AuditStatus = "失败" ) // --- 审计日志相关上下文键 --- diff --git a/internal/infra/models/feed.go b/internal/infra/models/feed.go new file mode 100644 index 0000000..f0a5807 --- /dev/null +++ b/internal/infra/models/feed.go @@ -0,0 +1,5 @@ +package models + +/* + 饲料和饲喂相关的模型 +*/ diff --git a/internal/infra/models/pig.go b/internal/infra/models/pig.go new file mode 100644 index 0000000..1579859 --- /dev/null +++ b/internal/infra/models/pig.go @@ -0,0 +1,5 @@ +package models + +/* + 和猪只本身相关的模型 +*/ diff --git a/internal/infra/models/plan.go b/internal/infra/models/plan.go index bf2ce42..15189fc 100644 --- a/internal/infra/models/plan.go +++ b/internal/infra/models/plan.go @@ -15,25 +15,25 @@ import ( type PlanExecutionType string const ( - PlanExecutionTypeAutomatic PlanExecutionType = "automatic" // 自动执行 (包含定时和循环) - PlanExecutionTypeManual PlanExecutionType = "manual" // 手动执行 + PlanExecutionTypeAutomatic PlanExecutionType = "自动" // 自动执行 (包含定时和循环) + PlanExecutionTypeManual PlanExecutionType = "手动" // 手动执行 ) // PlanContentType 定义了计划包含的内容类型 type PlanContentType string const ( - PlanContentTypeSubPlans PlanContentType = "sub_plans" // 计划包含子计划 - PlanContentTypeTasks PlanContentType = "tasks" // 计划包含任务 + PlanContentTypeSubPlans PlanContentType = "子计划" // 计划包含子计划 + PlanContentTypeTasks PlanContentType = "任务" // 计划包含任务 ) // TaskType 定义了任务的类型,每个类型可以对应 task 包中的一个具体动作 type TaskType string const ( - TaskPlanAnalysis TaskType = "plan_analysis" // 解析Plan的Task列表并添加到待执行队列的特殊任务 - TaskTypeWaiting TaskType = "waiting" // 等待任务 - TaskTypeReleaseFeedWeight TaskType = "release_feed_weight" // 下料口释放指定重量任务 + TaskPlanAnalysis TaskType = "计划分析" // 解析Plan的Task列表并添加到待执行队列的特殊任务 + TaskTypeWaiting TaskType = "等待" // 等待任务 + TaskTypeReleaseFeedWeight TaskType = "下料" // 下料口释放指定重量任务 ) // -- Task Parameters -- @@ -42,13 +42,14 @@ const ( ParamsPlanID = "plan_id" ) -type PlanStatus uint8 +// PlanStatus 定义了计划的状态 +type PlanStatus string const ( - PlanStatusDisabled PlanStatus = 0 // 禁用计划 - PlanStatusEnabled PlanStatus = 1 // 启用计划 - PlanStatusStopeed PlanStatus = 2 // 执行完毕 - PlanStatusFailed PlanStatus = 3 // 执行失败 + PlanStatusDisabled PlanStatus = "已禁用" // 禁用计划 + PlanStatusEnabled PlanStatus = "已启用" // 启用计划 + PlanStatusStopped PlanStatus = "执行完毕" // 执行完毕 + PlanStatusFailed PlanStatus = "执行失败" // 执行失败 ) // Plan 代表系统中的一个计划,可以包含子计划或任务 @@ -58,9 +59,9 @@ type Plan struct { Name string `gorm:"not null" json:"name"` Description string `json:"description"` ExecutionType PlanExecutionType `gorm:"not null;index" json:"execution_type"` - Status PlanStatus `gorm:"default:0;index" json:"status"` // 计划是否被启动 - ExecuteNum uint `gorm:"default:0" json:"execute_num"` // 计划预期执行次数 - ExecuteCount uint `gorm:"default:0" json:"execute_count"` // 执行计数器 + Status PlanStatus `gorm:"default:'已禁用';index" json:"status"` // 计划是否被启动 + ExecuteNum uint `gorm:"default:0" json:"execute_num"` // 计划预期执行次数 + ExecuteCount uint `gorm:"default:0" json:"execute_count"` // 执行计数器 // 针对 PlanExecutionTypeAutomatic,使用 Cron 表达式定义调度规则 CronExpression string `json:"cron_expression"` diff --git a/internal/infra/models/sensor_data.go b/internal/infra/models/sensor_data.go index 48be4f5..4c50221 100644 --- a/internal/infra/models/sensor_data.go +++ b/internal/infra/models/sensor_data.go @@ -10,11 +10,11 @@ import ( type SensorType string const ( - SensorTypeSignalMetrics SensorType = "signal_metrics" // 信号强度 - SensorTypeBatteryLevel SensorType = "battery_level" // 电池电量 - SensorTypeTemperature SensorType = "temperature" // 温度 - SensorTypeHumidity SensorType = "humidity" // 湿度 - SensorTypeWeight SensorType = "weight" // 重量 + SensorTypeSignalMetrics SensorType = "信号强度" // 信号强度 + SensorTypeBatteryLevel SensorType = "电池电量" // 电池电量 + SensorTypeTemperature SensorType = "温度" // 温度 + SensorTypeHumidity SensorType = "湿度" // 湿度 + SensorTypeWeight SensorType = "重量" // 重量 ) // SignalMetrics 存储信号强度数据