package bridge import ( "context" "strconv" "xiaomihome/xiaomi" "xiaomihome/xiaomi/devices" ) // ── 账号 / 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() 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 { b.dv[info.DID] = d } } } } return nil } // 全量 devList, err := b.client.GetDevices(ctx) if err != nil { return err } for _, info := range devList { if _, exists := b.dv[info.DID]; !exists { if d, createErr := devices.Create(b.client, info); createErr == nil { b.dv[info.DID] = d } } } return nil }