homebridge
Advanced tools
Comparing version 0.3.4 to 0.4.0
@@ -23,3 +23,3 @@ var inherits = require('util').inherits; | ||
// expose the homebridge API version | ||
this.version = 2.0; | ||
this.version = 2.1; | ||
@@ -89,2 +89,14 @@ // expose the User class methods to plugins to get paths. Example: homebridge.user.storagePath() | ||
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) { | ||
@@ -91,0 +103,0 @@ |
@@ -133,4 +133,17 @@ var uuid = require("hap-nodejs").uuid; | ||
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); | ||
if (this.cameraSource) { | ||
this._associatedHAPAccessory.configureCameraSource(this.cameraSource); | ||
} | ||
this._associatedHAPAccessory._sideloadServices(this.services); | ||
@@ -137,0 +150,0 @@ this._associatedHAPAccessory.category = this.category; |
@@ -18,2 +18,3 @@ var path = require('path'); | ||
var Logger = require('./logger').Logger; | ||
var mac = require("./util/mac"); | ||
@@ -44,2 +45,6 @@ 'use strict'; | ||
this._api.on('publishCameraAccessories', function(accessories) { | ||
this._handlePublishCameraAccessories(accessories); | ||
}.bind(this)); | ||
this._plugins = this._loadPlugins(); // plugins[name] = Plugin instance | ||
@@ -52,2 +57,3 @@ this._config = this._loadConfig(); | ||
this._configurablePlatformPlugins = {}; | ||
this._publishedCameras = {}; | ||
this._setupManager = new BridgeSetupManager(); | ||
@@ -93,12 +99,22 @@ this._setupManager.on('newConfig', this._handleNewConfig.bind(this)); | ||
var bridgeConfig = this._config.bridge || {}; | ||
var info = this._bridge.getService(Service.AccessoryInformation); | ||
if (bridgeConfig.manufacturer) | ||
info.setCharacteristic(Characteristic.Manufacturer, bridgeConfig.manufacturer); | ||
if (bridgeConfig.model) | ||
info.setCharacteristic(Characteristic.Model, bridgeConfig.model); | ||
if (bridgeConfig.serialNumber) | ||
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); | ||
} | ||
@@ -157,2 +173,4 @@ | ||
if (!fs.existsSync(configPath)) { | ||
log.warn("config.json (%s) not found.", configPath); | ||
var config = {}; | ||
@@ -163,3 +181,2 @@ | ||
"username": "CC:22:3D:E3:CE:30", | ||
"port": 51826, | ||
"pin": "031-45-154" | ||
@@ -453,2 +470,30 @@ }; | ||
Server.prototype._handlePublishCameraAccessories = function(accessories) { | ||
var accessoryPin = (this._config.bridge || {}).pin || "031-45-154"; | ||
for (var index in accessories) { | ||
var accessory = accessories[index]; | ||
accessory._prepareAssociatedHAPAccessory(); | ||
var hapAccessory = accessory._associatedHAPAccessory; | ||
var advertiseAddress = mac.generate(accessory.UUID); | ||
if (this._publishedCameras[advertiseAddress]) { | ||
throw new Error("Camera accessory %s experienced an address collision.", accessory.displayName); | ||
} else { | ||
this._publishedCameras[advertiseAddress] = accessory; | ||
} | ||
hapAccessory.on('listening', function(port) { | ||
log.info("%s is running on port %s.", accessory.displayName, port); | ||
}); | ||
hapAccessory.publish({ | ||
username: advertiseAddress, | ||
pincode: accessoryPin, | ||
category: accessory.category | ||
}, this._allowInsecureAccess); | ||
} | ||
} | ||
Server.prototype._updateCachedAccessories = function() { | ||
@@ -455,0 +500,0 @@ var serializedAccessories = []; |
{ | ||
"name": "homebridge", | ||
"description": "HomeKit support for the impatient", | ||
"version": "0.3.4", | ||
"version": "0.4.0", | ||
"scripts": { | ||
@@ -23,3 +23,3 @@ "dev": "DEBUG=* ./bin/homebridge -D -P example-plugins/ || true" | ||
"engines": { | ||
"node": ">=0.12.0" | ||
"node": ">=4.3.2" | ||
}, | ||
@@ -30,3 +30,3 @@ "preferGlobal": true, | ||
"commander": "2.8.1", | ||
"hap-nodejs": "0.3.2", | ||
"hap-nodejs": "0.4.4", | ||
"semver": "5.0.3", | ||
@@ -33,0 +33,0 @@ "node-persist": "^0.0.8" |
@@ -32,4 +32,8 @@ | ||
sudo npm install -g homebridge | ||
sudo npm install -g --unsafe-perm homebridge | ||
You may need to use the `--unsafe-perm` flag if you receive an error similar to this: | ||
gyp WARN EACCES user "root" does not have permission to access the dev dir "/root/.node-gyp/5.5.0" | ||
Now you should be able to run Homebridge: | ||
@@ -49,5 +53,5 @@ | ||
**NOTE**: Your `config.json` file MUST live in your home directory inside `.homebridge`. The full error message will contain the exact path where your config is expected to be found. | ||
**NOTE**: Your `config.json` file MUST be inside of `.homebridge`, which is inside of your home folder. On MacOS and Linux, the full path for your `config.json` would be `~/.homebridge/config.json`. Any error messages will contain the exact path where your config is expected to be found. | ||
**REALLY IMPORTANT**: You must use a "plain text" editor to create or modify `config.json`. Do NOT use apps like TextEdit on Mac or Wordpad on Windows; these apps will corrupt the formatting of the file in hard-to-debug ways. I suggest using the free [Atom text editor](http://atom.io). | ||
**REALLY IMPORTANT**: You must use a "plain text" editor to create or modify `config.json`. Do NOT use apps like TextEdit on Mac or Wordpad on Windows. Apps like these will corrupt the formatting of the file in hard-to-debug ways, making improper `"` signs is an example. I suggest using the free [Atom text editor](http://atom.io). | ||
@@ -84,12 +88,8 @@ Once you've added your config file, you should be able to run Homebridge again: | ||
HomeKit is actually not an app; it's a "database" similar to HealthKit and PassKit. But where HealthKit has the companion _Health_ app and PassKit has _Passbook_, Apple has supplied no app for managing your HomeKit database (at least [not yet](http://9to5mac.com/2015/05/20/apples-planned-ios-9-home-app-uses-virtual-rooms-to-manage-homekit-accessories/)). However, the HomeKit API is open for developers to write their own apps for adding devices to HomeKit. | ||
HomeKit itself is actually not an app; it's a "database" similar to HealthKit and PassKit. Where HealthKit has the companion _Health_ app and PassKit has _Passbook_, HomeKit has the _Home_ app, introduced with iOS 10. | ||
Fortunately, there are now a few apps in the App Store that can manage your HomeKit devices. The most comprehensive one I've used is [MyTouchHome](https://itunes.apple.com/us/app/mytouchhome/id965142360?mt=8&at=11lvmd&ct=mhweb) which costs $2. | ||
If you are a member of the iOS developer program, you might also find Apple's [HomeKit Catalog](https://developer.apple.com/library/ios/samplecode/HomeKitCatalog/Introduction/Intro.html) app to be useful, as it provides straightforward and comprehensive management of all HomeKit database "objects". | ||
There are also some free apps that work OK. Try [Insteon+](https://itunes.apple.com/US/app/id919270334?mt=8) or [Lutron](https://itunes.apple.com/us/app/lutron-app-for-caseta-wireless/id886753021?mt=8) or a number of others. | ||
Using the Home app (or most other HomeKit apps), you should be able to add the single accessory "Homebridge", assuming that you're still running Homebridge and you're on the same Wifi network. Adding this accessory will automatically add all accessories and platforms defined in `config.json`. | ||
If you are a member of the iOS developer program, I highly recommend Apple's [HomeKit Catalog](https://developer.apple.com/library/ios/samplecode/HomeKitCatalog/Introduction/Intro.html) app, as it is reliable and comprehensive and free (and open source). | ||
Once you've gotten a HomeKit app running on your iOS device, it should "discover" the single accessory "Homebridge", assuming that you're still running Homebridge and you're on the same Wifi network. Adding this accessory will automatically add all accessories and platforms defined in `config.json`. | ||
When you attempt to add Homebridge, it will ask for a "PIN code". The default code is `031-45-154` (but this can be changed, see `config-sample.json`). | ||
@@ -96,0 +96,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
92432
17
1407
+ Addedbindings@1.5.0(transitive)
+ Addedcurve25519-n@1.5.0(transitive)
+ Addeded25519@0.0.4(transitive)
+ Addedfile-uri-to-path@1.0.0(transitive)
+ Addedhap-nodejs@0.4.4(transitive)
+ Addedip@1.1.9(transitive)
- Removedhap-nodejs@0.3.2(transitive)
Updatedhap-nodejs@0.4.4