閱讀498 返回首頁    go 小米6 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 靚號搶購