|
|
package m9z
|
|
|
|
|
|
import (
|
|
|
"fmt"
|
|
|
"github.com/gogf/gf/v2/errors/gerror"
|
|
|
|
|
|
"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 gerror.New("设备返回写入失败")
|
|
|
}
|
|
|
|
|
|
return nil
|
|
|
}
|