package m9z import ( "fmt" "github.com/towgo/towgo/errors/terror" "log" ) // 日出日落时间偏差调节 // SunRiseSet 日出日落时间偏差调节(单位:分钟) type SunRiseSet struct { Rise int `json:"rise"` // 日出偏差(-60~60分钟) Set int `json:"set"` // 日落偏差(-60~60分钟) } func SunRiseSetRead(deviceId string) (*SunRiseSet, error) { cmd, err := ReadCmd(deviceId, sunRiseSet, "读取日出日落时间偏差") if err != nil { return nil, err } data := cmd.Data srs := new(SunRiseSet) log.Printf("日出日落偏差% X", data) if int(data[0]) > 60 { srs.Rise = -(256 - int(data[0])) } else { srs.Rise = int(data[0]) } if int(data[1]) > 60 { srs.Set = -(256 - int(data[1])) } else { srs.Set = int(data[1]) } log.Println(srs.Rise, srs.Set) return srs, nil } func (srs *SunRiseSet) Write(deviceId string) error { return SunRiseSetWrite(deviceId, srs) } // SunRiseSetWrite 写入日出日落时间偏差设置 func SunRiseSetWrite(deviceId string, srs *SunRiseSet) error { // 1. 参数校验 if srs.Rise < -60 || srs.Rise > 60 { return fmt.Errorf("日出偏差值超出范围(-60~60分钟),当前值:%d", srs.Rise) } if srs.Set < -60 || srs.Set > 60 { return fmt.Errorf("日落偏差值超出范围(-60~60分钟),当前值:%d", srs.Set) } // 2. 准备写入数据(2字节) data := []byte{ byte(srs.Rise), // 日出偏差 byte(srs.Set), // 日落偏差 } // 4. 发送命令 resp, err := WriteCmd(deviceId, sunRiseSet, data, "写入日出日落时间偏差") if err != nil { return fmt.Errorf("设备通信失败: %v", err) } // 5. 验证设备响应 if !resp.Success { return terror.New("设备返回写入失败") } return nil }