mirror of
https://github.com/mtan93/homebridge.git
synced 2026-03-08 05:31:55 +00:00
Compare commits
15 Commits
master
...
osx-launch
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
febed4cae6 | ||
|
|
17f13a51a4 | ||
|
|
2b11db4560 | ||
|
|
cf885b6d29 | ||
|
|
267470c871 | ||
|
|
ae2d53262f | ||
|
|
241b22db87 | ||
|
|
8d94366e3c | ||
|
|
950e6a8211 | ||
|
|
f3cab9a529 | ||
|
|
25981deac4 | ||
|
|
6540c25baf | ||
|
|
6f71faf355 | ||
|
|
8131f6936e | ||
|
|
ac0c967ec0 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -15,6 +15,6 @@ npm-debug.log
|
|||||||
config.json
|
config.json
|
||||||
config.test.json
|
config.test.json
|
||||||
persist/
|
persist/
|
||||||
|
log/
|
||||||
|
|
||||||
.AppleDouble
|
.AppleDouble
|
||||||
|
|||||||
30
README.md
30
README.md
@@ -60,23 +60,17 @@ First, clone this repo:
|
|||||||
|
|
||||||
$ git clone https://github.com/nfarina/homebridge.git
|
$ git clone https://github.com/nfarina/homebridge.git
|
||||||
$ cd homebridge
|
$ cd homebridge
|
||||||
$ npm install
|
$ script/bootstrap
|
||||||
|
|
||||||
**Note**: You'll need to have NodeJS version 0.12.x or better installed for required submodule `HAP-NodeJS` to load.
|
**Node**: You'll need to have NodeJS version 0.12.x or better installed for required submodule `HAP-NodeJS` to load as well as the `forever` node package..
|
||||||
|
|
||||||
|
The server won't do anything until you've edited your `config.json` file containing your home devices (or _accessories_ in HomeKit parlance) or platforms you wish to make available to iOS. The sample configuration has been copied for you into `config.json`. It includes declarations for all supported accessories and platforms. Remove everything except for the accessories and platforms you'll be using.
|
||||||
|
|
||||||
Now you should be able to run the homebridge server:
|
Now you should be able to run the homebridge server:
|
||||||
|
|
||||||
$ cd homebridge
|
$ cd homebridge
|
||||||
$ npm run start
|
$ script/server
|
||||||
Starting Homebridge server...
|
|
||||||
Couldn't find a config.json file [snip]
|
|
||||||
|
|
||||||
The server won't do anything until you've created a `config.json` file containing your home devices (or _accessories_ in HomeKit parlance) or platforms you wish to make available to iOS. You can start by copying and modifying the included `config-sample.json` file which includes declarations for all supported accessories and platforms.
|
|
||||||
|
|
||||||
Once you've added your devices and/or platforms, you should be able to run the server again and see them initialize:
|
|
||||||
|
|
||||||
$ npm run start
|
|
||||||
Starting Homebridge server...
|
Starting Homebridge server...
|
||||||
Loading 6 accessories...
|
Loading 6 accessories...
|
||||||
[Speakers] Initializing 'Sonos' accessory...
|
[Speakers] Initializing 'Sonos' accessory...
|
||||||
@@ -89,6 +83,22 @@ Once you've added your devices and/or platforms, you should be able to run the s
|
|||||||
|
|
||||||
Your server is now ready to receive commands from iOS.
|
Your server is now ready to receive commands from iOS.
|
||||||
|
|
||||||
|
# Installing Homebridge to Run at Boot and in the Background
|
||||||
|
Homebridge can be run at boot and in the background on OS X and any Linux variation that uses SysVinit (/etc/init.d scripts) to launch services. To install homebridge as
|
||||||
|
a service:
|
||||||
|
|
||||||
|
$ script/install
|
||||||
|
|
||||||
|
It should load for you in the background. You can find logs in `log/logs.log`. To uninstall it you can run `script/uninstall`. To restart it you can run `script/restart`.
|
||||||
|
|
||||||
|
# Upgrading
|
||||||
|
|
||||||
|
If you want to upgrade homebridge, simply run:
|
||||||
|
|
||||||
|
$ script/upgrade
|
||||||
|
|
||||||
|
It will pull the newest version from the repo on GitHub and restart itself.
|
||||||
|
|
||||||
# Adding your devices to iOS
|
# Adding your devices to iOS
|
||||||
|
|
||||||
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 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.
|
||||||
|
|||||||
33
script/bootstrap
Executable file
33
script/bootstrap
Executable file
@@ -0,0 +1,33 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if ! test $(which forever)
|
||||||
|
then
|
||||||
|
echo
|
||||||
|
echo "!!!!"
|
||||||
|
echo "You don't have forever installed. You need to install it first."
|
||||||
|
echo
|
||||||
|
echo "Just install it with this command: "
|
||||||
|
echo 'sudo npm install forever -g'
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p log
|
||||||
|
|
||||||
|
echo "Installing packages..."
|
||||||
|
if [[ "$OSTYPE" == "linux*" ]]; then
|
||||||
|
echo "This might take a while on a Raspberry Pi..."
|
||||||
|
fi
|
||||||
|
npm install > /dev/null 2>&1
|
||||||
|
|
||||||
|
if [ ! -f config.json ]
|
||||||
|
then
|
||||||
|
echo
|
||||||
|
echo "==> Creating your config. Please edit config.json."
|
||||||
|
echo
|
||||||
|
cp config-sample.json config.json
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Finished setting up Homebridge! run it with script/server or install it with script/install."
|
||||||
44
script/install
Executable file
44
script/install
Executable file
@@ -0,0 +1,44 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "Installing Homebridge..."
|
||||||
|
|
||||||
|
APP_PATH=`pwd`
|
||||||
|
FOREVER_PATH=`which forever || true`
|
||||||
|
USER_NAME=`whoami`
|
||||||
|
|
||||||
|
|
||||||
|
if [[ "$OSTYPE" == "linux*" ]]; then
|
||||||
|
## install for linux
|
||||||
|
|
||||||
|
# copy SysVinit script to the correct path.
|
||||||
|
sudo cp startup/homebridge /etc/init.d/homebridge
|
||||||
|
# set exec permissions on script.
|
||||||
|
sudo chmod +x /etc/init.d/homebridge
|
||||||
|
|
||||||
|
# Set the current path for where the app lives.
|
||||||
|
sudo sed -i '' -e "s#%PATH%#$APP_PATH#g" /etc/init.d/homebridge
|
||||||
|
# Set the path for where the forever lives.
|
||||||
|
sudo sed -i '' -e "s#%FOREVER_PATH%#$FOREVER_PATH#g" /etc/init.d/homebridge
|
||||||
|
|
||||||
|
# Start it.
|
||||||
|
sudo /etc/init.d/homebridge start
|
||||||
|
|
||||||
|
# tell it to launch at boot
|
||||||
|
sudo update-rc.d homebridge defaults
|
||||||
|
|
||||||
|
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||||
|
## install for OS X
|
||||||
|
|
||||||
|
# copy template plist to the correct path.
|
||||||
|
cp startup/org.homebridge.plist ~/Library/LaunchAgents/org.homebridge.plist
|
||||||
|
|
||||||
|
# Set the current user for the script to run as.
|
||||||
|
sed -i '' -e "s#%USER%#$USER_NAME#g" ~/Library/LaunchAgents/org.homebridge.plist
|
||||||
|
# Set the current path for where the app lives.
|
||||||
|
sed -i '' -e "s#%PATH%#$APP_PATH#g" ~/Library/LaunchAgents/org.homebridge.plist
|
||||||
|
|
||||||
|
# Tell launchd to start it.
|
||||||
|
launchctl load -w -F ~/Library/LaunchAgents/org.homebridge.plist
|
||||||
|
fi
|
||||||
4
script/restart
Executable file
4
script/restart
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
script/uninstall
|
||||||
|
script/install
|
||||||
12
script/server
Executable file
12
script/server
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
FOREVER_PATH=`which forever`
|
||||||
|
|
||||||
|
test -z "$NODE_ENV" &&
|
||||||
|
export NODE_ENV='development'
|
||||||
|
|
||||||
|
if [ "$NODE_ENV" = "development" ]; then
|
||||||
|
$FOREVER_PATH -f startup/forever/development.json
|
||||||
|
else
|
||||||
|
$FOREVER_PATH start startup/forever/production.json
|
||||||
|
fi
|
||||||
22
script/uninstall
Executable file
22
script/uninstall
Executable file
@@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
echo "Uninstalling Homebridge..."
|
||||||
|
# make forever stop the app.
|
||||||
|
forever stop homebridge > /dev/null 2>&1
|
||||||
|
|
||||||
|
if [[ "$OSTYPE" == "linux*" ]]; then
|
||||||
|
## uninstall for linux
|
||||||
|
|
||||||
|
# stop the service.
|
||||||
|
sudo /etc/init.d/homebridge stop
|
||||||
|
|
||||||
|
# remove the service from launching at boot.
|
||||||
|
sudo update-rc.d -f homebridge remove
|
||||||
|
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||||
|
## uninstall for OS X
|
||||||
|
|
||||||
|
# tell launchd to stop the process.
|
||||||
|
launchctl unload ~/Library/LaunchAgents/org.homebridge.plist
|
||||||
|
# remove the launchd script.
|
||||||
|
rm ~/Library/LaunchAgents/org.homebridge.plist
|
||||||
|
fi
|
||||||
8
script/upgrade
Executable file
8
script/upgrade
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
echo "Updating from GitHub..."
|
||||||
|
BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
||||||
|
git pull origin $BRANCH
|
||||||
|
|
||||||
|
npm update
|
||||||
|
|
||||||
|
script/restart
|
||||||
4
startup/forever/development.json
Normal file
4
startup/forever/development.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"append": true,
|
||||||
|
"script": "app.js"
|
||||||
|
}
|
||||||
7
startup/forever/production.json
Normal file
7
startup/forever/production.json
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"uid": "homebridge",
|
||||||
|
"append": true,
|
||||||
|
"script": "app.js",
|
||||||
|
"outFile": "log/logs.log",
|
||||||
|
"errFile": "log/error.log"
|
||||||
|
}
|
||||||
88
startup/homebridge
Normal file
88
startup/homebridge
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
### BEGIN INIT INFO
|
||||||
|
# If you wish the Daemon to be lauched at boot / stopped at shutdown :
|
||||||
|
#
|
||||||
|
# On Debian-based distributions:
|
||||||
|
# INSTALL : update-rc.d scriptname defaults
|
||||||
|
# (UNINSTALL : update-rc.d -f scriptname remove)
|
||||||
|
#
|
||||||
|
# On RedHat-based distributions (CentOS, OpenSUSE...):
|
||||||
|
# INSTALL : chkconfig --level 35 scriptname on
|
||||||
|
# (UNINSTALL : chkconfig --level 35 scriptname off)
|
||||||
|
#
|
||||||
|
# chkconfig: 2345 90 60
|
||||||
|
# Provides: %PATH%/app.js
|
||||||
|
# Required-Start: $remote_fs $syslog
|
||||||
|
# Required-Stop: $remote_fs $syslog
|
||||||
|
# Default-Start: 2 3 4 5
|
||||||
|
# Default-Stop: 0 1 6
|
||||||
|
# Short-Description: forever running %PATH%/app.js
|
||||||
|
# Description: %PATH%/app.js
|
||||||
|
### END INIT INFO
|
||||||
|
#
|
||||||
|
# initd a node app
|
||||||
|
# Based on a script posted by https://gist.github.com/jinze at https://gist.github.com/3748766
|
||||||
|
#
|
||||||
|
|
||||||
|
if [ -e /lib/lsb/init-functions ]; then
|
||||||
|
# LSB source function library.
|
||||||
|
. /lib/lsb/init-functions
|
||||||
|
fi;
|
||||||
|
|
||||||
|
pidFile="/var/run/homebridge.pid"
|
||||||
|
logFile="%PATH%/log/logs.log"
|
||||||
|
|
||||||
|
command="node"
|
||||||
|
nodeApp="%PATH%/app.js"
|
||||||
|
foreverApp="%FOREVER_PATH%"
|
||||||
|
|
||||||
|
start() {
|
||||||
|
echo "Starting $nodeApp"
|
||||||
|
|
||||||
|
# Notice that we change the PATH because on reboot
|
||||||
|
# the PATH does not include the path to node.
|
||||||
|
# Launching forever with a full path
|
||||||
|
# does not work unless we set the PATH.
|
||||||
|
PATH=/usr/local/bin:$PATH
|
||||||
|
export NODE_ENV=production
|
||||||
|
#PORT=80
|
||||||
|
$foreverApp start --pidFile $pidFile -l $logFile -a -d -c "$command" $nodeApp
|
||||||
|
RETVAL=$?
|
||||||
|
}
|
||||||
|
|
||||||
|
restart() {
|
||||||
|
echo -n "Restarting $nodeApp"
|
||||||
|
$foreverApp restart $nodeApp
|
||||||
|
RETVAL=$?
|
||||||
|
}
|
||||||
|
|
||||||
|
stop() {
|
||||||
|
echo -n "Shutting down $nodeApp"
|
||||||
|
$foreverApp stop $nodeApp
|
||||||
|
RETVAL=$?
|
||||||
|
}
|
||||||
|
|
||||||
|
status() {
|
||||||
|
echo -n "Status $nodeApp"
|
||||||
|
$foreverApp list
|
||||||
|
RETVAL=$?
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
start
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
stop
|
||||||
|
;;
|
||||||
|
status)
|
||||||
|
status
|
||||||
|
;;
|
||||||
|
restart)
|
||||||
|
restart
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: {start|stop|status|restart}"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
exit $RETVAL
|
||||||
41
startup/org.homebridge.plist
Normal file
41
startup/org.homebridge.plist
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>Label</key>
|
||||||
|
<string>org.homebridge</string>
|
||||||
|
|
||||||
|
<key>EnvironmentVariables</key>
|
||||||
|
<dict>
|
||||||
|
<key>PATH</key>
|
||||||
|
<string>/usr/local/bin/:/usr/bin:$PATH</string>
|
||||||
|
<key>NODE_ENV</key>
|
||||||
|
<string>production</string>
|
||||||
|
</dict>
|
||||||
|
|
||||||
|
<key>Program</key>
|
||||||
|
<string>script/server</string>
|
||||||
|
|
||||||
|
<key>AbandonProcessGroup</key>
|
||||||
|
<false/>
|
||||||
|
|
||||||
|
<key>RunAtLoad</key>
|
||||||
|
<true/>
|
||||||
|
|
||||||
|
<key>KeepAlive</key>
|
||||||
|
<dict>
|
||||||
|
<key>SuccessfulExit</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
|
||||||
|
<key>WorkingDirectory</key>
|
||||||
|
<string>%PATH%</string>
|
||||||
|
|
||||||
|
<key>StandardErrorPath</key>
|
||||||
|
<string>/Users/%USER%/Library/Logs/homebridge.log</string>
|
||||||
|
|
||||||
|
<key>StandardOutPath</key>
|
||||||
|
<string>/Users/%USER%/Library/Logs/homebridge.log</string>
|
||||||
|
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
Reference in New Issue
Block a user