HomeBridge – MQTT Auto Start

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:

sudonano/etc/init.d/<your script>

The following is an example based on starting up the homekit2mqttservice, but change the name of the script and the command to start and stop it and it would work for any command.

#!/bin/sh###BEGININITINFO#Provides:homebridge#Required-Start:$network$remote_fs$syslog#Required-Stop:$remote_fs$syslog#Default-Start:2345#Default-Stop:016#Short-Description:Startdaemonatboottime#Description:Enableserviceprovidedbydaemon.###ENDINITINFOdir="/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/null2>&1}case"$1"instart)ifis_running;thenecho"Already started"elseecho"Starting $name"cd"$dir"if[-z"$user"];thensudo$cmd>>"$stdout_log"2>>"$stderr_log"&elsesudo-u"$user"$cmd>>"$stdout_log"2>>"$stderr_log"&fiecho$!>"$pid_file"if!is_running;thenecho"Unable to start, see $stdout_log and $stderr_log"exit1fifi;;stop)ifis_running;thenecho-n"Stopping $name.."kill`get_pid`foriin12345678910#foriin`seq10`doif!is_running;thenbreakfiecho-n"."sleep1doneechoifis_running;thenecho"Not stopped; may still be shutting down or shutdown may have failed"exit1elseecho"Stopped"if[-f"$pid_file"];thenrm"$pid_file"fifielseecho"Not running"fi;;restart)$0stopifis_running;thenecho"Unable to stop, will not attempt to start"exit1fi$0start;;status)ifis_running;thenecho"Running"elseecho"Stopped"exit1fi;;*)echo"Usage: $0 {start|stop|restart|status}"exit1;;esacexit0

Make script executable

sudochmod755/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:

sudoupdate-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/homebridgestart

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:

sudoupdate-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.

SaveSave

SaveSave

Donate

Since October 2015, StudioPieters® has been writing this blog. Help accelerate its development with a small contribution! StudioPieters® is open source, and 100% free . Please consider donating to StudioPieters® before starting the fun of building and learning. StudioPieters® is a non-profit organisation devoted to making creative use of electronics accessible to everyone.