MQTT-SN RSMB Broker Overview,Install and Configuration

The RSMB MQTT-SN broker written by Ian Craggs of IBM isn’t currently being actively developed, but it is still invaluable for anyone wanting to get experience using MQTT-SN.

See





The RSMB broker functions both as a MQTT-SN broker and also as an MQTT broker allowing messages between MQTT-SN clients and  MQTT clients, as shown in the diagram below:

rsmb-functionality-diagram

An MQTT-SN client can publish on a topic that can be received by an MQTT-SN client or an MQTT client subscribed to that topic.

Likewise; An MQTT client can publish on a topic that can be received by an MQTT-SN client or an MQTT client subscribed to that topic.

The demo python scripts in the downloads illustrate this.

Installing the Broker

You can download the RSMB ( Really small message broker here . Unzip it.

When you unzip it you should see a directory structure like the one below:

rsmb-directory

Open the RSMB folder and go to the src folder:

rsmb-files

In the src folder you will find the source files (.c and .h files), it also contains a Makefile that contains instructions to build the broker.

Navigate to this directory and run make to compile the broker.

Note: On Linux the compiler will already be installed and so this will work. However on Windows you will need the necessary software installed. I have only done this on Linux.

You get two brokers called broker and broker_mqtts.

The broker program only supports MQTT over TCP.

The broker_mqtts is the one you need to run MQTT-SN.

I copied the broker files into a directory of their own and created a configuration file called text.txt.

In the configuration file I turned on detailed logging and set the broker port for 1884 just to test it. here is the file.

mqttsn-broker-config

To run it at a command prompt type.

./broker_mqtts test.txt

start-mqttsn-broker

If you want the broker to advertise the Gateway address then use this config file.

trace_output protocol

# normal MQTT listener
listener 1883 INADDR_ANY
# MQTT-S listener
listener 1885 INADDR_ANY mqtts
# optional multicast groups to listen on
multicast_groups 224.0.18.83
#This will advertise the Gateway address to clients
# optional advertise packets parameters: address, interval, gateway_id
advertise 225.0.18.83:1885 30 33

Notice that in the config file above MQTT uses the standard port 1883:

listener 1883 INADDR_ANY

and MQTT-SN uses port 1885.

listener 1885 INADDR_ANY mqtts

The line:

advertise 225.0.18.83:1885 30 33

sets port 1885 as the multicast port and it is the same as the UDP port. However they can be different.

You will need to configure the MQTT-SN client to listen on port 1885 and Multicast IP of 225.0.18.83 to receive the multicast messages.

This is what the output of the Python client shows when gateway is found

mqtt-sn-gateway-found

64 bit Processors

If you want to run it on a 64 bit processor it may fail with a strange warning that it can’t find the file.

On Ubuntu you need to do the following:

run-32-64-ubuntu

Screen shot above taken from this forum post.

RSMB Notes

From the documentation and my testing The broker does not support the following:

  • QOS 2
  • searchGW
  • clean sessions

RSMB Alternatives

There aren’t any free MQTT-SN brokers as far as I am aware.There is a Gateway available and released by the Eclipse foundation.

Video – RSMB and Python MQTT-SN Client Demo

Common Questions and Answers

Q -Can I use the MQTT-SN broker as a MQTT broker?

A – Yes provided it is enabled in the config file

Q -Does a client use the same UDP port for sending MQTT-SN messages as used by the Advertisement Multicast messages.

A – It depends on the configuration file>they can be the same or Different.

Q- Do I need to use the advertise feature?

A- No it is optional

Resources:

There is a very useful getttingstarted.htm file in the doc folder.

Related Tutorials :

Please rate? And use Comments to let me know more

12 comments

  1. Hello Steve
    I want to know if you can help me, Is there a way that RSMB sends a willtopicreq and will topicmessage to the mqttsn client? I would like to use those messages with my client.
    THANKS

  2. Hello
    I´d like to know if there´s a way rsmb sends pingreq to the mqttsn client, I know that it´s no neccesary due to the connection runs over udp but I want to analyse the management traffic so I need RSMB or the mqttsn python client sens pinreq each 30 secs, I saw that there´s a keepalive parameter but I dont jnow how to use it, can you help me?
    Thanks

  3. Hello Steve,

    Let’s say the MQTT-SN works is configured as a bridge towards an MQTT broker, and the later has been setup with an authentication plugin (e.g. mqtt-go-auth connected to a Postgres database). What configuration is needed in MQTT-SN to forward the mqtt client username/password to the MQTT broker through the MQTT-SN gateway? Is this supported?

    1. Mqtt-sn doesn’t use username/password. I’m not sure if the paho gateway will do client mapping to insert it as I haven’t looked at it in that detail. I don’t think RSMB does.
      Sorry I can’t be more help.
      Rgds
      Steve

  4. Great thank you so much, I tried all the examples that you provided in the video and all of them are working. The only thing is when I try to use the multicasting IP I can’t connect to 225.0.18.83
    So I ran the broker, pub-sub-mqtt-mqttsn-1, and pub-sub-mqttsn-mqtt on the same machine using the host IP and 1885 port, and everything was working fine.
    HOWEVER,
    When I tried to run a broker, 1 mqtt-client, and 2 MQTT-SN clients. I started the Broker and start publishing from the mqtt-client and I did connect to the broker, but when I ran the MQTT-SN using the m_group which is the 225.0.18.83 IP and m_port 1885 it is not connecting to the gateway somehow.

    If you can help me or give me advice that would be great. I’m new to MQTT and RSMB so I’m just getting to understand these stuff and how it works.

    1. the m_port and group is only used for gateway discovery not for sending and receiving messages.
      you should set the port and broker address to what is configured on the RSMB
      Rgds
      Steve

  5. Hello Steve,

    thanks for the explanation and the video. I just have one problem in which when I start the broker and start advertising. I run the multi-scan script and I’m not getting anything. I did follow your video and I realized that in the config file for the RSMB broker you have the listener on 1885 and advertising the gateway using 225.0.18.83:1884 30 33 in the video. but in the provided config it is port 1885. I tried both and still not working.

    1. Hi
      I will take a look but will probably take a few days. Use the ask steve page and send me the config file you are using.
      Rgds
      Steve

    2. If you look at the broker console you should see the broker advertising. I set min to advertise every 30 secs using
      advertise 255.0.18.83:1885 30 33
      have you configured this on the broker this is my complete config file

      ######################
      trace_output protocol

      # normal MQTT listener
      listener 1886 INADDR_ANY
      # MQTT-S listener
      listener 1885 INADDR_ANY mqtts
      # optional multicast groups to listen on
      multicast_groups 224.0.18.83
      #This will advertise the Gateway address to clients
      optional advertise packets parameters: address, interval, gateway_id
      advertise 225.0.18.83:1885 30 33

Leave a Reply

Your email address will not be published. Required fields are marked *