本帖最后由 qebabe 于 2018-3-9 14:13 编辑
之前搭建的天猫精灵后台,与ha对接后,一个空间位置只允许出现一个传感器。比如:设置好查询客厅传感器的温度,就不能再给客厅传感器添加像湿度之类的其他查询信息。但是翻看过天猫精灵的文档之后发现:
{
"properties":[
{
"name":"powerstate", // 电源状态
"value":"on"
},
{
"name":"color",
"value":"Red"
},
{
"name":"temperature",
"value":"27" //标准单位 摄氏度
},{
"name":"humidity",
"value":"20"
},{
"name":"windspeed",
"value":"2" // 1对应 1档, 2对应2档, 3 对应 3档
},{
"name":"humidity",
"value":"23"
},{
"name":"pm2.5",
"value":"20"
} ,{
"name":"direction", // 摆向方向
"value":"left"
} ,{
"name":"angle", // 角度
"value":"60"
}
],
"header":{
"namespace":"AliGenie.Iot.Device.Query",
"name":"QueryResponse",
"messageId":"1bd5d003-31b9-476f-ad03-71d471922820",
"payLoadVersion":1
},
"payload":{
"deviceId":"34234"
}
}
复制代码
只要把传感器的所有查询信息全部提交是可以的。
所以,天猫精灵需要的是一个设备有好多属性,而HA是一个设备只有一个属性。那么解决办法就是在自己搭建的天猫精灵后台虚拟一个设备,把这个设备添加给天猫精灵,而这个设备又包含HA中多个传感器设备。
像这样:
这样发起查询设备状态的请求时,天猫精灵会向后台请求查询传感器(我们虚拟的设备)的状态。收到请求后,后台会从数据库里查询我们设置的这个虚拟设备包含哪些HA中的子设备,然后分别获取这些子设备的状态。然后组合成一个也就是我们虚拟设备的状态,返回给天猫精灵,这样的话,我们就以查询同一位置(zone)的传感器的种状态了。
开始:
*本教程的环境是SAE如其他环境请自行修改代码。
*在开始下边的操作之前请确认已经完成了:
1:https://bbs.hassbian.com/thread-2178-1-1.html
2:https://bbs.hassbian.com/thread-2285-1-1.html
这两步!(第二部中上传的代码可用当前文章的代替)
1.首先这次更新需要修改数据库:
请执行SQL,在之前oauth_devices表中插入三列信息,devices、zone 和virtual :
ALTER TABLE `oauth_devices` ADD `devices` TEXT NOT NULL AFTER `jsonData`;
ALTER TABLE `oauth_devices` ADD `virtual` INT NOT NULL DEFAULT '0' AFTER `jsonData`;
ALTER TABLE `oauth_devices` ADD `zone` VARCHAR( 255 ) NOT NULL AFTER `devices`;
复制代码
2.上传代码包:
上传方法请参照:https://bbs.hassbian.com/thread-2285-1-1.html
截图:
优化了一下设备管理界面。
点击添加设备后会有弹出框,选择添加真实设备或虚拟设备。真实设备就是HA中真实存在的(之前添加的那种);虚拟设备是我们虚拟出来的,虚拟设备下只能添加传感器sensor设备。
添加虚拟设备部分:上半部分和真实设备一样,下半部分就是选择HA中的sensor设备与虚拟设备的属性绑定。点击橙色按钮添加属性,点击蓝色按钮保存当前虚拟设备。
本次更新改动的文件:
/aligenies_request.php
/gate.php
/device/index.php
/device/service.php
增加:
/device/addVirtualDevice.php