洋洋洒洒六七千字已经搭进去了,终于把服务器篇写的差不多了,当然小狂不是专业的写手,有些东西写的凑合看吧,只是说明过程,并不修饰言辞,看的舒服就点个赞,不舒服就当学东西了吧。这篇文章我们将完成天猫精灵服务器与我们服务器的对接,进行真机测试,返回我们当前的设备,用以调试。并且能拿到当前的天猫精灵解析的数据,把这篇做完如果要是有相应的硬件知识的话,就可以控制自己的智能设备了。这篇文章的结构将会按照创建一个天猫精灵的智能设备的需求去写。希望大家看的畅快淋漓。
这篇文章主要参考了这两篇文章https://bbs.hassbian.com/forum.p ... B%E7%B2%BE%E7%81%B5和https://bbs.hassbian.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,密码我自己测试没有用到,所以没写,有需要的可以写上密码,然后比较安全