How to Install and Run The Mosca MQTT Broker on Node-Red

node-red-mosca-iconRather than use an external broker like mosquitto with node-red you can install Mosca which is a MQTT broker written in node.js.

Because Mosca isn’t part of the core nodes you need to install it using the npm package manager or through the Node-red Admin control panel.



Mosca Install Using Node-red Admin

In the node-red admin go to Settings and manage Pallette.

node-red-settings

Click on the install tab and search for node-red-contrib-mqtt.

You should see a list of options. The node-red-contrib-mqtt-broker is the module you need to install.Install-mosca-broker

Mosca-node

After the install you should find a new node called mosca under the input categories.

Drag and drop on the Canvas to use.

Mosca Node Configuration

The node properties is a single page and with very few settings.mosca-node-properties

You need to set the ports for standard MQTT and MQTT over websockets.

The username and password fields are for the mongodb database,and you can usually leave them blank even when using the database.

The mongo database is used for persistent data and is usually as show in the screenshot.

mongodb://127.0.0.1:27017/MQTT

Note: If it appears grayed out then it is not being used.

Persistent data stores unsent messages,subscribes and retained messages so they are remembered if the server is restarted.

To use it you will need to have the mongodb server installed on your system.

mongosb-nodes

Important Note: This isn’t the mongodb node. The node is a connector to a database server and not the server itself.

You will need to install the mongodb database server separately it is not a node-red node.

Testing The Install

You can use any MQTT client for testing the broker.The easiest is to use the MQTT input and output nodes.

Here is a screen shot of my test flow:

Mosca-test-flow

Here is the flow code which you can import into your own flow:

[{"id":"72147d2d.44f4d4","type":"debug","z":"eb695aa9.0527e","name":"","active":true,"console":"false","complete":"false","x":331,"y":164,"wires":[]},{"id":"91f5338c.38bbc8","type":"mosca in","z":"eb695aa9.0527e","mqtt_port":"1884","mqtt_ws_port":8080,"name":"","username":"steve","password":"password","dburl":"","x":149,"y":105,"wires":[[]]},{"id":"1a2ed5c8.b06cf2","type":"mqtt in","z":"eb695aa9.0527e","name":"","topic":"sensors/moscatest","qos":"0","broker":"c6953943.ef9508","x":132,"y":165,"wires":[["72147d2d.44f4d4"]]},{"id":"87156fac.5e8bb","type":"mqtt out","z":"eb695aa9.0527e","name":"","topic":"","qos":"","retain":"","broker":"c6953943.ef9508","x":331,"y":230,"wires":[]},{"id":"d7f781ca.ab16e","type":"inject","z":"eb695aa9.0527e","name":"send message","topic":"sensors/moscatest","payload":"test message","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":145,"y":230,"wires":[["87156fac.5e8bb"]]},{"id":"c6953943.ef9508","type":"mqtt-broker","z":"","name":"Mosca","broker":"localhost","port":"1884","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""}]

Summary

The Node-Red mosca node is useful for testing it may also be useful for small home automation networks.

It is not really suitable for a production environment.

I will be watching to see what happens with this node going forward.

Related Tutorials and Resources

Facebooktwittergoogle_plusredditpinterestlinkedinmail

4 comments

  1. Steve
    I have tried using Mosca on Node Red but the system crashes.
    I get an error: Uncaught exception Type error;
    “cannot set property listening or # server which has only a getter”
    then it enters a “failed state” and goes into a rebooting loop.
    I lost the entire program and had to start fresh install.
    Have you heard of any issues with Mosca?

    1. Thats what I thought but when I tested it it didn’t work that way. It did work on the mongodb database fro remote access.

Leave a Reply

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