Installing MQTT Broker(Mosquitto) on Raspberry Pi

180,124

59

38

Posted in TechnologyRaspberry-pi

Introduction: Installing MQTT Broker(Mosquitto) on Raspberry Pi

In this instructables you will find how to install MQTT on Raspberry Pi. There are two methods to install mqtt, one is we directly connect keyboard mouse and monitor to a Pi , turn it on and go to the terminal of the raspberry pi and install it from there. Another method is to access Pi through a computer using putty(SSH) and logging into the root and installing, we have an instructable which mentions how to install putty and access Pi through a computer ,you can get it here .In this instructables we are following the second method. Both mqtt client(Pub/Sub Client) and broker( mosquitto) needs to be installed on Pi.

Step 1: Installation of the MQTT Broker on Raspberry Pi

To use the new repository you should first import the repository package signing key follow the below comman, the wget command is used to download single file and stores in a current directory.

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key

sudo apt-key add mosquitto-repo.gpg.key

Then make the repository available to apt

cd /etc/apt/sources.list.d/

Enter the following

for wheezy

sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list

for jessie

sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list

to install the mqtt mosquitto for the raspberry pi follow the below steps use sudo before the command if not using root

sudo -i

The above command is not mandatory ,it is if you wish to use root or you will need to prefix each below command with sudo eg sudo apt-get update

The below command is used to update the source list

apt-get update

After updating type the following commands to install mosquitto broker as shown in the image 1.

apt-get install mosquitto

the above command is to install mqtt mosquitto broker.

Step 2: Installation of the MQTT Client on Raspberry Pi

After the installation of mqtt broker, install the mqtt client on raspberry pi.

The below shows the command to install mqtt mosquitto client this can be clearly seen in the image1 .

apt-get install mosquitto-clients

Step 3: Testing the Working of MQTT

After installing mqtt mosquitto broker and client the user need to test by creating the topic. Open two putty programs on windows, you can do this by clicking the putty.exe file and enter the host name and click to open do this twice so that two putty programs access Pi via ssh. Lets say putty1 and putty2 are open and connected to Pi via ssh for our convenient.

In putty1 window type the command with the topic name armtronix_mqtt this topic name can be anything, according to the convenience of the user .

mosquitto_sub –d –t armtronix_mqtt

As shown in the image 1 this will subscribe Pi to MQTT broker(which is runs on Pi) handling topic armtronix_mqtt.

In putty2 image 2 window type the following command with the same topic i.e armtronix_mqtt

mosquitto_pub –d –t armtronix_mqtt –m “Hello armtronix”

Now come to the window putty1, image 1 here you will be able to see the message

Hello armtronix

This concludes the that you are running the Mosquitto broker successfully.

Similarly here another case we have tested mosquitto_pub –d –t armtronix_mqtt –m “Test passed” will display Test passed as it is shown in image 1 and image 2.

Step 4: Testing MQTT From Another System

If you want to mqtt to connect through the network/internet from another system then you need to type the IP address of the host(Broker System, in our case its Raspberry Pi ) and you will be able to connect. In the image 3 it is shown that another computer from the LAN network has subscribed to the topic armtronix_mqtt in the window 1 using the command .Please note 192.168.1.10 is the raspberry pi ip address and may be different in your case.So you will need to enter following command as shown in the image 1 which refers to window 1.

mosquitto_sub -h 192.168.1.10 -t armtronix_mqtt

Now in the terminal window 2 we are publishing by entering the command as shown in the image 2

mosquitto_pub -h 192.168.1.10 -t armtronix_mqtt -m "Hi this is Armtronix_server"

Now in the window 1 we will be able to see the message Hi this is Armtronix_server as shown in the image 3

We hope the we have made it as clear as possible for other to understand the process of installing and testing Mqtt on Raspberry Pi .Thank you

Creating some other instructable- Installation of openHAB on Raspberry Pi and setting it to control the lights, fan and camera etc which will be updated shortly.

Share

    Recommendations

    • Spotless Contest

      Spotless Contest
    • Microcontroller Contest

      Microcontroller Contest
    • Space Challenge

      Space Challenge
    user

    We have a be nice policy.
    Please be positive and constructive.

    Tips

    The command options are prefixed by something other(–) than a regular hyphen(-) & the quotes(”) you use are different to these (') which I need on my ssh connection. Otherwise thanks for a nice short explanation of what MQTT is and how to get this set up. Cheers :)

    2 Questions

    When I get here: mosquitto_sub –d –t armtronix_mqtt
    I receive an error: Connection refused.
    I don't know where to go from here.

    You probably did not start the mosquitto broker -- looks like that step may have been missed in the instructions.

    In your terminal run `mosquitto`
    Then in a new tab, ssh into the pi again and run the `mosquitto_sub -d -t foo` command to subscribe to the "foo" topic.
    Then in a third terminal window ssh into the pi yet again and run `mosquitto_pub -t foo -m 'bar'`. You should see "bar" appear in the second terminal where you had originall subscribed to the "foo" topic.

    hello,
    I installed the MQTT on raspberry pi3 as my server but I can not connect to it through the MQTT from another pc on my network even though I was successful to send and receive messages on same server but not from another client on the same network any ideas of where to look the message I get is "connection failed!" thanks

    38 Comments

    I had trouble getting it to work on my old Raspberry Pi B (RPi B). The issue ended up being because I used the Raspian version "Stretch" and it having some dependencies that caused issues when installed on the older Raspberry Pi version. After I rebuilt the RPi B using "Jessie" instead of "Stretch" is worked straight away.

    1 reply

    mosquitto_sub -h xxx.xxx.xxx.xxx -t armtronix_mqtt
    Here xxx.xxx.xxx.xxx is you broker ip address

    Stretch has replaced Jessie.

    Trying to install MQTT under stretch I get:

    AFter running this:

    mkdir mosquitto
    cd mosquitto/
    wget http://repo.mosquitto.org/debian/mosquitto-repo.g...
    sudo apt-key add mosquitto-repo.gpg.key
    cd /etc/apt/sources.list.d/
    sudo wget http://repo.mosquitto.org/debian/mosquitto-stretc...
    sudo apt-get update

    Then I made the manual entry:

    pi@mqtt:~/Install-Programmes $ sudo apt install -y mosquitto
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    Some packages could not be installed. This may mean that you have
    requested an impossible situation or if you are using the unstable
    distribution that some required packages have not yet been created
    or been moved out of Incoming.
    The following information may help to resolve the situation:

    The following packages have unmet dependencies:
    mosquitto : Depends: libssl1.0.0 (>= 1.0.1) but it is not installable
    Depends: libwebsockets3 (>= 1.2) but it is not installable
    E: Unable to correct problems, you have held broken packages.

    ANy help on this

    7 replies

    reset your /etc/apt/sources.list file and typing those commands on your terminal:

    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get -y install mosquitto mosquitto-clients

    use atpitude to install instead, it can override the dependency conflicts. done this twice now and it worked both times.

    $ sudo aptitude install mosquitto

    sudo aptitide install mosquitto did not solve it for me, same error, though eventually i got some options offered that seemed to install a package

    mosquitto2.png

    Use this:

    add (uncomment) deb-src http://archive.raspberrypi.org/debian/ stretch main ui
    to raspi.list in /etc/apt/sources.list.d

    apt-get install cmake uuid-dev
    apt-get install libwebsockets-dev
    apt-get install libssl1.0.2
    apt-get install mosquitto mosquitto-clients

    Thank you. Fortunately it is a while ago and just apt-get install ended up working for me

    wget http://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.0.0_1.0.1t-1+deb8u6_armhf.deb


    sudo dpkg -i libssl1.0.0_1.0.1t-1+deb8u6_armhf.deb

    wget http://ftp.nz.debian.org/debian/pool/main/libw/libwebsockets/libwebsockets3_1.2.2-1_armhf.deb

    sudo dpkg -i libwebsockets3_1.2.2-1_armhf.deb

    does instructables have a text / code window? im pretty sure it still supports html editing so you could probs add one, i say this because somehow, your dashes "-" are not dashes, or, for whatever reason, your code wont paste into putty, specifically

    mosquitto_pub -d -t armtronix_mqtt –m “Hello armtronix”
    Error: Unknown option '–m'.

    the solution was to retype it but someone less experienced might assume its glitch caused by incorrectly installing something.

    I get the following error when trying to install Ras PI 3 Jessie.

    Could you please help ?

    pi@raspberrypi:/etc/apt/sources.list.d $ sudo apt-get update

    Get:1 http://archive.raspberrypi.org/debian stretch InRelease [25.3 kB]

    Get:2 http://repo.mosquitto.org/debian jessie InRelease [3,884 B]

    Get:3 http://repo.mosquitto.org/debian wheezy InRelease [3,893 B]

    Get:4 http://mirrordirector.raspbian.org/raspbian stretch InRelease [15.0 kB]

    Fetched 48.0 kB in 2s (22.0 kB/s)

    Reading package lists... Done

    N: Ignoring file 'mosquitto-repo.gpg.key' in directory '/etc/apt/sources.list.d/' as it has an invalid filename extens ion

    N: Ignoring file 'mosquitto-wheezy.list.2' in directory '/etc/apt/sources.list.d/' as it has an invalid filename exten sion

    N: Ignoring file 'mosquitto-wheezy.list.1' in directory '/etc/apt/sources.list.d/' as it has an invalid filename exten sion

    N: Ignoring file 'mosquitto-jessie.list.1' in directory '/etc/apt/sources.list.d/' as it has an invalid filename exten sion

    N: Ignoring file 'mosquitto-wheezy.list.3' in directory '/etc/apt/sources.list.d/' as it has an invalid filename exten sion

    Doesn't work. Same error as above

    not sure what you are replying to

    Nice guide, but needs massive updates due to the changes in Raspbian. The base Linux changed from Wheezy to Jessie.

    It took me several Google research hours to get it working on my Raspian PIXEL. I have written up my lessons learned in this comment. Maybe Armtronix considers an update of his text.

    The following topics turned out to be pretty problematic (might have been me):

    -Wrong Mosquitto Repository

    -Change of Linux startup from init.d to systemd

    The command to fetch the right Mosquitto for the PI should be:

    sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie...

    As MQTT is a secure communication layer, we may want to have it automatically starting at Raspberry boot. Raspbian is using systemd for autostart. Mosquitto expects init.d. This requires substantial changes:

    1) Remove Init.d references introduced during Mosquitto installation

    Stop it:

    sudo /etc/init.d/mosquitto stop

    Remove it:

    sudo update-rc.d mosquitto remove

    2) Create a Mosquitto config:

    We need a password file:

    sudo mosquitto_passwd -c /etc/mosquitto/passwd <username>

    Enter the password into the prompt

    <username> may be mosquitto

    We need a db for message persistance. Create the directory where persistence db files will be stored, change owner to mosquitto:

    mkdir /var/lib/mosquitto/Sudo chown mosquitto:mosquitto /var/lib/mosquitto/ -R

    Now we define the Mosquitto configuration at /etc/mosquitto/mosquitto.conf

    File Content:

    --------------------<File starts below>--------------------------

    # Place your local configuration in /etc/mosquitto/

    #

    # A full description of the configuration file is at

    # /usr/share/doc/mosquitto/examples/mosquitto.conf.example

    # Config file for mosquitto

    #

    # See mosquitto.conf(5) for more information.

    pid_file /run/mosquitto.pid

    user mosquitto

    max_queued_messages 200

    message_size_limit 0

    allow_zero_length_clientid true

    allow_duplicate_messages false

    listener 1883

    autosave_interval 900

    autosave_on_changes false

    persistence true

    persistence_location /var/lib/mosquitto/

    persistence_file mosquitto.db

    allow_anonymous true

    password_file /etc/mosquitto/passwd

    --------------------<File ends above>--------------------------

    Now check if Mosquittoe works with this configuration file:

    mosquitto -c /etc/mosquitto/mosquitto.conf

    This should start Mosquitto. In another terminal window, you may execute

    netstat -at

    A working Mosquitto is shown by the PI listening to port 1883.

    3) Create a systemd service for autostart

    Create a Mosquitto service file with Nano

    sudo Nano /etc/systemd/system/mosquitto.service

    --------------------<File starts below>--------------------------

    [Unit]

    Description=Mosquitto MQTT Broker daemon

    ConditionPathExists=/etc/mosquitto/mosquitto.conf

    After=network.target

    Requires=network.target

    [Service]

    Type=forking

    RemainAfterExit=no

    StartLimitInterval=0

    PIDFile=/run/mosquitto.pid

    ExecStart=/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf -d

    ExecReload=/bin/kill -HUP $MAINPID

    Restart=on-failure

    RestartSec=2

    [Install]

    WantedBy=multi-user.target

    --------------------<File ends above>--------------------------

    Now enable the service, start it and look into the status:

    sudo systemctl enable mosquitto.service

    sudo systemctl start mosquitto.service

    sudo systemctl status mosquitto.service -l

    A sucessful start will show a green Mosquitto service. Note that the config and service definition are interlinked via the path of the PID file.

    1 reply

    solved the issue "Error: Connection refused"

    enable read/write/execute access to the following files;

    mosquitto.log

    located at /var/log/mosquitto

    mosquitto.conf

    located at /etc/mosquitto

    you can modify permissions (full control) to these files by typing;

    sudo chmod 777 [full-file-path/file-name]

    example: sudo chmod 777 /var/log/mosquitto/mosquitto.log

    then type sudo systemctl enable mosquitto


    restart RPi and you are good to go.

    hope this helps.

    I followed the installation recipe but when I issued the speeling corrected command

    sudo mosquitto_sub -d -t armtronix_mqtt

    I got the response Error: Connection refused. What am I missing?

    1 reply

    I was having the same problem as well running the Jessie one. The solution that worked for me I found here https://iot.stackexchange.com/questions/332/mosqui...

    Apparently the MQTT service is not starting automatically so the following 2 commands need to be ran:
    systemctl start mosquitto
    systemctl enable mosquitto