iot-spray-equipment/equipment/spray_equipment.go

123 lines
2.5 KiB
Go

package equipment
import (
"sync"
"time"
)
const (
ConnStatusUnknown uint8 = iota
ConnStatusOnline
ConnStatusOffline
)
func NewSprayEquipment(id string) *SprayEquipment {
return &SprayEquipment{
id: id,
speed1: 0,
speed2: 0,
yv1: 0,
yv2: 0,
isRunning: false,
errCode: 0,
connStatus: ConnStatusUnknown,
connLostTime: 0,
}
}
type SprayEquipment struct {
id string // 设备ID
speed1 uint8 // 电磁阀1对应的喷雾量(百分比): 0-100
speed2 uint8 // 电磁阀2对应的喷雾量(百分比): 0-100
yv1 uint8 // 电磁阀1的状态: 0 停止, 1 启动
yv2 uint8 // 电磁阀2的状态: 0 停止, 1 启动
isRunning bool // 是否已启动
errCode uint8 // 错误代码: 0 无, 1 急停, 2 低水位报警
connStatus uint8 // 连接状态: 0 未知, 1 在线, 2 离线
connLostTime time.Duration // 连接丢失时间
connLostTimeMu sync.RWMutex
}
func (s *SprayEquipment) GetId() string {
return s.id
}
func (s *SprayEquipment) SetSpeed1(speed uint8) {
s.speed1 = speed
}
func (s *SprayEquipment) GetSpeed1() uint8 {
return s.speed1
}
func (s *SprayEquipment) SetSpeed2(speed uint8) {
s.speed2 = speed
}
func (s *SprayEquipment) GetSpeed2() uint8 {
return s.speed2
}
func (s *SprayEquipment) SetYv1(yv1 uint8) {
s.yv1 = yv1
}
func (s *SprayEquipment) GetYv1() uint8 {
return s.yv1
}
func (s *SprayEquipment) SetYv2(yv2 uint8) {
s.yv2 = yv2
}
func (s *SprayEquipment) GetYv2() uint8 {
return s.yv2
}
func (s *SprayEquipment) SetIsRunning(isRunning bool) {
s.isRunning = isRunning
}
func (s *SprayEquipment) GetIsRunning() bool {
return s.isRunning
}
func (s *SprayEquipment) SetErrCode(errCode uint8) {
s.errCode = errCode
}
func (s *SprayEquipment) GetErrCode() uint8 {
return s.errCode
}
func (s *SprayEquipment) SetConnStatus(status uint8) {
s.connStatus = status
}
func (s *SprayEquipment) GetConnStatus() uint8 {
return s.connStatus
}
func (s *SprayEquipment) GetConnLostTime() time.Duration {
s.connLostTimeMu.RLock()
defer s.connLostTimeMu.RUnlock()
return s.connLostTime
}
func (s *SprayEquipment) IncreaseConnLostTime(d time.Duration) time.Duration {
s.connLostTimeMu.Lock()
defer s.connLostTimeMu.Unlock()
s.connLostTime = s.connLostTime + d
return s.connLostTime
}
func (s *SprayEquipment) ResetConnLostTime() {
s.connLostTimeMu.Lock()
defer s.connLostTimeMu.Unlock()
s.connStatus = ConnStatusOnline
s.connLostTime = 0
}