本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。
1、 php对接AliGenie天猫精灵服务器控制智能硬件esp8266① 在阿里云购买搭建私有云服务器,配置 SSL 证书 ,做好准备工作!
2、 php对接AliGenie天猫精灵服务器控制智能硬件esp8266② 全面认识第三方授权机制 oauth2.0 协议,如何在 php 上搭建 oauth2.0服务端!
3、 php对接AliGenie天猫精灵服务器控制智能硬件esp8266③渗入熟悉AliGenie 对接协议,揭开第三方云平台是如何让天猫精灵是发送消息到私有服务器的!
oauth2.0
协议的请求,要识别这个是否oauth2.0
的请求,需要自己来做判断。下面,我们来看看我的后台授权截图:、
access_token
,然后我们根据这个access_token
就可以识别是天猫精灵根据哪个用户来请求数据了。aligenie
服务器后台授权,当我们的应用被通过审核就可以在天猫精灵app上操作这个了!AI
时代的进步!那么,下面的协议都是涉及有技能点设计以及请求的动作!json
数据,以下面控制为例:{
"header":{
"namespace":"AliGenie.Iot.Device.Control",
"name":"TurnOn",
"messageId":"1bd5d003-31b9-476f-ad03-71d471922820",
"payLoadVersion":1
},
"payload":{
"accessToken":"123456789abc",
"deviceId":"34234",
"deviceType":"light",
"attribute":"powerstate",
"value":"on",
"extensions":{
"extension1":"",
"extension2":""
}
}
}
messageId
是作为调试追踪某个消息来的,总的来说,没什么用!header
里面的namespace
就可以知道天猫精灵请求都是什么内容了!总的来说就只有三个:namespace | 含义 |
---|---|
AliGenie.Iot.Device.Discovery | 设备发现,天猫精灵来请求当前用户的设备列表 |
AliGenie.Iot.Device.Control | 设备控制,控制某个设备 |
AliGenie.Iot.Device.Query | 设备属性查询,查询某个设备的状态 |
name
就是上面我们说的在设备发现,说明天猫精灵来请求当前用户的设备列表了。accessToken
来做识别就好了!{
"header": {
"messageId": "bf5a411b-e65f-486f-84ed-123456789902",
"name": "DiscoveryDevices",
"namespace": "AliGenie.Iot.Device.Discovery",
"payLoadVersion": 1
},
"payload": {
"accessToken": "d4c3e4c57f7415dac5be"
}
}
accessToken
是否有效期内?deviceId
这个字段,这个字段是我们在发现设备时候返回给它的,查询或者控制时候,都是根据这个字段来的!{
"header": {
"messageId": "68a1f301-bc43-4cec-86d6-123456",
"name": "Query",
"namespace": "AliGenie.Iot.Device.Query",
"payLoadVersion": 1
},
"payload": {
"accessToken": "0a8bb37def2b45e3e3c5d9c8af",
"attribute": "",
"deviceId": "a226",
"deviceType": "light",
"value": ""
}
}
deviceId
为abc28
的设备灯类型的色温为 2 **。name
是指设置动作,attribute
是指其属性,value
就是指其具体的数值了!可以为字符型或者整型!大家可以慢慢琢磨!{
"header": {
"messageId": "8c134775-7640-4073-a9ad-a513483622222",
"name": "SetColorTemperature",
"namespace": "AliGenie.Iot.Device.Control",
"payLoadVersion": 1
},
"payload": {
"accessToken": "0a8bb37def2b45e3e3",
"attribute": "colorTemperature",
"deviceId": "abc28",
"deviceType": "light",
"value": "2"
}
}
我好像遇到了阻碍,智能家居遇到了问题!
name
正常的话都是在后面加个Response"
;application/json;
payload
是我们的设备列表,而里面是一个对象数组,下面为例是2个设备,每一个设备里面都要有下面的字段,具体的含义自己去看文档。每个字段都是有意义的!要严格遵循!actions
字段官网说该设备支持的技能点,但是在控制时候,天猫精灵还是发生其他技能点的控制信息来,感觉这个返回什么天猫精灵都没用的!{
"header": {
"namespace": "AliGenie.Iot.DeviceCenter.Discovery",
"name": "DiscoveryDevicesResponse",
"messageId": "bf5a411b-e65f-486f-84ed-52891222222222222",
"payLoadVersion": 1
},
"payload": {
"devices": [{
"deviceId": "28",
"deviceName": "\u53cc\u8272\u706fB4E6",
"deviceType": "light",
"zone": "",
"brand": "",
"model": "\u534a\u9897\u5fc3\u810f\u54c1\u724c",
"icon": "https:\/\/www.domain.cn\/files\/ali_light.jpg",
"properties": [{
"name": "powerstate",
"value": "off"
}],
"actions": ["TurnOn", "TurnOff", "SetBrightness", "AdjustBrightness", "SetTemperature", "Query"],
"extensions": {
"extension1": "",
"extension2": ""
}
}, {
"deviceId": "26",
"deviceName": "cwLight68C6",
"deviceType": "light",
"zone": "",
"brand": "",
"model": "\u534a\u9897\u5fc3\u810f\u54c1\u724c",
"icon": "https:\/\/www.domain.com\/files\/ali_light.jpg",
"properties": [{
"name": "powerstate",
"value": "off"
}],
"actions": ["TurnOn", "TurnOff", "SetBrightness", "AdjustBrightness", "SetTemperature", "Query"],
"extensions": {
"extension1": "",
"extension2": ""
}
}]
}
}
properties
这个字段,而且里面都是一个数组,都是以键值对存在的!客厅灯打开了吗?
,就会查询客厅灯设备状态。如果返回下面,就会说:客厅灯当前为打开状态,色温为2700,亮度为65。天猫精灵会不断地把properties
里面的属性一个一个读出来!@_@{
"properties": [{
"name": "powerstate",
"value": "on"
}, {
"name": "onlinestate",
"value": "online"
}, {
"name": "remotestatus",
"value": "on"
}, {
"name": "colorTemperature",
"value": 2700
}, {
"name": "brightness",
"value": 65
}],
"header": {
"namespace": "AliGenie.Iot.Device.Query",
"name": "QueryResponse",
"messageId": "0e2d981a-081b-44b6-9aa7-123456789",
"payLoadVersion": 1
},
"payload": {
"deviceId": "abc28"
}
}
name
数值为TurnOnResponse
,然后在payload
后面加上这个设备的deviceId
就可以了!{
"header":{
"namespace":"AliGenie.Iot.Device.Control",
"name":"TurnOnResponse",
"messageId":"1bd5d003-31b9-476f-ad03-71d471922820",
"payLoadVersion":1
},
"payload":{
"deviceId":"34234"
}
}
半颗心脏
,呵呵!