mirror of
https://github.com/mtan93/homebridge.git
synced 2026-03-08 05:31:55 +00:00
init design
This commit is contained in:
12
lib/api.js
12
lib/api.js
@@ -85,6 +85,18 @@ API.prototype.registerAccessory = function(pluginName, accessoryName, constructo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
API.prototype.publishCameraAccessories = function(pluginName, accessories) {
|
||||||
|
for (var index in accessories) {
|
||||||
|
var accessory = accessories[index];
|
||||||
|
if (!(accessory instanceof PlatformAccessory)) {
|
||||||
|
throw new Error(pluginName + " attempt to register an accessory that isn\'t PlatformAccessory!");
|
||||||
|
}
|
||||||
|
accessory._associatedPlugin = pluginName;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.emit('publishCameraAccessories', accessories);
|
||||||
|
}
|
||||||
|
|
||||||
API.prototype.platform = function(name) {
|
API.prototype.platform = function(name) {
|
||||||
|
|
||||||
// if you passed the "short form" name like "Lockitron" instead of "homebridge-lockitron.Lockitron",
|
// if you passed the "short form" name like "Lockitron" instead of "homebridge-lockitron.Lockitron",
|
||||||
|
|||||||
@@ -130,6 +130,14 @@ PlatformAccessory.prototype.updateReachability = function(reachable) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PlatformAccessory.prototype.configureCameraSource = function(cameraSource) {
|
||||||
|
this.cameraSource = cameraSource;
|
||||||
|
for (var index in cameraSource.services) {
|
||||||
|
var service = cameraSource.services[index];
|
||||||
|
this.addService(service);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
PlatformAccessory.prototype._prepareAssociatedHAPAccessory = function () {
|
PlatformAccessory.prototype._prepareAssociatedHAPAccessory = function () {
|
||||||
this._associatedHAPAccessory = new Accessory(this.displayName, this.UUID);
|
this._associatedHAPAccessory = new Accessory(this.displayName, this.UUID);
|
||||||
this._associatedHAPAccessory._sideloadServices(this.services);
|
this._associatedHAPAccessory._sideloadServices(this.services);
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ var PlatformAccessory = require("./platformAccessory").PlatformAccessory;
|
|||||||
var BridgeSetupManager = require("./bridgeSetupManager").BridgeSetupManager;
|
var BridgeSetupManager = require("./bridgeSetupManager").BridgeSetupManager;
|
||||||
var log = require("./logger")._system;
|
var log = require("./logger")._system;
|
||||||
var Logger = require('./logger').Logger;
|
var Logger = require('./logger').Logger;
|
||||||
|
var mac = require("./util/mac");
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
@@ -40,6 +41,10 @@ function Server(insecureAccess) {
|
|||||||
this._handleUnregisterPlatformAccessories(accessories);
|
this._handleUnregisterPlatformAccessories(accessories);
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
|
||||||
|
this._api.on('publishCameraAccessories', function(accessories) {
|
||||||
|
this._handlePublishCameraAccessories(accessories);
|
||||||
|
}.bind(this));
|
||||||
|
|
||||||
this._plugins = this._loadPlugins(); // plugins[name] = Plugin instance
|
this._plugins = this._loadPlugins(); // plugins[name] = Plugin instance
|
||||||
this._config = this._loadConfig();
|
this._config = this._loadConfig();
|
||||||
this._cachedPlatformAccessories = this._loadCachedPlatformAccessories();
|
this._cachedPlatformAccessories = this._loadCachedPlatformAccessories();
|
||||||
@@ -97,14 +102,16 @@ Server.prototype._publish = function() {
|
|||||||
info.setCharacteristic(Characteristic.SerialNumber, bridgeConfig.serialNumber);
|
info.setCharacteristic(Characteristic.SerialNumber, bridgeConfig.serialNumber);
|
||||||
|
|
||||||
this._printPin(bridgeConfig.pin);
|
this._printPin(bridgeConfig.pin);
|
||||||
|
|
||||||
|
this._bridge.on('listening', function(port) {
|
||||||
|
log.info("Homebridge is running on port %s.", port);
|
||||||
|
});
|
||||||
|
|
||||||
this._bridge.publish({
|
this._bridge.publish({
|
||||||
username: bridgeConfig.username || "CC:22:3D:E3:CE:30",
|
username: bridgeConfig.username || "CC:22:3D:E3:CE:30",
|
||||||
port: bridgeConfig.port || 51826,
|
|
||||||
pincode: bridgeConfig.pin || "031-45-154",
|
pincode: bridgeConfig.pin || "031-45-154",
|
||||||
category: Accessory.Categories.BRIDGE
|
category: Accessory.Categories.BRIDGE
|
||||||
}, this._allowInsecureAccess);
|
}, this._allowInsecureAccess);
|
||||||
|
|
||||||
log.info("Homebridge is running on port %s.", bridgeConfig.port || 51826);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Server.prototype._loadPlugins = function(accessories, platforms) {
|
Server.prototype._loadPlugins = function(accessories, platforms) {
|
||||||
@@ -165,7 +172,6 @@ Server.prototype._loadConfig = function() {
|
|||||||
config.bridge = {
|
config.bridge = {
|
||||||
"name": "Homebridge",
|
"name": "Homebridge",
|
||||||
"username": "CC:22:3D:E3:CE:30",
|
"username": "CC:22:3D:E3:CE:30",
|
||||||
"port": 51826,
|
|
||||||
"pin": "031-45-154"
|
"pin": "031-45-154"
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -454,6 +460,21 @@ Server.prototype._handleUnregisterPlatformAccessories = function(accessories) {
|
|||||||
this._updateCachedAccessories();
|
this._updateCachedAccessories();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Server.prototype._handlePublishCameraAccessories = function(accessories) {
|
||||||
|
for (var index in accessories) {
|
||||||
|
var accessory = accessories[index];
|
||||||
|
|
||||||
|
accessory._prepareAssociatedHAPAccessory();
|
||||||
|
var hapAccessory = accessory._associatedHAPAccessory;
|
||||||
|
|
||||||
|
hapAccessory.publish({
|
||||||
|
username: mac.generate(accessory.uuid),
|
||||||
|
pincode: bridgeConfig.pin || "031-45-154",
|
||||||
|
category: accessory.category
|
||||||
|
}, this._allowInsecureAccess);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Server.prototype._updateCachedAccessories = function() {
|
Server.prototype._updateCachedAccessories = function() {
|
||||||
var serializedAccessories = [];
|
var serializedAccessories = [];
|
||||||
|
|
||||||
|
|||||||
18
lib/util/mac.js
Normal file
18
lib/util/mac.js
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
var crypto = require('crypto');
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
generate: generate
|
||||||
|
}
|
||||||
|
|
||||||
|
function generate(data) {
|
||||||
|
var sha1sum = crypto.createHash('sha1');
|
||||||
|
sha1sum.update(data);
|
||||||
|
var s = sha1sum.digest('hex');
|
||||||
|
var i = -1;
|
||||||
|
return 'xx:xx:xx:xx:xx:xx'.replace(/[x]/g, function(c) {
|
||||||
|
i += 1;
|
||||||
|
return s[i];
|
||||||
|
}).toUpperCase();
|
||||||
|
};
|
||||||
@@ -20,13 +20,13 @@
|
|||||||
"homebridge": "bin/homebridge"
|
"homebridge": "bin/homebridge"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.12.0"
|
"node": ">=4.3.2"
|
||||||
},
|
},
|
||||||
"preferGlobal": true,
|
"preferGlobal": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"chalk": "^1.1.1",
|
"chalk": "^1.1.1",
|
||||||
"commander": "2.8.1",
|
"commander": "2.8.1",
|
||||||
"hap-nodejs": "0.4.0",
|
"hap-nodejs": "0.4.4",
|
||||||
"semver": "5.0.3",
|
"semver": "5.0.3",
|
||||||
"node-persist": "^0.0.8"
|
"node-persist": "^0.0.8"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user