Comment on page
4. MQTT Guide
Here you will find the basic concepts of MQTT and the specification of how the messages are send to and from your device.
MQTT is a lightweight simple messaging protocol, designed for constrained devices with low-bandwidth. This means that it is the perfect solution for the Internet of Things and Home automation applications and it's usually more flexible stable and reliable than other protocols like WebSockets. MQTT allows you to send commands to control outputs, read and publish data from your devices and more.
In MQTT there are 3 basic concepts:
here the topic is Home/Livingroom/Lamp/Turn and the message is ON, and this is the basic structure of all messages that are sent through MQTT
Every device can subscribe to topics, and it will receive all the messages sent with the topics they are subscribed to, they can subscribe to multiple topics and also subtopics.
Also when publishing a message the devices must provide the topic so the message can be successfully delivered.
A device who is subscribed to Home/# will receive messages sent to Home/Livingroom and also those sent to Home/Bedroom just by using the # sign.
Is the central device who allows and restricts connections and also, receives, filters, redirects and publishes messages to all devices connected. In this case, the broker is Smartnest Server.
No, you can also interconnect your devices using this protocol, for example, if you have a motion sensor and a lighting system, and they are too far away from each other, you don't need to install cables across the room to let them communicate, you can just make the light to subscribe to the topic Bedroom/Light and you can have the sensor publish to that topic, at the same time they will be connected to Smartnest and all the integrations.
At Smartnest every device has a unique ID, this ID must be used as the first part of a topic.
If you are sending a message to the broker this must be the Id of the device which is sending the message.
If you are sending the message to another of your devices this should be the Id of the device you are sending the message to.
The following parts of the topic can be customized by the user, for example, this would be a valid topic from the device to Smartnest Broker:
while this would be an invalid topic:
There are some subtopics reserved for special purposes and here is the list of all the reserved topics:
Directives are sent From the server to the device every time there is a new command from any of the integrations.
Reports are sent from the device to the server to inform about a state change. This reports must be every time after receiving a directive and also when there is a change due to a physical interaction like pressing a button.
Requests are sent from the device to the server in order to ask for special information like time, the server will respond with a response topic.
At Smartnest we are a community of Home Automation and we are all using the same resources so here are the rules that everyone must follow when using MQTT:
- 1.The connection will be only allowed when providing valid username and password
- 2.The connection will be allowed when the device ID used belongs to the username used
- 3.The first member of any published topic must be a valid Id from one of the devices from the username used
- 4.You must avoid sending the reserved topics too often every 500 ms is fine, but in general, avoid to put them in infinite for loops without delays.
The devices that don't follow these rules are automatically disconnected and blocked by the system, the first block is for 1 minute, the second is for 5 minutes, the third is for 10 minutes and so on.
If a device is reset it will take about 20 seconds for the server to note the change and allow the reconnection.