init design

This commit is contained in:
Khaos Tian
2016-09-26 13:01:29 -07:00
parent ceec4c74fd
commit c89ff97ac5
5 changed files with 65 additions and 6 deletions

View File

@@ -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) {
// if you passed the "short form" name like "Lockitron" instead of "homebridge-lockitron.Lockitron",

View File

@@ -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 () {
this._associatedHAPAccessory = new Accessory(this.displayName, this.UUID);
this._associatedHAPAccessory._sideloadServices(this.services);

View File

@@ -15,6 +15,7 @@ var PlatformAccessory = require("./platformAccessory").PlatformAccessory;
var BridgeSetupManager = require("./bridgeSetupManager").BridgeSetupManager;
var log = require("./logger")._system;
var Logger = require('./logger').Logger;
var mac = require("./util/mac");
'use strict';
@@ -40,6 +41,10 @@ function Server(insecureAccess) {
this._handleUnregisterPlatformAccessories(accessories);
}.bind(this));
this._api.on('publishCameraAccessories', function(accessories) {
this._handlePublishCameraAccessories(accessories);
}.bind(this));
this._plugins = this._loadPlugins(); // plugins[name] = Plugin instance
this._config = this._loadConfig();
this._cachedPlatformAccessories = this._loadCachedPlatformAccessories();
@@ -97,14 +102,16 @@ Server.prototype._publish = function() {
info.setCharacteristic(Characteristic.SerialNumber, bridgeConfig.serialNumber);
this._printPin(bridgeConfig.pin);
this._bridge.on('listening', function(port) {
log.info("Homebridge is running on port %s.", port);
});
this._bridge.publish({
username: bridgeConfig.username || "CC:22:3D:E3:CE:30",
port: bridgeConfig.port || 51826,
pincode: bridgeConfig.pin || "031-45-154",
category: Accessory.Categories.BRIDGE
}, this._allowInsecureAccess);
log.info("Homebridge is running on port %s.", bridgeConfig.port || 51826);
}
Server.prototype._loadPlugins = function(accessories, platforms) {
@@ -165,7 +172,6 @@ Server.prototype._loadConfig = function() {
config.bridge = {
"name": "Homebridge",
"username": "CC:22:3D:E3:CE:30",
"port": 51826,
"pin": "031-45-154"
};
@@ -454,6 +460,21 @@ Server.prototype._handleUnregisterPlatformAccessories = function(accessories) {
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() {
var serializedAccessories = [];

18
lib/util/mac.js Normal file
View 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();
};

View File

@@ -20,13 +20,13 @@
"homebridge": "bin/homebridge"
},
"engines": {
"node": ">=0.12.0"
"node": ">=4.3.2"
},
"preferGlobal": true,
"dependencies": {
"chalk": "^1.1.1",
"commander": "2.8.1",
"hap-nodejs": "0.4.0",
"hap-nodejs": "0.4.4",
"semver": "5.0.3",
"node-persist": "^0.0.8"
}