You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mijia/api/getDevices.go

143 lines
4.2 KiB
Go

7 months ago
package api
import (
"encoding/json"
"strconv"
)
type MiJia struct {
Certificate Authorize
HomeData Home
}
func NewMiJia(Certificate Authorize) MiJia {
return MiJia{
Certificate: Certificate,
}
}
// 获取设备列表
func (mi *MiJia) Devices() {
data := map[string]interface{}{
"getVirtualModel": false,
"getHuamiDevices": 0,
}
PostData("/home/device_list", data, mi.Certificate)
}
func (mi *MiJia) Rooms() {
data := map[string]interface{}{
"fg": false,
"fetch_share": true,
"fetch_share_dev": true,
"limit": 300,
"app_ver": 7,
}
jsonData := PostData("/v2/homeroom/gethome", data, mi.Certificate)
json.Unmarshal(jsonData, &mi.HomeData)
}
// 获取场景列表
func (mi *MiJia) Scenes(roomIdx int) {
HomeId := mi.HomeData.Result.Homelist[roomIdx].Id
data := map[string]interface{}{
"home_id": HomeId,
}
PostData("/appgateway/miot/appsceneservice/AppSceneService/GetSceneList", data, mi.Certificate)
}
// 根据房间获取耗材列表
func (mi *MiJia) Consumables(roomIdx int) {
HomeId := mi.HomeData.Result.Homelist[roomIdx].Id
Homei, err := strconv.Atoi(HomeId)
if err != nil {
return
}
data := map[string]interface{}{
"home_id": Homei,
"owner_id": mi.Certificate.UserId,
}
PostData("/v2/home/standard_consumable_items", data, mi.Certificate)
}
func (mi *MiJia) RunScene(SceneId string) {
data := map[string]interface{}{
"scene_id": SceneId,
"trigger_key": "user.click",
}
PostData("/appgateway/miot/appsceneservice/AppSceneService/RunScene", data, mi.Certificate)
}
type HomeList struct {
Id string `json:"id"`
Name string `json:"name"`
Bssid string `json:"bssid"`
Dids []string `json:"dids"`
TempDids interface{} `json:"temp_dids"`
Icon string `json:"icon"`
Shareflag int `json:"shareflag"`
PermitLevel int `json:"permit_level"`
Status int `json:"status"`
Background string `json:"background"`
SmartRoomBackground string `json:"smart_room_background"`
Longitude float64 `json:"longitude"`
Latitude float64 `json:"latitude"`
CityId int `json:"city_id"`
Address string `json:"address"`
CreateTime int `json:"create_time"`
Roomlist []struct {
Id string `json:"id"`
Name string `json:"name"`
Bssid string `json:"bssid"`
Parentid string `json:"parentid"`
Dids []string `json:"dids"`
Icon string `json:"icon"`
Background string `json:"background"`
Shareflag int `json:"shareflag"`
CreateTime int `json:"create_time"`
}
Uid int64 `json:"uid"`
AppearHomeList interface{} `json:"appear_home_list"`
PopupFlag int `json:"popup_flag"`
PopupTimeStamp int `json:"popup_time_stamp"`
CarDid string `json:"car_did"`
}
type Home struct {
Code int `json:"code"`
Message string `json:"message"`
Result struct {
Homelist []HomeList `json:"homelist"`
HasMore bool `json:"has_more"`
MaxId string `json:"max_id"`
} `json:"result"`
}
func (mi *MiJia) GetDeviceVar(devs []map[string]interface{}) {
//参数说明
//did: 设备ID
//siid: 功能分类ID
//piid: 设备属性ID
//aiid: 设备方法ID
//从下述网站查询
//米家产品库网站不稳定不知道siid和piid无法使用`getDevAtt`和`setDevAtt`
//一个取巧的办法是使用在米家APP手动设置批量控制然后使用`runScene`
//https://home.miot-spec.com/
//
//获取全部设备列表函数`getDevices`返回结果说明
//返回结果说明
//name: 设备名称
//did: 设备ID
//isOnline: 设备是否在线
//model: 设备产品型号, 根据这个去米家产品库查该产品相关的信息
//
//获取设备属性,一次可以请求多个
//Atts = getDevAtt([{"did":"111111111","siid":2,"piid":1},{"did":"111111111","siid":2,"piid":2},
// {"did":"111111111","siid":2,"piid":3},{"did":"111111111","siid":2,"piid":4}])
//print(Atts)
data := map[string]interface{}{
"params": devs,
}
PostData("/miotspec/prop/get", data, mi.Certificate)
}