阅读498 返回首页    go 人物


【原创】新版空调伴侣 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

  上一篇:go 讨论:摇一摇魔方,网关提示连接正常
  下一篇:go 靓号抢购