6 Commits

Author SHA1 Message Date
207b56e419 语音助手参数添加在线状态字段 2025-09-20 17:42:05 +08:00
69e7893d27 添加语音助手相关方法 2025-09-19 18:00:55 +08:00
30e530de6d 修改日志等级 2025-09-15 16:33:50 +08:00
a15b442e64 修改日志驱动类型 2025-09-15 16:11:05 +08:00
ed3bd2bd80 添加服务相关方法&增加日志 2025-09-15 15:53:11 +08:00
917ae30a86 修改获取设备属性参数返回值的类型 2025-09-03 17:41:14 +08:00
6 changed files with 128 additions and 20 deletions

6
go.mod
View File

@@ -4,4 +4,8 @@ go 1.24.3
require golang.org/x/net v0.43.0 require golang.org/x/net v0.43.0
require golang.org/x/text v0.28.0 // indirect require (
go.uber.org/multierr v1.10.0 // indirect
go.uber.org/zap v1.27.0 // indirect
golang.org/x/text v0.28.0 // indirect
)

4
go.sum
View File

@@ -1,3 +1,7 @@
go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=

View File

@@ -5,16 +5,6 @@ import (
"time" "time"
) )
var device *Device
// 获取设备相关RPC类
func GetDevice() *Device {
if device == nil {
device = &Device{}
}
return device
}
// 设备相关RPC // 设备相关RPC
type Device struct{} type Device struct{}
@@ -176,3 +166,41 @@ func (d *Device) SaveUpgradeResult(upgradeTaskId uint32, status uint8, finishTim
} }
return nil 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
}
var device *Device
// 获取设备相关RPC类
func GetDevice() *Device {
if device == nil {
device = &Device{}
}
return device
}

View File

@@ -13,6 +13,7 @@ import (
"os" "os"
"time" "time"
"go.uber.org/zap"
"golang.org/x/net/http2" "golang.org/x/net/http2"
) )
@@ -24,6 +25,7 @@ type Request struct {
port uint16 port uint16
rootCertPath string rootCertPath string
client *http.Client client *http.Client
logger *zap.SugaredLogger
} }
// 发送请求 // 发送请求
@@ -58,11 +60,19 @@ func (r *Request) Send(methodName string, body any, responseBody any) error {
return fmt.Errorf("response body json unmarshal fail: %v", err) return fmt.Errorf("response body json unmarshal fail: %v", err)
} }
if r.logger != nil {
r.logger.Debugf("method: %s, request: %s, response: %s",
methodName,
string(bodyByte),
string(responseBodyByte),
)
}
return nil return nil
} }
// 初始化 // 初始化
func Initiate(host string, port uint16, rootCertPath string) error { func Initiate(host string, port uint16, rootCertPath string, logger *zap.SugaredLogger) error {
rootCert, err := os.ReadFile(rootCertPath) rootCert, err := os.ReadFile(rootCertPath)
if err != nil { if err != nil {
return fmt.Errorf("cert file read fail") return fmt.Errorf("cert file read fail")
@@ -70,6 +80,7 @@ func Initiate(host string, port uint16, rootCertPath string) error {
defaultRequest.host = host defaultRequest.host = host
defaultRequest.port = port defaultRequest.port = port
defaultRequest.rootCertPath = rootCertPath defaultRequest.rootCertPath = rootCertPath
defaultRequest.logger = logger
certPool := x509.NewCertPool() certPool := x509.NewCertPool()
certPool.AppendCertsFromPEM(rootCert) certPool.AppendCertsFromPEM(rootCert)

46
pkg/rpc/server.go Normal file
View File

@@ -0,0 +1,46 @@
package rpc
import "fmt"
// 服务相关RPC
type Server struct{}
// 获取Websocket签名信息
func (s *Server) GetWebsocketSignData(sign string) (*WebsocketSignData, error) {
body := map[string]any{
"sign": sign,
}
result := &Result[WebsocketSignData]{}
if err := GetRequest().Send("server.get_websocket_sign", body, result); err != nil {
return nil, err
}
if result.Code != 0 {
return nil, fmt.Errorf("%s", result.Message)
}
return &result.Data, nil
}
// 删除Websocket签名
func (s *Server) DeleteWebsocketSign(sign string) error {
body := map[string]any{
"sign": sign,
}
result := &Result[WebsocketSignData]{}
if err := GetRequest().Send("server.get_websocket_sign", body, result); err != nil {
return err
}
if result.Code != 0 {
return fmt.Errorf("%s", result.Message)
}
return nil
}
var server *Server
// 获取服务相关RPC类
func GetServer() *Server {
if server == nil {
server = &Server{}
}
return server
}

View File

@@ -56,13 +56,28 @@ type DeviceAttributeOption struct {
Type uint8 `json:"type"` Type uint8 `json:"type"`
ContentType uint8 `json:"content_type"` ContentType uint8 `json:"content_type"`
Attribute []struct { Attribute []struct {
Type uint8 `json:"type"` Type uint8 `json:"type"`
Name string `json:"name"` Name string `json:"name"`
Flag uint8 `json:"flag"` Flag uint8 `json:"flag"`
Field string `json:"field"` Field string `json:"field"`
Readonly bool `json:"readonly"` Readonly bool `json:"readonly"`
AllowItem *[]int `json:"allow_item,omitempty"` AllowItem *[]uint8 `json:"allow_item,omitempty"`
Min *uint32 `json:"min,omitempty"` Min *uint32 `json:"min,omitempty"`
Max *uint32 `json:"max,omitempty"` Max *uint32 `json:"max,omitempty"`
} `json:"attribute"` } `json:"attribute"`
} }
// Websocket签名数据
type WebsocketSignData struct {
UserId uint32 `json:"user_id"`
Platform string `json:"platform"`
}
// 语音助手数据
type VoiceAssistant struct {
Id uint32 `json:"id"`
Type uint8 `json:"type"`
OnlineStatus uint8 `json:"online_status"`
BemFaEnable uint8 `json:"bem_fa_enable"`
BemFaName string `json:"bem_fa_name"`
}