498
人物
【原创】新版空调伴侣 lumi.acpartner.v2 局域网开放协议密码获取方法
最近在弄语音控制智能家居设备的业余小玩意,看到网上文章说智能家庭的一代网关不支持局域网通讯协议,Homekit之类的开放应用,说要二代才支持,看到米家的空调伴侣只要169,相比149的二代网关除了少个灯,似乎一切都很完美还多了红外遥控和功耗统计,没多想就入了空调伴侣。
结果到手一试domoticz看到里面要填入小米二代网关的通讯密码立即傻眼,再到论坛里一查:
https://bbs.xiaomi.cn/t-13481256-1-o1
https://bbs.xiaomi.cn/t-13524995
所有人都在说绿米不开放空调伴侣的局域网通讯密码,似乎完全没有可能了。。。。
查看homebridge里面有一个homebridge-mi-ac-partner插件,可以实现把空调伴侣变成苹果的HomeKit里的一个恒温器实现空调温度调节控制,但还是没提到它作为zigbee网关的用法。
查看了它的代码,发现它不是用网关的标准密码的方式来通讯,而是用token,而通过狂点“关于“里的版本号,空调伴侣还是能够获取到token的,所以回到它的核心miio库,查看它支持的设备型号里,有支持空调伴侣lumi.acpartner.v1,通过扫描,发现米家空调伴侣是lumi.acpartner.v2,不支持就被识别成了generic设备了(同样的还有能被扫描出来但还不支持的小方摄像头和红外万能遥控,需要自己破解协议才可能支持),简单的修改了一下,强制将空调伴侣识别成网关,奇迹发生了,所有的网关子设备全部正常列出来了,其中还包括了局域网通讯密码和端口号:
gateway lumi.acpartner.v2
[ Switch { 开关1号
domain: null,
_events: {},
_eventsCount: 0,
_maxListeners: undefined,
model: 'lumi.switch',
id: '158d0000f1fad4',
type: 'controller',
capabilities: [],
_properties: {},
_propertiesToMonitor: [],
_propertyDefinitions: {},
_parent:
Gateway {
domain: null,
_events: {},
_eventsCount: 0,
_maxListeners: undefined,
id: '56582789',
type: 'gateway',
model: 'lumi.acpartner.v2',
capabilities: [Object],
address: '172.21.1.221',
port: 54321, 局域网通讯端口
writeOnly: false,
packet: [Object],
socket: [Object],
_id: 5,
_promises: {},
_hasFailedToken: false,
_properties: [Object],
_propertiesToMonitor: [Object],
_propertyDefinitions: [Object],
_reversePropertyDefinitions: [Object],
_loadProperties: [Function: bound _loadProperties],
management: [Object],
debug: [Object],
_devices: [Object],
_monitorInterval: 60000,
_propertyMonitor: [Object],
_lastToken: 1502727981343,
_developerKey: 'qxogmesolozte66w', 你们要找的局域网通讯密码
devApi: [Object],
setRGB: [Function],
setBrightness: [Function],
_deviceListTimer: [Object] },
management: SubDeviceManagement { _device: [Circular] },
debug:
{ [Function: debug]
namespace: 'miio.device.56582789.158d0000f1fad4',
enabled: false,
useColors: false,
color: 5,
inspectOpts: {} } },
SensorHT { 温湿度传感器
domain: null,
_events: {},
_eventsCount: 0,
_maxListeners: undefined,
model: 'lumi.sensor_ht',
id: '158d0000f84b6d',
type: 'sensor',
capabilities: [ 'sensor', 'temperature', 'humidity' ],
_properties: { temperature: 29.71, humidity: 79.02 }, 温度值,湿度值
_propertiesToMonitor: [ 'temperature', 'humidity' ],
_propertyDefinitions: { temperature: [Object], humidity: [Object] },
_parent:
………………
更多数据请看附件
下载附件空调伴侣设备dump数据.txt( 13.01 KB )
我的所有网关子设备:一个zigbee插座、温湿度、两个按钮开关、一个人体传感器、一个魔方控制器都显示出来了,理论上如果是熟悉原来网关的相关代码的人,应该很容易集成进homekit插件、Domoticz或者homebridge平台上,我个人暂时还只是初步接触,还未实际验证。大家可以留言讨论。
另外,放上探测局域网内所有能识别的米家设备的nodejs代码(包括空调伴侣和网关二代的子设备):
注意:下面代码依赖npm install -g miio,并且需要手工个性miio库的node_modules\miio\lib\models.js中的这段:
'lumi.gateway.v3': Gateway,
'lumi.acpartner.v1': Gateway,
'lumi.acpartner.v2': Gateway,
'qmi.powerstrip.v1': PowerStrip,
'zimi.powerstrip.v2': PowerStrip,
添加lumi.acpartner.v2为gateway网关类型设备即可。
代码:
const miio = require('miio');
const browser = miio.browse({
cacheTime: 300 // 5 minutes. Default is 1800 seconds (30 minutes)
});
const devices = {};
browser.on('available', reg => {
if(! reg.token) {
console.log(reg.id, 'hides its token');
return;
}
miio.device(reg)
.then(device => {
devices[reg.id] = device;
console.log(device.capabilities,
device.type, device._properties)
//console.log(device);
/*console.log(reg.id, device.id, device.type,
device.model, device.capabilities,
device.address, device._properties);
*/
})
.catch(function(e){
console.log(e);
});
});
browser.on('unavailable', reg => {
const device = devices[reg.id];
if(! device) return;
device.destroy();
delete devices[reg.id];
})
setInterval(function(){
console.log("dump devices list:", Object.keys(devices).length);
for(i in devices){
console.log(devices[i].type, devices[i].model);
if(devices[i].type == "gateway"){
console.log(devices[i].devices);
}
}
}, 5000);
最后更新:2017-08-15 01:20:17