package rpc import ( "fmt" "time" ) var device *Device // 获取设备相关RPC类 func GetDevice() *Device { if device == nil { device = &Device{} } return device } // 设备相关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 }