MQTT Cheat Sheet

MQTT Cheat Sheet

As the title suggests, a bunch of MQTT commands that will come to your rescue when needed.

MQTT Setup

By default, Home Assistant comes with a built-in MQTT server. If you want to install MQTT (either on a different Raspberry Pi or on the same server), follow the steps below.

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

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

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

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

Installation of Mosquitto requires root privileges.

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. For e.g. sudo apt-get update

First, update all the source list

apt-get update
apt-get upgrade

After updating the source list, you are ready to install Mosquitto

apt-get install mosquito

Mosquitto is controlled in two ways. First, the default configuration is in /etc/mosquitto/mosquitto.conf. It is recommended not edit this file. Instead, make a copy of it with a .conf extension in /etc/mosquitto/conf.d folder. For e.g., if you create a file called mosquitto.conf, the full path to the local configuration file would be /etc/mosquitto/conf.d/mosquitto.conf.

Add the following in the mosquitto.conf file:

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_file mosquitto.db
allow_anonymous true
password_file /etc/mosquitto/passwd

After updating the file, it is required to restart mosquitto. Run the following command to restart the mosquitto.

sudo systemctl restart mosquitto

You are required to provide a password for mosquitto. To create a password for mosquitto, run the following command

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

You are required to restart mosquitto to refresh the settings.

sudo systemctl restart mosquitto

To make a system service to run Mosquitto automatically on boot, create a file ‘mosquitto.service’ in /etc/system/system folder.

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

And, enter the following in the file and save.

[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

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 successful start will show a green Mosquitto service. Note that the config and service definition are interlinked via the path of the PID file.

Bridging MQTT with CloudMQTT

To bride Local MQTT Server with CloudMqtt, use the following. The following will pull all the messages from cloudmqtt to local mqtt server. Not the other way around.

Edit the /etc/mosquitto/mosquitto.conf file and add the following content

Just make sure you replace XXX_*_XXX with your details

# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example

pid_file /var/run/mosquitto.pid

persistence true
persistence_location /var/lib/mosquitto/

log_dest file /var/log/mosquitto/mosquitto.log

include_dir /etc/mosquitto/conf.d

connection cloudmqtt
start_type automatic
address m12.cloudmqtt.com:14093
#bridge_cafile /etc/ssl/certs/ca-certificates.crt
try_private true
bridge_attempt_unsubscribe true
cleansession true
clientid XXX_SOMENAME_XXX

remote_username XXX_CLOUD_MQTT_USERNAME_XXX
remote_password XXX_CLOUD_MQTT__PASSWORD_XXX
topic # in 0

Publish a message to MQTT

mosquitto_pub -h 127.0.0.1 -t home/bedroom/switch1 -m "ON"

Read more on publishing messages

Read messages on a topic

mosquitto_sub -v -t 'test/topic'

or

mosquitto_sub -h 127.0.0.1 -t topic

To delete all topics in MQTT:

mosquitto_sub -t '#' -v -u USERNAME -P PASSWORD| while read line _; do mosquitto_pub -t $line -r -n -u USERNAME -P PASSWORD; done

To remove a specific topic

mosquitto_pub -t 'TOPIC' -r -n -u USERNAME -P PASSWORD

Or

Remove an MQTT Topic Permanently from MQTT

 mosquitto_pub -h MQTT_SERVER_NAME -p PORT -t TOPIC_NAME -r -n -u USERNAME -P PASSWORD

Read more on subscribing to messages

comments powered by Disqus