Files
rpc-client/pkg/rpc/device.go
2025-09-25 14:23:17 +08:00

229 lines
5.8 KiB
Go

package rpc
import (
"fmt"
"time"
)
// 设备相关RPC
type Device struct{}
// 获取设备详情
func (d *Device) GetDetail(deviceId uint32) (*DeviceDetail, error) {
body := map[string]any{
"device_id": deviceId,
"field_list": []string{"type", "secret", "connect_type", "p_id", "data_id"},
}
result := &Result[DeviceDetail]{}
if err := GetRequest().Send("device.get_detail", body, result); err != nil {
return nil, err
}
if result.Code != 0 {
return nil, fmt.Errorf("%s", result.Message)
}
return &result.Data, nil
}
// 获取设备属性列表
func (d *Device) GetAttributeOptionList() (*[]DeviceAttributeOption, error) {
result := &Result[[]DeviceAttributeOption]{}
if err := GetRequest().Send("device.get_attribute_option_list", map[string]any{}, result); err != nil {
return nil, err
}
if result.Code != 0 {
return nil, fmt.Errorf("%s", result.Message)
}
return &result.Data, nil
}
// 重置设备在线状态
func (d *Device) ResetOnlineStatus() error {
result := &Result[any]{}
if err := GetRequest().Send("device.reset_online_status", map[string]any{}, result); err != nil {
return err
}
if result.Code != 0 {
return fmt.Errorf("%s", result.Message)
}
return nil
}
// 更新设备在线状态
func (d *Device) UpdateOnlineStatus(deviceId uint32, online bool, updateTime time.Time) error {
body := map[string]any{
"device_id": deviceId,
"online": online,
"time": updateTime.Format(time.DateTime),
}
result := &Result[any]{}
if err := GetRequest().Send("device.update_online_status", body, result); err != nil {
return err
}
if result.Code != 0 {
return fmt.Errorf("%s", result.Message)
}
return nil
}
// 更新从设备在线状态
func (d *Device) UpdateSlaveOnlineStatus(deviceId uint32, online bool, updateTime time.Time, parentId *uint32) error {
body := map[string]any{
"device_id": deviceId,
"online": online,
"time": updateTime.Format(time.DateTime),
}
if parentId != nil {
body["parent_id"] = *parentId
}
result := &Result[any]{}
if err := GetRequest().Send("device.update_salve_online_status", body, result); err != nil {
return err
}
if result.Code != 0 {
return fmt.Errorf("%s", result.Message)
}
return nil
}
// 更新设备属性上报时间
func (d *Device) UpdateReportTime(deviceId uint32, reportTime *time.Time) error {
body := map[string]any{
"device_id": deviceId,
}
if reportTime != nil {
body["time"] = reportTime.Format(time.DateTime)
}
result := &Result[any]{}
if err := GetRequest().Send("device.update_report_time", body, result); err != nil {
return err
}
if result.Code != 0 {
return fmt.Errorf("%s", result.Message)
}
return nil
}
// 设置设备属性
func (d *Device) SetAttribute(deviceId uint32, attributeSet map[string]any) error {
body := map[string]any{
"device_id": deviceId,
"attribute": attributeSet,
}
result := &Result[any]{}
if err := GetRequest().Send("device.set_attribute", body, result); err != nil {
return err
}
if result.Code != 0 {
return fmt.Errorf("%s", result.Message)
}
return nil
}
// 获取设备属性
func (d *Device) GetAttribute(deviceId uint32) (*map[string]any, error) {
body := map[string]any{
"device_id": deviceId,
}
result := &Result[map[string]any]{}
if err := GetRequest().Send("device.get_attribute", body, result); err != nil {
return nil, err
}
if result.Code != 0 {
return nil, fmt.Errorf("%s", result.Message)
}
return &result.Data, nil
}
// 更新设备版本信息
func (d *Device) UpdateVersion(deviceId uint32, versionNumber uint) error {
body := map[string]any{
"device_id": deviceId,
"version_number": versionNumber,
}
result := &Result[any]{}
if err := GetRequest().Send("device.update_version", body, result); err != nil {
return err
}
if result.Code != 0 {
return fmt.Errorf("%s", result.Message)
}
return nil
}
// 保存升级结果
func (d *Device) SaveUpgradeResult(upgradeTaskId uint32, status uint8, finishTime time.Time) error {
body := map[string]any{
"upgrade_task_id": upgradeTaskId,
"status": status,
"finish_time": finishTime.Format(time.DateTime),
}
result := &Result[any]{}
if err := GetRequest().Send("device.save_upgrade_result", body, result); err != nil {
return err
}
if result.Code != 0 {
return fmt.Errorf("%s", result.Message)
}
return nil
}
// 获取语音助手参数列表
func (d *Device) GetVoiceAssistantList() ([]VoiceAssistant, error) {
body := map[string]any{}
result := &Result[[]VoiceAssistant]{}
if err := GetRequest().Send("device.get_voice_assistant_list", body, result); err != nil {
return nil, err
}
if result.Code != 0 {
return nil, fmt.Errorf("%s", result.Message)
}
return result.Data, nil
}
// 获取设备语音助手参数
func (d *Device) GetVoiceAssistant(deviceId uint32) (*VoiceAssistant, error) {
body := map[string]any{
"device_id": deviceId,
}
result := &Result[*VoiceAssistant]{}
if err := GetRequest().Send("device.get_voice_assistant", body, result); err != nil {
return nil, err
}
if result.Code != 0 {
return nil, fmt.Errorf("%s", result.Message)
}
return result.Data, nil
}
// 记录设备操作日志
func (d *Device) RecordOperationLog(deviceId uint32, platform DeviceOperationLogPlatform, attribute string, value any, valueType uint8, result DeviceOperationLogResult, reason *string, userId *uint32) error {
body := map[string]any{
"device_id": deviceId,
"platform": platform,
"attribute": attribute,
"value": value,
"value_type": valueType,
"result": result,
"reason": reason,
"user_id": userId,
}
res := &Result[any]{}
if err := GetRequest().Send("device.record_operation_log", body, res); err != nil {
return err
}
if res.Code != 0 {
return fmt.Errorf("%s", res.Message)
}
return nil
}
var device *Device
// 获取设备相关RPC类
func GetDevice() *Device {
if device == nil {
device = &Device{}
}
return device
}