【原創】新版空調伴侶 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