As I’m testing my new build Homekit accesoires I need to manually start my Apple Homebridge based on MQTT every time I boot. So the question is: How can I automatically start Apple Homebridge based on MQTT after rebooting the Raspberry Pi Zero W. There are many directions out there that don’t work on Raspbian. Specifically the “upstart” scripts, as Raspbian doesn’t come with upstart, and will mess things up greatly if you install it. Raspbian uses init.d. It’s fairly simple to get things going.
MQTT Auto Start
To create a new script we have to create one first. You do so by typing:
sudo nano /etc/init.d/<your script>
The following is an example based on starting up the homekit2mqtt service, but change the name of the script and the command to start and stop it and it would work for any command.
#!/bin/sh ### BEGIN INIT INFO # Provides: homebridge # Required-Start: $network $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start daemon at boot time # Description: Enable service provided by daemon. ### END INIT INFO dir="/home/pi" cmd="DEBUG=* /usr/local/bin/homekit2mqtt " user="pi" name=`basename $0` pid_file="/var/run/$name.pid" stdout_log="/var/log/$name.log" stderr_log="/var/log/$name.err" get_pid() { cat "$pid_file" } is_running() { [ -f "$pid_file" ] && ps -p `get_pid` > /dev/null 2>&1 } case "$1" in start) if is_running; then echo "Already started" else echo "Starting $name" cd "$dir" if [ -z "$user" ]; then sudo $cmd >> "$stdout_log" 2>> "$stderr_log" & else sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" & fi echo $! > "$pid_file" if ! is_running; then echo "Unable to start, see $stdout_log and $stderr_log" exit 1 fi fi ;; stop) if is_running; then echo -n "Stopping $name.." kill `get_pid` for i in 1 2 3 4 5 6 7 8 9 10 # for i in `seq 10` do if ! is_running; then break fi echo -n "." sleep 1 done echo if is_running; then echo "Not stopped; may still be shutting down or shutdown may have failed" exit 1 else echo "Stopped" if [ -f "$pid_file" ]; then rm "$pid_file" fi fi else echo "Not running" fi ;; restart) $0 stop if is_running; then echo "Unable to stop, will not attempt to start" exit 1 fi $0 start ;; status) if is_running; then echo "Running" else echo "Stopped" exit 1 fi ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 ;; esac exit 0
Make script executable
sudo chmod 755 /etc/init.d/<your script>
Register script to be run at start-up To register your script to be run at start-up and shutdown, run the following command:
sudo update-rc.d /etc/init.d/<your script> defaults
Note: The header at the start is to make the script LSB compliant and provides details about the start up script and you should only need to change the name. If you want to know more about creating LSB scripts for managing services, see http://wiki.debian.org/LSBInitScripts
t should now run when your Pi reboots. You can also start it up manually like this:
sudo /etc/init.d/homebridge start
To view the running logs, you can tail the output log or error log:
tail -f /var/log/homebridge.log
and:
tail -f /var/log/homebridge.err
If you ever want to remove the script from start-up, run the following command:
sudo update-rc.d -f <your script> remove
The Raspberry Pi Zero W will automatically start Apple Homebridge based on MQTT after a restart. It is hereby no longer necessary to have connected a mouse, keyboard or monitor. The Apple Homebridge based on MQTT server can be placed anywhere this way.