Files
xiaomihome/xiaomi/types.go
T
4566704 2b7de69403 refactor(logger): 日志改用 logrus 全局包级调用,移除 Logger 注入接口
为什么:并入宿主项目后须与宿主日志体系一致——宿主统一用 pkg/logger 初始化
logrus 全局实例并直接 logrus.Xxx 包级调用;包一层 Logger 接口会让 logrus 的
caller 定位(报告调用文件:行号)失准。

改动:
- 删除 logger 包(Logger 接口 / Default / SetDefault,默认本就是 logrus.StandardLogger)
- 11 个结构体移除 lgr logger.Logger 字段、SetLogger 方法及构造中的 lgr 初始化
- 192 处 lgr.Xxxf 调用改为 logrus.Xxxf,日志消息文本保持不变
- xiaomi.Client 移除 Logger() 访问器,air_conditioner 回读日志去掉判空调用直连 logrus
- miot_i18n.go 两处标准库 log.Printf 改为 logrus.Errorf,统一日志出口
- go.mod:logrus 从 indirect 提升为直接依赖
- goimports/goformat 全树规范化:此前部分文件未 gofmt(单行 if、对齐),本次顺带
  格式化,纯空白/换行变化,无逻辑改动

验证:go build / go vet / go test ./... 全部通过(bridge、miot、xiaomi、devices、specs)
2026-09-15 20:16:26 +08:00

169 lines
5.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Package xiaomi provides a high-level, strongly-typed wrapper over the miot package.
// It converts map[string]interface{} APIs into typed structs and offers device
// control abstractions that hide siid/piid details behind semantic interfaces.
package xiaomi
// ========== 基础信息 ==========
// UserInfo 用户信息(字段对齐 Xiaomi open.account.xiaomi.com/user/profile API)
type UserInfo struct {
UID string `json:"userId"`
NickName string `json:"miliaoNick"`
AvatarURL string `json:"miliaoIcon"`
}
// HomeInfo 家庭信息
type HomeInfo struct {
ID int64 `json:"id,string"`
Name string `json:"name"`
UID string `json:"uid"`
GroupID string `json:"group_id"`
Rooms []RoomInfo `json:"rooms"`
DidList []string `json:"did_list"`
ShareState bool `json:"share_state"`
CityID string `json:"city_id"`
Longitude float64 `json:"longitude"`
Latitude float64 `json:"latitude"`
Address string `json:"address"`
}
// RoomInfo 房间信息
type RoomInfo struct {
ID int64 `json:"id,string"`
Name string `json:"name"`
HomeID int64 `json:"home_id,string"`
DidList []string `json:"did_list"`
}
// DeviceInfo 设备信息(替代 map[string]interface{})
type DeviceInfo struct {
DID string `json:"did"`
Name string `json:"name"`
Model string `json:"model"`
Manufacturer string `json:"manufacturer"`
FWVersion string `json:"fw_version"`
Icon string `json:"icon"`
URN string `json:"urn"` // 设备 SPEC 类型
Token string `json:"token"`
IP string `json:"local_ip"`
RSSI int `json:"rssi"`
SSID string `json:"ssid"`
BSSID string `json:"bssid"`
Online bool `json:"is_online"`
HomeID string `json:"home_id"`
HomeName string `json:"home_name"`
RoomID string `json:"room_id"`
RoomName string `json:"room_name"`
OwnerID string `json:"owner_id"`
ParentID string `json:"parent_id"`
ParentModel string `json:"parent_model"`
GroupID string `json:"group_id"`
ConnectType int `json:"connect_type"` // 0=WiFi, 1=BLE, 2=ZigBee, ...
}
// ========== 属性/事件 ==========
// PropertyValue 属性值(强类型)。
// Type 字段仅在主动 GetProp 场景可用(可从 SPEC 推断 format),SubProp 回调中 miot 不提供 type 信息。
type PropertyValue struct {
DID string `json:"did"`
SIID int `json:"siid"`
PIID int `json:"piid"`
Code int `json:"code"`
Value interface{} `json:"value"`
Type string `json:"type"` // SPEC format ("bool"/"uint8"/"float"/"string"); 仅 GetProp 时可用
}
// PropertiesChanged 属性变化事件
type PropertiesChanged struct {
DID string `json:"did"`
Properties []PropertyValue `json:"properties"`
}
// EventOccurred 事件发生通知
type EventOccurred struct {
DID string `json:"did"`
SIID int `json:"siid"`
EIID int `json:"eiid"`
Arguments map[string]interface{} `json:"arguments"`
Timestamp int64 `json:"timestamp"`
}
// DeviceState 设备在线状态
type DeviceState string
const (
StateOnline DeviceState = "online"
StateOffline DeviceState = "offline"
)
// ========== Action ==========
// ActionResult Action 执行结果
type ActionResult struct {
DID string `json:"did"`
SIID int `json:"siid"`
AIID int `json:"aiid"`
Code int `json:"code"`
Out []map[string]interface{} `json:"out"`
}
// ========== 属性读写辅助类型 ==========
// PropKey 属性键对
type PropKey struct {
DID string
SIID int
PIID int
}
// PropKeyValue 属性键值对
type PropKeyValue struct {
PropKey
Value interface{}
}
// PropResult 写入结果
type PropResult struct {
PropKey
Code int
}
// ========== 回调定义 ==========
// PropHandler 属性变化回调(强类型,替代 miot 的 map handler)
type PropHandler func(did string, prop *PropertyValue)
// EventHandler 事件回调(强类型)
type EventHandler func(did string, event *EventOccurred)
// DeviceStateHandler 设备在线状态变化回调
type DeviceStateHandler func(did string, state DeviceState)
// ========== 设备分类 ==========
// Kind 设备大类
type Kind string
const (
KindAirConditioner Kind = "air_conditioner"
KindLight Kind = "light"
KindSwitch Kind = "switch"
KindFan Kind = "fan"
KindCover Kind = "cover"
KindHumidifier Kind = "humidifier"
KindVacuum Kind = "vacuum"
KindWaterHeater Kind = "water_heater"
KindSpeaker Kind = "speaker"
KindGateway Kind = "gateway"
KindPlug Kind = "plug"
KindOccupancySensor Kind = "sensor_occupy"
KindSensor Kind = "sensor"
KindUnknown Kind = "unknown"
)
// DeviceKind 从 URN 快速判断设备种类(不依赖 SPEC 加载)
func (d *DeviceInfo) DeviceKind() Kind {
return Classify(d)
}