php对接AliGenie天猫精灵服务器控制智能硬件esp8266③ 渗入熟悉AliGenie 对接协议,揭开第三方云平台是如何让天猫精灵是发送消息到私有服务器的!
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。
1、 php对接AliGenie天猫精灵服务器控制智能硬件esp8266① 在阿里云购买搭建私有云服务器,配置 SSL 证书 ,做好准备工作!
2、 php对接AliGenie天猫精灵服务器控制智能硬件esp8266② 全面认识第三方授权机制 oauth2.0 协议,如何在 php 上搭建 oauth2.0服务端!
3、 php对接AliGenie天猫精灵服务器控制智能硬件esp8266③渗入熟悉AliGenie 对接协议,揭开第三方云平台是如何让天猫精灵是发送消息到私有服务器的!
文章目录
- 一、前言;
- 二、天猫精灵如何授权?
- 三、天猫精灵请求有哪些?
- 3.1 发现设备列表:
- 3.2 查询某个设备属性:
- 3.3 控制某个设备:
- 四、天猫精灵请求我们应该如何响应?
- 4.1 发现设备列表响应:
- 4.2 查询某个设备状态回应:
- 4.3 控制某个设备回应:
- 五、其他
一、前言;
- 新年也快来临了,一个月没写嵌入式开发代码了。临近年末,工作也就不断加紧,偶尔做下自己的服务器!天猫精灵对接已经完毕,今天抽出点时间,终于可以写下这篇文章了。
- 毕竟自己出身嵌入式,又自学于网络编程,这对整个协议的流程了解容易上手!因为涉及到一些商业机密,不想被骂!我这里就不在多详细地做笔记,只做协议分析,和在开发过程中遇到的坑。如有需要技术讨论,请加群群里大牛一起讨论。
二、天猫精灵如何授权?
- 上篇文章已经提到,在开发时期,天猫精灵服务器官网会向我们在后台填写的地址发起一个
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 | 设备属性查询,查询某个设备的状态 |
3.1 发现设备列表:
- 以下面为例,简单分析天猫精灵在请求什么?
name
就是上面我们说的在设备发现,说明天猫精灵来请求当前用户的设备列表了。- 那么这个天猫精灵是指哪个用户呢?我们根据颁发的
accessToken
来做识别就好了!
{"header": {"messageId": "bf5a411b-e65f-486f-84ed-123456789902","name": "DiscoveryDevices","namespace": "AliGenie.Iot.Device.Discovery","payLoadVersion": 1},"payload": {"accessToken": "d4c3e4c57f7415dac5be"}
}
3.2 查询某个设备属性:
- 因为目前天猫精灵不支持多设备查询!以下面单个设备查询为例:
- 首先我们服务器来看看这个
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": ""}
}
3.3 控制某个设备:
- 以下面控制为例
- 下面大概意思是:**控制
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;
4.1 发现设备列表响应:
payload
是我们的设备列表,而里面是一个对象数组,下面为例是2个设备,每一个设备里面都要有下面的字段,具体的含义自己去看文档。每个字段都是有意义的!要严格遵循!- 还有要注意的是,其不能包含特殊字符,要不然在天猫精灵app会显示不了!
- 有个坑就是:
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": ""}}]}
}
4.2 查询某个设备状态回应:
- 下面可以看到,多了
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"}
}
4.3 控制某个设备回应:
- 这个回应就比较简单了:
name
数值为TurnOnResponse
,然后在payload
后面加上这个设备的deviceId
就可以了!
{"header":{"namespace":"AliGenie.Iot.Device.Control","name":"TurnOnResponse","messageId":"1bd5d003-31b9-476f-ad03-71d471922820","payLoadVersion":1},"payload":{"deviceId":"34234"}}
五、其他
- 后台配置详情:
- 之后,我们就可以在天猫精灵APP看到我们的设备了,品牌是
半颗心脏
,呵呵!
php对接AliGenie天猫精灵服务器控制智能硬件esp8266③ 渗入熟悉AliGenie 对接协议,揭开第三方云平台是如何让天猫精灵是发送消息到私有服务器的!相关推荐
- php对接AliGenie天猫精灵服务器控制智能硬件esp8266② 全面认识第三方授权机制 oauth2.0 协议,如何在 php 上搭建 oauth2.0服务端!(附带demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. php对接AliGenie天猫精灵服务器控制智能硬件esp82 ...
- php对接AliGenie天猫精灵服务器控制智能硬件esp8266① 在阿里云购买搭建私有云服务器,配置 SSL 证书 ,做好准备工作!
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. php对接AliGenie天猫精灵服务器控制智能硬件esp82 ...
- 【入门篇】ESP8266直连智能音箱(天猫精灵)控制智能灯
本系列博客学习由非官方人员 刘一周 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 本系列博客内容是通过乐鑫ESP8266直连天猫精灵,实现语音控制智能灯 ...
- 支付宝小程序控制硬件②】 全网首篇,个人支付宝小程序控制智能硬件esp8266,从设计电路到设计协议控制两盏LED灯调节亮度。
本系列属于支付宝小程序控制智能硬件 esp8266等芯片的思路编程,欢迎大家点点手指关注我半颗心脏,博客文章列表干货多多,有任何疑问评论区留言,第一时间看到回复! [支付宝小程序控制硬件①] 申请个人 ...
- 【微信小程序控制硬件⑦ 进阶篇】动起来做一个微信小程序Mqtt协议控制智能硬件的框架,为心里全栈工程师梦想浇水。
文章目录 一.前言: 二.涉及的技术点: 三.框架的运行原理: 四.框架代码流程: 4.1 主线程: 4.2 获取设备列表显示设备,以及订阅在线的设备: 4.3 点击某设备如何实现携带此设备信息到控制 ...
- php控制智能硬件,天猫精灵方糖可以控制智能插座吗?天猫精灵方糖控制智能插座的方法...
天猫精灵方糖可以控制智能插座吗?天猫精灵方糖智能音箱是一款AI助理,可以帮助用户控制智能家居,天猫精灵方糖智联套装活动价仅需89元,其中包括主机.智能灯泡和智能插座.用户使用该音箱如何控制智能插座呢? ...
- 2018个人年度总结:我是如何从嵌入式开发到服务器开发对接天猫精灵、小爱智能音箱服务器!懵懂 | 奋斗 | 进阶 | 信心
文章目录 一.个人总结? 二.步入职场那些事. 2.1 大学项目引起兴趣. 2.2 第一次面试. 二.职业发展的奠基石------ 机智云. 三.嵌入式开发.移动开发.服务器开发. 3.1.嵌入式开发 ...
- 【TB-02模组专题②】学习如何对接天猫精灵语音控制的过程;
本<安信可ble mesh蓝牙模组TB-02模组专题>系列博客学习由官方博客 CSDN安信可博客 潜心所力所写.如有不对之处,请留言,我们及时更改. 1.BLE MESH开发环境linux ...
- 实例分享--告诉你如何使用语音和自然语言控制智能家居
ZigBee作为一种短距离.低功耗的无线通信局域网协议,其优点是超低功耗.安全性高和自组网,并且可容纳多个设备,因此在智能家居控制中占有很大的优势. 但是,仅仅使用ZigBee技术来控制家 ...
最新文章
- Linux下Shell重定向
- VMware Workstation 更改语言
- XSS攻击之窃取Cookie
- 科大星云诗社动态20210314
- Unity3D重要知识点
- android gps 锁屏更新坐标_把手机锁屏设置成任意字体,悄悄给男(女)朋友一个惊喜吧...
- Openstack云计算项目实施 其一(安装环境)
- 吴恩达深度学习视频-中英字幕
- 人的成熟不是年龄,而是懂得了放弃。Python_China的博客
- 基于java的小额支付管理平台
- 间接寻址储存的线性表—基本操作实现
- 【清华大学】操作系统 陈渝 Part4 ——物理内存管理 之 非连续内存分配
- [导入]关于Gmail无法链接的解决方法。
- 当SaaS遇上私域流量,小牛叮当如何做好B端服务?
- 【Python】​​​​​​​turtle八边形绘制
- 哪位有利用matlab中的s函数编写的光伏系统mppt仿真程序,Simulink的MPPT的S函数程序...
- JavaSwing_3.5: JLayeredPane(层级面板)
- JAVA EE Apache Zookeeper / Google Chubby
- BigCommerce vs WooCommerce –哪个更好? (比较)
- CactiEZ10.1 不出图诡异故障排查
热门文章
- 反需求函数和边际收益_边际收益和需求价格弹性_微观经济学
- 微波射频学习笔记22-------场效应管(MOS管)
- java8 新特性精心整理(全)——新 Date/Time API
- 雷军释疑卸任小米子公司法人背后:企业家需被更宽容对待
- 【转】通信人必看之区别:S/N,C/N,Eb/N0,Ec/N0,Es/N0
- 洛谷P1033自由落体题解--zhengjun
- 【李超线段树】BZOJ3165 [Heoi2013]Segment
- K线类型识别—单K线之同价线
- html背景音乐怎么设置音量,视频中加背景音乐,怎么能设置背景音乐的音量呢背景音乐小于原视频声音...
- 重庆职高计算机专业高考,重庆2017高考高职对口本科计算机类分数线