Mosquitto is a very lightweight broker and a Raspberry Pi can easily cope with MQTT traffic on clients on a smart home networks..
Mosquitto doesn’t come installed by default so you will need to install it.
Install Steps
First get the repo key
wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key sudo apt-key add mosquitto-repo.gpg.key
Then make the repository available :
cd /etc/apt/sources.list.d/
Then , depending on which version of debian you are using:
sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list
sudo wget http://repo.mosquitto.org/debian/mosquitto-stretch.list
sudo wget http://repo.mosquitto.org/debian/mosquitto-buster.list
sudo wget http://repo.mosquitto.org/debian/mosquitto-bullseye.list
To check which version you are running use
cat /etc/os-release
Then update apt information:
sudo apt-get update
sudo apt-get install mosquitto
sudo apt-get install mosquitto-clients
For windows and linux see this tutorial on my other site.
Starting and Configuring Mosquitto
The install installs mosquitto as a service which starts automatically and tuns on port 1883.
If you need to change the configuration then the configuration file is called mosquitto.conf and is located in the /etc/mosquitto folder.
On the Pi mosquitto can be controlled using the
systemctl command. You can sopt,start and restart the service using.
sudo systemctl stop mosquitto.service sudo systemctl start mosquitto.service sudo systemctl restart mosquitto.service
You can find more details, like how to run multiple instances, change port etc on my other site here.
Running Mosquitto Manually
When testing you will find it very useful to run mosquitto manually from the command line.
The first step is to stop mosquitto using:
sudo systemctl stop mosquitto.service
Then you can start it using:
mosquitto -v #start in verbose mode
the -v option displays verbose logging information other command line options are:
- -p port_number
- -c configuration file
Examples
To start mosquitto using a test configuration file use
mosquitto -c test.conf
To start mosquitto using port 1884 use
mosquitto -p 1884
Testing the Install
If you followed the install instructions you will have also installed the mosquitto test clients mosquitto_pub and mosquitto_sub.
You can use these clients to test your mosquitto install.
The first step is to subscribe to a topic and then to publish a message to that topic which you should see in the subscribe client.
So first open two command prompts in one type.
mosquitto_sub -h localhost -t test -d
in the second type
mosquitto_pub -h localhost -t test -m message
You should see the message appear in the subscribe window.
Related Tutorials and Resources:
- Smart Homes and MQTT
- Configuring Networking on Raspberry Pi
- How to Know which version of PI you are Running
- 10 Useful Linux (Raspberry Pi) Networking Commands
- Configuring Networking on The Raspberry Pi
Doesn’t appear to work with Pi Zero W. Get the following errors on install:
Process: 14937 ExecStart=/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf (code=killed, signal=ILL)
Main PID: 14937 (code=killed, signal=ILL)
CPU: 132ms
Dec 15 14:18:41 raspberrypi systemd[1]: mosquitto.service: Scheduled restart job, restart counter is at 1.
Dec 15 14:18:41 raspberrypi systemd[1]: Stopped Mosquitto MQTT Broker.
Dec 15 14:18:42 raspberrypi systemd[1]: Starting Mosquitto MQTT Broker…
Dec 15 14:18:42 raspberrypi systemd[1]: mosquitto.service: Main process exited, code=killed, status=4/ILL
Dec 15 14:18:42 raspberrypi systemd[1]: mosquitto.service: Failed with result ‘signal’.
Dec 15 14:18:42 raspberrypi systemd[1]: Failed to start Mosquitto MQTT Broker.
Dec 15 14:18:42 raspberrypi systemd[1]: mosquitto.service: Scheduled restart job, restart counter is at 2.
Dec 15 14:18:42 raspberrypi systemd[1]: Stopped Mosquitto MQTT Broker.
Dec 15 14:18:43 raspberrypi systemd[1]: Starting Mosquitto MQTT Broker…
Dec 15 14:18:43 raspberrypi systemd[1]: mosquitto.service: Main process exited, code=killed, status=4/ILL
Dec 15 14:18:43 raspberrypi systemd[1]: mosquitto.service: Failed with result ‘signal’.
Dec 15 14:18:43 raspberrypi systemd[1]: Failed to start Mosquitto MQTT Broker.
Dec 15 14:18:43 raspberrypi systemd[1]: mosquitto.service: Scheduled restart job, restart counter is at 3.
Dec 15 14:18:43 raspberrypi systemd[1]: Stopped Mosquitto MQTT Broker.
Dec 15 14:18:44 raspberrypi systemd[1]: Starting Mosquitto MQTT Broker…
Dec 15 14:18:44 raspberrypi systemd[1]: mosquitto.service: Main process exited, code=killed, status=4/ILL
Dec 15 14:18:44 raspberrypi systemd[1]: mosquitto.service: Failed with result ‘signal’.
Dec 15 14:18:44 raspberrypi systemd[1]: Failed to start Mosquitto MQTT Broker.
dpkg: error processing package mosquitto (–configure):
Sorry never used the Pi zero but seems it does support it
https://www.mickmake.com/post/mqtt-mosquitto-pi-zero-w-5-minutes-tutorial/
Rgds
Steve
There may be something broken with the 2.0.12-0 version of mosquitto with respect to the RPi Zero. I ran into the same problem. When I tried starting mosquitto manually, I received in “Invalid instruction” error. (I’m using Raspian Buster.)
I removed mosquitto and re-installed using:
$ sudo apt-get install mosquitto=2.0.11-0mosquitto-buster1
This installed and started mosquitto correctly.
I was unable to install the mosquitto clients version 2.0.11-0, however. apt-get complained:
The following packages have unmet dependencies:
mosquitto-clients : Depends: libmosquitto1 (= 2.0.11-0mosquitto1~buster1) but 2.0.12-0mosquitto1~buster1 is to be installed
E: Unable to correct problems, you have held broken packages.
I was, however, able to install the 2.0.12-0 buster version of the clients:
$ sudo apt-get install mosquitto-clients=2.0.12-0mosquitto1~buster1
The quick localhost test of mosquitto broker using mosquitto_sub and mosquitto_pub worked as advertised.
Hopefully someone maintaining the repo will see this and figure out what’s wrong.
First off, thank you for the effort you put into these guides. They have been a huge help. My initial “toy” setups worked well and easily. Then it came time to add in the security and deployment version.
I have been battling inscrutable errors, with permissions errors for the pid and log files as well as the conf files.
After a couple of days bashing down the errors by opening the pid and log files all users and groups, it occurred to me that in my real-use config file I had specified “user mosquitto” in the config file for the first time. When I looked at the permissions on /etc/mosquitto and all its contents, the owner and group was root. So were the default permissions on the pid and log files.
I believe that at install, all of the mosquitto files and directories have root for owner and group. At least the half-dozen clean reinstalls I’ve done have this. So I’ve been fixing piecemeal permissions to user “mosquitto”.
For security reasons, I’d like to have the mosquitto user run and own the program and its files. Is there a clean and not piece-by-piece way to do this? I would prefer to have the program execution and mosquitto files owned by the mosquitto user so that they don’t have to be owned by “pi” or “root” with the attendant higher levels of access.
The install should set up the correct permissions. I have done the install on several pis and not encountered a permission problem.
You do get one when you mosquitto from the command line. Is that what you are doing? If so set the pid and database location to your local folder and it will work ok.
Egds
steve
I’ve tried both package install with apt-get and also with synaptics package manager. Both have the same issues as a manual command line install. They work when bone-original, have issues when I start tinkering.
I think I may have found the root issue without actually fixing anything. I read through the mosquitto.conf man page for about the 47th time, and noticed the section on setting a user.
I set the user line to “user mosquitto”. This is, of course, the default, but I have a personal habit of explicitly setting even default values that I will depend on. When I commented out that line, all was well and everything worked. Un-commenting it to set the user to “mosquitto” brought the permissions issues back. I have not pored through the source code to find this out for certain, but I believe, based on the mosquitto.conf man page that mosquitto does permissions and user gymnastics whenever there is a setting there.
I’ve searched extensively for hints on this permissions thing, and none of the references ever got beyond “create the files and go set the permissions”. The real cure for non-expert users (…like me) is probably to NOT change the user parameter in the config file.
Hi
As I mentioned earlier when running as a service in the background it doesn’t require any permission changes at least I haven’t had to do any.
However changing file locations in the config file will give you permission problems.
Rgds
Steve
Thank you for this tutorial!
The only snag I encountered was with the gpg file. The command
sudo apt-key add mosquitto-repo.gpg.key
generates the warning “apt-key is deprecated. manage keyring files in trusted.gpg.d instead”.
I used a workaround found on another website where gpg imports the .key file, then exports the gpg file, and I put the file in trusted.gpg.d, but that seems not to be the “right” way, although it does work.
It would be great if you could have a look into this.
Jeroen
For me what it worked was
sudo apt update
sudo apt install -y mosquitto mosquitto-clients
Hi I have installed MQTT onto RPI 4 & 4g, installed in docker with the allow_ anonymous – listener it states running , however there is an error Address not Available . Is there a solution as i cannot find one trawling the web for a solution brought me to downgrade to eclipse 1.6 image. Is this a solution?
Hope you can help?
It looks like a port issue and not a mosquitto issue. Check that no other instance of mosquitto is running.
Rgds
Steve
Hi there!
first of all thanks for the great tutorial. There is a lot of info out there , but most of it is outdated.
I have the same issue as John has, a fresh install of homebridge and mosquitto that gave me V2.0.9.
From this point onwards, the MQT communication is not working anymore.
MQT: Attempting connection…
MQT: Connect failed, rc -2. Retry in 60 sec
I have commented my previous (V1) config and left only your proposal, but still no connection:
allow_anonymous true
password_file /etc/mosquitto/passwd
listener 1883
Any other ideas on how to solve this?
Thanks beforehand!
Chris
Remove the password file line unless you are using passwords. If you use passwords remove the allow_anonymous line.
Firstly, thanks for all this. NB the following is probably date specific – 5th March 2021.
I’m trying things out on multiple raspberry pi’s with the broker installed on an old Model B running as a nas, then MQTT publishing from a Rpi 400 on the kitchen table (prob not a unique setup). All working fine until I get to the websockets tutorial – the problem being finding examples of a local config file. As far as I can see, mosquitto by default doesn’t have a config file, you have to create your own.
On the pi nas, after doing update and full-upgrade, sudo apt install mosquitto mosquitto-clients installs mosquitto version 1.5.7 which is a bit old and others say they’re using v 1.6. So, I followed your install instructions above (I’m running buster) to see if I could get v 1.6. However, I now have version 2.0.8, which works fine trying out subscribing and publishing via two terminal windows on the nas. However, my python script (using your instructions) on kitchen table pi (which was working fine) now says ‘socket.error: [Errno 111] Connection refused’ when trying a client.connect
Presumably, this is a configuration issue on the broker. Currently, I’m trying to figure this out and assume I have to create my own config. Maybe mosquitto v 2 is a bit fussier with permissions?
Thanks again and any help much appreciated.
John
Mosquitto 2 default config is more secure a basic config file to make it work as per earlier versions is
listener 1883
allow_anonymous true
just create this simple file and either copy it as mosquitto.conf to /etc/mosquitto/mosquitto.conf
or use it when manually starting mosquitto as
mosquitto -c conf_file
rgds
steve
This only installs a updated 1.6.x series on Raspberry Pi but 2.0.x on Ubuntu.
I have problems with getting one broker sending topics to another on the 1.6.x series (random socket errors and difficulty re-connecting) that appears to work find on the 2.0.x series on Ubuntu, but I would really like to use the Pi.
I don’t think the v2 is available for the pi yet as it is a different chipset. I haven’t seen socket errors on pi how are you testing?
rgds
Steve
I installed mosquitto on a new Raspberry Pi using the method provided here on March 11, 2021, and (without doing anything special) I got version 2.0.9. So evidently v2 is now available on raspbian.
I also upgraded an existing Raspberry Pi with mosquitto 1.6.12 to 2.0.9 by following the sequence given above:
sudo apt-get update
sudo apt-get install mosquitto
sudo apt-get install mosquitto-clients
Thank you so much, only this method worked with me to install Mosquitto on Rpi 3.
I think your second test window should have `mosquitto_pub -h localhost -t test -m message`
Yes tks I’ve changed it.
Rgds
Steve