2025-12-10 14:24:36 +08:00

77 lines
2.0 KiB
Go

package business
import (
"fmt"
"time"
)
type SensorType int
const (
SensorTypeTemperatureHumidity SensorType = 1 // 温湿度传感器
SensorTypeWaterLeak SensorType = 2 // 水浸传感器
SensorTypeSmoke SensorType = 3 // 烟雾传感器
)
// ModbusConfig Modbus通信配置
type ModbusConfig struct {
Port string
BaudRate int
DataBits int
StopBits int
Parity string
Timeout time.Duration
RetryCount int
RetryDelay time.Duration
SensorInterval time.Duration
BusResetDelay time.Duration
}
type SensorRegisterConfig struct {
RegisterAddress uint16
RegisterCount uint16
}
// GetSensorTypeDescription 获取传感器类型描述
func GetSensorTypeDescription(sensorType SensorType) string {
switch sensorType {
case SensorTypeTemperatureHumidity:
return "TemperatureHumidityTransducer(1)"
case SensorTypeWaterLeak:
return "WaterLeakTransducer(2)"
case SensorTypeSmoke:
return "SmokeTransducer(3)"
default:
return "UnknownTransducer"
}
}
// DefaultModbusConfig 获取默认Modbus配置
func DefaultModbusConfig() *ModbusConfig {
return &ModbusConfig{
Port: "/dev/ttyS5",
BaudRate: 9600,
DataBits: 8,
StopBits: 1,
Parity: "N",
Timeout: 3 * time.Second,
RetryCount: 2,
RetryDelay: 100 * time.Millisecond,
SensorInterval: 200 * time.Millisecond,
BusResetDelay: 50 * time.Millisecond,
}
}
// GetRegisterConfig 根据传感器类型获取寄存器配置
func GetRegisterConfig(sensorType SensorType) (*SensorRegisterConfig, error) {
switch sensorType {
case SensorTypeTemperatureHumidity:
return &SensorRegisterConfig{RegisterAddress: 0x00, RegisterCount: 2}, nil
case SensorTypeWaterLeak:
return &SensorRegisterConfig{RegisterAddress: 0x00, RegisterCount: 1}, nil
case SensorTypeSmoke:
return &SensorRegisterConfig{RegisterAddress: 0x03, RegisterCount: 1}, nil
default:
return nil, fmt.Errorf("Unsupported sensor types")
}
}