Files
4566704 cdc459b5ff fix(xiaomihome): 模块路径改为 git.zeroonesoft.cn/golib/xiaomihome
- 改动:go.mod module 声明与全部内部导入路径补全为完整域名路径,README 同步
- 原因:裸模块名无法被 go get 解析,发版前必须修正为 GOPRIVATE 可拉取路径
2026-10-05 08:53:23 +08:00

104 lines
2.7 KiB
Go

package bridge
import (
"context"
"strconv"
"git.zeroonesoft.cn/golib/xiaomihome/xiaomi"
"git.zeroonesoft.cn/golib/xiaomihome/xiaomi/devices"
"github.com/sirupsen/logrus"
)
// ── 账号 / Token / 家庭 ──
func (b *Bridge) RefreshToken(ctx context.Context) (*xiaomi.TokenResult, error) {
return b.client.RefreshToken(ctx)
}
func (b *Bridge) GetUserInfo(ctx context.Context) (*xiaomi.UserInfo, error) {
return b.client.GetUserInfo(ctx)
}
func (b *Bridge) GetHomeList(ctx context.Context) ([]*xiaomi.HomeInfo, error) {
return b.client.GetHomeList(ctx)
}
func (b *Bridge) GetHomeDevices(ctx context.Context, homeID int64) ([]*xiaomi.DeviceInfo, error) {
return b.client.GetDevices(ctx, xiaomi.FilterByHome(strconv.FormatInt(homeID, 10)))
}
func (b *Bridge) GetHome(ctx context.Context, homeID int64) (*xiaomi.HomeInfo, error) {
return b.client.GetHome(ctx, homeID)
}
func (b *Bridge) GetRooms(ctx context.Context, homeID int64) ([]*xiaomi.RoomInfo, error) {
return b.client.GetRooms(ctx, homeID)
}
func (b *Bridge) GetRoomDevices(ctx context.Context, homeID, roomID int64) ([]string, error) {
return b.client.GetRoomDevices(ctx, homeID, roomID)
}
func (b *Bridge) RefreshDevices(ctx context.Context, homeIDs ...int64) error {
var ids []string
if len(homeIDs) > 0 {
ids = make([]string, len(homeIDs))
for i, v := range homeIDs {
ids[i] = strconv.FormatInt(v, 10)
}
}
err := b.client.RefreshDevices(ctx, ids...)
if err != nil {
return err
}
// 获取设备列表:指定家庭则只取家庭设备,否则全量
b.mu.Lock()
defer b.mu.Unlock()
// 全量设备列表(SDK 已在 RefreshDevices 中剔除米家已删除的设备),
// 本地控制器集合必须与它保持一致
all, err := b.client.GetDevices(ctx)
if err != nil {
return err
}
alive := make(map[string]struct{}, len(all))
for _, info := range all {
alive[info.DID] = struct{}{}
}
if removed := pruneControllers(b.dv, alive); len(removed) > 0 {
logrus.Infof("[bridge] %d: %d device(s) removed from Mi Home, controllers dropped: %v",
b.id, len(removed), removed)
}
if len(homeIDs) > 0 {
for _, hid := range homeIDs {
devs, err := b.client.GetDevices(ctx, xiaomi.FilterByHome(strconv.FormatInt(hid, 10)))
if err != nil {
return err
}
for _, info := range devs {
if _, exists := b.dv[info.DID]; !exists {
if d, createErr := devices.Create(b.client, info); createErr == nil && d != nil {
b.dv[info.DID] = d
b.subscribeDevice(info.DID, d)
}
}
}
}
return nil
}
// 全量
for _, info := range all {
if _, exists := b.dv[info.DID]; !exists {
if d, createErr := devices.Create(b.client, info); createErr == nil && d != nil {
b.dv[info.DID] = d
b.subscribeDevice(info.DID, d)
}
}
}
return nil
}