本帖最后由 3guoyangyang7 于 2017-12-12 22:52 编辑
洋洋洒洒六七千字已经搭进去了,终于把服务器篇写的差不多了,当然小狂不是专业的写手,有些东西写的凑合看吧,只是说明过程,并不修饰言辞,看的舒服就点个赞,不舒服就当学东西了吧。这篇文章我们将完成天猫精灵服务器与我们服务器的对接,进行真机测试,返回我们当前的设备,用以调试。并且能拿到当前的天猫精灵解析的数据,把这篇做完如果要是有相应的硬件知识的话,就可以控制自己的智能设备了。这篇文章的结构将会按照创建一个天猫精灵的智能设备的需求去写。希望大家看的畅快淋漓。 这篇文章主要参考了这两篇文章https://bbs.has***ian.com/forum.p ... B%E7%B2%BE%E7%81%B5和https://bbs.has***ian.com/thread-1900-1-1.html。 对于不熟悉PHP开发的亲们来说,小狂提供一个PHP语法和函数的查询网站,挺好用的http://php.net/manual/zh/function.md5.php。 一、开发者网关地址
我们在天猫精灵的一项设置里需要填写开发者网管地址,那个是天猫精灵在得到第三方硬件平台认证后,post协议的地址,由此我们就根据POST的协议,拿到控制信息以及返回响应信息。我们在/var/www/html中建一个gate.php文件,用于解析POST过来的协议,先放一个天猫精灵的协议地址,http://doc-bot.tmall.com/docs/do ... Id=107454&docType=1,然后小狂会一点一点解析gate.php中的内容。
在文件的开头,每次获得执行这段文本前就会生成一个独一无二的uuid,这个就是协议文本中的
用于天猫平台跟踪返回指令用的,在最后也会告诉你这个,然后出错通过提供messageID进行天猫精灵服务端的判别
图中1标号是用来获取POST过来的数据,这个是PHP获取http POST获取到的数据的一种方式,当然还有其他方式,大概有3种吧,感兴趣的可以去查一下。图的2标号是把获得到的数据进行json解码放到obj中,json是http传送的一种格式。3标号是获取本次请求的messageID值,会回传到天猫服务器的。
这一段代码用来回复天猫服务器我们的设备都有哪些,我们可以参考一下天猫精灵的协议说明,这一段代码是天猫服务器POST后要响应的数据。
所有表格中要求返回的数据都必须返回,有一个不对,都会导致天猫精灵控制的时候找不到对应的设备。所以一定要好好填。图中1标号中说明经协议是设备发现协议,2中的东西基本都固定了,%s那个会在后边利用sprintf来实现messeid的复制,3标号中的乱码是因为我用的是中文,不用管,直接用了别人的设备信息,所以设备信息没有改,协议中有说明不再解释,主要说说5,在图上5可以看出设备支持全部信息查询,温度查询、湿度查询和开关状态查询,这个是固定的,由协议指定,可以是操作类中的属性也可以是查询类中的属性,这个不能乱填,决定了天猫精灵语义识别后返回的信息,填写的时候一定要慎重。再放一个灯具的设备返回信息。
下图所示为设备控制协议的详细内容和解析,只截出打开指令协议的详细内容,其他的协议内容于此类似
图中标号1说明天猫云服务器发送的是控制指令,标号3返回正确的响应,标号4返回错误的响应,这些参数都是有device_control解析处理后传回来,标号2用来解析控制指令,device_control在aligenies_request.php中就是对发送过来的设备名,设备动作,查看天猫POST过来的数据包是否正确,如果正确给出正确的响应,如果不正确给出错误的响应,不再列举具体的解析协议,只给出处理的过程。
1是返回错误指令的设备名等信息,标号2把正确控制信息进行json格式化,标号3是把这些信息POST发送给另外一个php文件用于保存给硬件设备进行获取,标号4返回正确指令的设备名等信息,这些信息用于格式化输出POST响应数据。 下图为设备响应指令的详细协议以及协议的解析和响应
协议的解析和设备控制协议的解析采用的思想差不多,只不过查询和控制这两个过程是正好相反的。过程控制是主动存储数据,然后又硬件设备读取,查询是硬件设备返回数据存储到服务器上在查询的时候读取。就这样,具体的代码看aligenies_request.php中的内容吧,这里会调用存储读取的具体PHP,这个URL存储在homeassistant_conf.php中,这个可以改成各位URL,密码我自己测试没有用到,所以没写,有需要的可以写上密码,然后比较安全
到这里所有的文件部署完毕,我们现在天猫精灵上新建一个智能家居,用于真机测试。 二、新加技能
其实这个地方就比较简单了,我们所有准备的东西都完事了之后,具体的流程信息如下图所示
首先你要进入阿里语音的开发者平台,给出如下链接地址https://open.bot.tmall.com/。
用淘宝账号登陆后,电机右上角的进入控制台
点击添加新技能
技能名称随便写,技能类型选择标准技能,技能模板选择只能家居,技能描述随便填,这个是我的台灯的信息
然后填写最重要的服务设置,服务器(二)也说了,这个是最重要的设置
授权连接指向你域名下的authorize.php文件,Client ID 是让记住的添加的MySQL中的ID,Client Secret是在MySQL中添加的密码,Access Token URL用于指定域名下的token.php文件,开发者网管地址,用于指定你域名下的gate.php文件。到此我们所有的文件准备完成,配置完成,进行真机测试。 三、真机测试
点击测试验证界面,点击右侧的开启测试
点击后,然后再点击账户配置
然后点选yes进行授权
如果在这个阶段你点了账号配置,没有任何反应,可能是你在配置的过程中出现了问题,这个时候你可以使用F12查看错误信息,根据错误状态进行改正即可,争取后会出现如下所示界面,由于这个设备的信息都没更改,所以跟参考文章中差不多。
同时你会发现,你天猫精灵APP通账号目录下也会出现这个界面,如下图所示
这个时候你可以尝试使用语音控制你的天猫精灵,比如“天猫精灵,打开台灯”,如果天猫精灵响应你回答“正在为您打开台灯”,则证明协议对接完成。 又到了这篇文章的尾声了,在这片文章了我们对天猫精灵进行了解析,然后分析了协议和解析的内容,但是没有对怎么控制具体的设备进行说明,这是因为我们还有一篇文章叫硬件控制篇啊,我们具体的怎么把得到的数据发送给硬件设备,怎么把硬件设备的状态信息上传给天猫精灵的服务端,让它用声音表达出来,就是下篇文章的主要内容。欲知后事如何,请听下回分解 郑重声明:码字不易啊,请各位看官转载时注明出处,谢谢支持。
跟着小狂玩天猫精灵智能设备对接其他篇请移步导航篇 https://bbs.elecfans.com/jishu_1471090_1_1.html
|