【智能家居】天猫精灵对接

[复制链接]
查看3403 | 回复17 | 2024-5-24 23:21:52 | 显示全部楼层 |阅读模式

今天到了天猫精灵对接了,天猫精灵有多种对接方式,我们今天介绍的是天猫精灵智能家居技能对接模式,话不多说先来一张天猫精灵平台云云对接劝退价格图,以下价格是1年以前咨询天猫平台得到,实际价格请咨询天猫精灵;

套餐 接入数量 服务周期
云云对接基础套餐 5万元 3000台设备接入量 三年服务周期
云云对接基础套餐 8万元 1万台设备接入量 三年服务周期
云云对接基础套餐 15万元 2万5千台设备接入量 三年服务周期
云云对接基础套餐 20万元 5万台设备接入量 三年服务周期

资料整理:

云云对接付费公告:https://iot.aligenie.com/cooperation/agreement

智能家居技能平台:https://iot.aligenie.com/home

帮助文档:https://www.aligenie.com/doc/357554/hf8wog

对接流程:

  1. 登录天猫精灵开发者账号,创建技能
  2. 创建智能产品
  3. 调试设备之账号授权
  4. 配置爱星物联的智能产品、语控配置
  5. 设备调试

登录天猫精灵开发者账号,创建技能

image.png

image.png

点击控制台->应用->云接入OAuth管理,这里配置爱星物联的OAuth2.0的地址,这样小米就能通过OAuth2.0调用你的授权和下发控制了;

image.png

image.png

OAuth2.0的授权地址从何而来,请翻阅上一篇帖子《爱星物联对接小米IoT实现小爱同学语音控制》

配置完成之后,进入技能发布页面,进行测试授权;

image.png

创建智能产品

步骤就不详细的说明了,如果你的账号没有开通云云对接合作,那么你看到的可能是这个了;

image.png

具体你是否能申请成功,这就难说了,总之你申请了,你不去商务方面沟通下,估计没人理你;

那么我们看下成功案例吧,下面是我创建的产品

image.png

image.png

设备调试之账号授权

1、下载天猫精灵APP,并绑定音响设备

2、进入设备调试页面,先进行账号授权,并且同步设备信息;

image.png

账号授权,授权登录之后,你将看到以下成功页面,往往最朴素的成功,往往是最给人惊喜的(这也太朴素了吧)

image.png

配置爱星物联的智能产品、语控配置

注意:品牌名称、设备类型、产品型号、技能Id都能从天猫精灵的产品信息中获取;

image.png

设备调试

将当前配置了语控的产品配网到私有云APP,或者你使用虚拟设备也行;总确保之后账号授权的账号下有当前产品就行;不出意外的话你在天猫的设备调试页面将刷新到一个设备出来;

😕 可是意外出现了,我怎么都同步不了设备,如何我将天猫文档的协议格式和平台对接的协议格式对比了以下,发现天猫那边的协议好像发生了变化,这就尴尬了;

自己动手改吧,然后再给爱星物联提交以下pull request的,说不定给我送个大大带屏小安派呢?哈哈

于是我开始查阅开源源代码,找到了以下修改点;

image.png

根据我的估计调整完成协议之后,正常是可以同步设备了,这边今天就先到这里,改完之后,我将在回复里面同步下后续,敬请期待!

回复

使用道具 举报

Hogan | 2024-5-30 16:00:37 | 显示全部楼层

之前说到,天猫的协议调整了导致发现不了设备,我这边修改了一下平台的代码,统一了天猫发现设备的协议格式;

type TmDeviceV2 struct {
    DeviceId   string                   `json:"deviceId"`
    DeviceName string                   `json:"deviceName"`
    DeviceType string                   `json:"deviceType"`
    Brand      string                   `json:"brand"`
    Model      string                   `json:"model"`
    Zone       string                   `json:"zone"`
    Icon       string                   `json:"icon"`
    Properties []map[string]interface{} `json:"properties"`
    Actions    []string                 `json:"actions"`
    Extensions map[string]interface{}   `json:"extensions,omitempty"`
}

func NewTmDeviceDiscoveryResp(messageId string, devices []TmDevice) Common {
    var newDevs = make([]TmDeviceV2, 0)

    for _, device := range devices {
        var properties = make([]map[string]interface{}, 0)
        var actions = make([]string, 0)
        for _, productMap := range device.VoiceProduct.FunctionMap {
            p := map[string]interface{}{
                "name":  productMap.VoiceCode,
                "value": device.Status[productMap.VoiceCode],
            }
            //INT、DOUBLE、TEXT、ENUM、BOOL
            switch productMap.VDataType {
            case "INT", "DOUBLE":
                actions = append(actions, fmt.Sprintf("Set%v", productMap.VoiceCode))
                actions = append(actions, fmt.Sprintf("Adjust%v", productMap.VoiceCode))
            case "TEXT", "ENUM":
                actions = append(actions, fmt.Sprintf("Set%v", productMap.VoiceCode))
            case "BOOL":
                actions = append(actions, fmt.Sprintf("TurnOn"))
                actions = append(actions, fmt.Sprintf("TurnOff"))
                if iotutil.ToString(p["value"]) == "true" {
                    p["value"] = "on"
                } else {
                    p["value"] = "off"
                }
            }
            //productMap.VoiceCode
            properties = append(properties, p)
        }
        actions = append(actions, fmt.Sprintf("%v", "Query"))
        actions = iotutil.RemoveRepeatElement(actions)

        newDevs = append(newDevs, TmDeviceV2{
            DeviceId:   device.DeviceId,
            DeviceName: device.DeviceName,
            DeviceType: device.DeviceType,
            Brand:      device.Brand,
            Model:      device.Model,
            Zone:       device.Zone,
            Icon:       device.Icon,
            Properties: properties,
            Actions:    actions,
        })
    }
    iotlogger.LogHelper.Errorf("NewTmDeviceDiscoveryResp: %v", iotutil.ToString(newDevs))
    return Common{
        Header: Header{
            Namespace:      TmIotDeviceDiscovery,
            Name:           TmIotDeviceDiscoveryResp,
            MessageId:      messageId,
            PayLoadVersion: 2,
        },
        Payload: DevicesRespPayload{
            Devices: newDevs,
        },
    }
}

另外需要注意的是平台他对天猫的配置参数需要注意;

回复 支持 反对

使用道具 举报

Hogan | 2024-5-30 16:07:24 | 显示全部楼层

此时进入到设备调试页面,就能发现设备了

点击“在线调试”

打开私有云平台的设备调试页面,进入到设备指令调试页面,即可查看是否成功控制设备了;也可以直接观察串口日志和真实设备的变化;

回复 支持 反对

使用道具 举报

1084504793 | 2024-5-25 07:12:50 | 显示全部楼层
回复

使用道具 举报

qhsj | 2024-5-25 09:59:38 | 显示全部楼层
学习!
回复

使用道具 举报

iiv | 2024-5-25 10:29:57 | 显示全部楼层
点赞
回复

使用道具 举报

hrqwe | 2024-5-25 19:22:56 | 显示全部楼层
牛哇
日拱一卒,功不唐捐
回复

使用道具 举报

djy876 | 2024-5-25 20:15:22 | 显示全部楼层
天猫精灵个人版对接平台有吗?我家好几个天猫设备对接不了HA
回复 支持 反对

使用道具 举报

WT_0213 | 2024-5-26 11:56:10 | 显示全部楼层
回复

使用道具 举报

Hogan | 2024-5-30 15:45:54 | 显示全部楼层
djy876 发表于 2024-5-25 20:15
天猫精灵个人版对接平台有吗?我家好几个天猫设备对接不了HA

天猫精灵开通云云对接需要走商务,条件比较苛刻

你是想要怎么样的方式对接呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则