Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
blocks:server:advanced_server_configuration:mqtt [2023-05-16 11:43] mattias [3rd party tools.] |
blocks:server:advanced_server_configuration:mqtt [2025-01-13 12:03] (current) mattias [Blocks Server Configuration File] |
||
---|---|---|---|
Line 3: | Line 3: | ||
MQTT is a standard messaging protocol mainly used for Internet of Things devices (IoT). It is designed as a lightweight publish/ | MQTT is a standard messaging protocol mainly used for Internet of Things devices (IoT). It is designed as a lightweight publish/ | ||
+ | :!: Support for MQTT was added in Blocks version 6.1. Thus, you need that version or later to follow this guide. | ||
=====Principle of MQTT Messaging===== | =====Principle of MQTT Messaging===== | ||
Line 14: | Line 15: | ||
A client can subscribe to a given //topic//, provided through the broker, to then receive messages sent on that topic. Similarly, a client can publish messages under a topic, to be forwarded by the broker to subscribers of that topic. | A client can subscribe to a given //topic//, provided through the broker, to then receive messages sent on that topic. Similarly, a client can publish messages under a topic, to be forwarded by the broker to subscribers of that topic. | ||
====Topic==== | ====Topic==== | ||
- | Topics are used to register interest in a specific incoming message type and, conversely, to specify where to publish outbound messages. Topics are often arranged | + | Topics are used to register interest in a specific incoming message type and, conversely, to specify where to publish outbound messages. Topics are often arranged |
< | < | ||
Line 28: | Line 29: | ||
=====MQTT in Blocks===== | =====MQTT in Blocks===== | ||
- | MQTT in itself is just the message transport mechanism. The data carried in these mesages | + | MQTT in itself is just the message transport mechanism. The data carried in these messages |
{{: | {{: | ||
====Enabling the Broker==== | ====Enabling the Broker==== | ||
- | While any broker can be used, the [[https:// | + | While any broker can be used, the [[https:// |
To enable the broker, follow these steps. | To enable the broker, follow these steps. | ||
Line 74: | Line 75: | ||
===Configuring the Broker=== | ===Configuring the Broker=== | ||
- | The following commands assume you're logged into the terminal as the pixi-amdin user. If not use the //su pixi-admin// | + | The following commands assume you're logged into the terminal as the pixi-admin user. If not use the //su pixi-admin// |
The Mosquitto broker' | The Mosquitto broker' | ||
Line 113: | Line 114: | ||
The broker can be configured to require client authentication using a username and password before a connection is permitted. | The broker can be configured to require client authentication using a username and password before a connection is permitted. | ||
- | :!: **NOTE**: The username and password combination is transmitted in clear text, and is not secure without some form of transport encryption involving certificates | + | :!: **NOTE**: The username and password combination is transmitted in clear text, and is not secure without some form of transport encryption involving certificates |
===Adding a Password File=== | ===Adding a Password File=== | ||
- | The following commands assume you're logged into the terminal as the pixi-amdin user. If not use the //su pixi-admin// | + | The following commands assume you're logged into the terminal as the pixi-admin user. If not use the //su pixi-admin// |
+ | Make sure we have a password file to store the users (this will not overwrite if the file already exist: | ||
< | < | ||
- | sudo mosquitto_passwd -c pixi-pwd | + | sudo touch / |
</ | </ | ||
- | Change the broker configuration and add the line that specifies a password file and turn off the option to use a the broker as anonymous user. | + | Set file ownership and restrictive permissions for the password file: |
+ | < | ||
+ | sudo chmod 400 / | ||
+ | sudo chown mosquitto: | ||
+ | </ | ||
+ | |||
+ | Create a user in mosquitto, the example command adds a user named blocks to an existing password file, the dialog o will prompt for a password. | ||
+ | < | ||
+ | sudo mosquitto_passwd | ||
+ | </ | ||
+ | |||
+ | Read the manual for mosquitto_password to find out other options such as delete a user etc. Note, if the -c option is being used the existing file is overwritten and the file permissions must reset as mosquitto runs with limited permissions for security reasons. | ||
+ | |||
+ | mosquitto_password will throw a warning when adding user while the password file is owned by mosquitto, with this permissions and ownership only root and mosquitto can read the file and mosquitto cannot modify it. It is possible but currently not necessary to temporary change ownership back to root:root while adding new users to mosquitto. | ||
+ | |||
+ | Change the broker configuration and add the line that specifies a password file and turn off the option to use the broker as anonymous user. | ||
+ | |||
+ | < | ||
+ | sudo nano / | ||
+ | </ | ||
+ | The settings: | ||
< | < | ||
listener 1883 | listener 1883 | ||
Line 130: | Line 152: | ||
password_file / | password_file / | ||
allow_anonymous false | allow_anonymous false | ||
+ | </ | ||
+ | |||
+ | Execute the change we must restart the service: | ||
+ | < | ||
+ | sudo systemctl restart mosquitto.service | ||
</ | </ | ||
===Secure connection (TLS)=== | ===Secure connection (TLS)=== | ||
- | For any MQTT application that is running over the internet | + | Any MQTT application that is running over the internet or Local Area Network |
[[blocks: | [[blocks: | ||
Line 145: | Line 172: | ||
If this section is missing in the config file, default settings is assumed for the broker. | If this section is missing in the config file, default settings is assumed for the broker. | ||
+ | |||
+ | |||
< | < | ||
mqtt: | mqtt: | ||
defaultBroker: | defaultBroker: | ||
address: localhost | address: localhost | ||
- | username: | + | username: |
- | password: pixi | + | password: pixi # Replace pixi with the password setup with your user. |
- | encryption: false #Change | + | encryption: false # Set to true if secure connection (tls) is available. |
+ | port: 1883 # Default is 1883 if non-encypted and 8883 if encrypted | ||
</ | </ | ||
Line 168: | Line 198: | ||
Follow the MQTT section in the [[https:// | Follow the MQTT section in the [[https:// | ||
- | ====3rd party tool MQTT Exlorer.==== | + | ====MQTT Explorer (3rd party tool)==== |
We have successfully used this tool to explore and get a visual view over the current broker topics. The tools is also perfect to test mqtt devices functionality outside Blocks. | We have successfully used this tool to explore and get a visual view over the current broker topics. The tools is also perfect to test mqtt devices functionality outside Blocks. | ||
[[https:// | [[https:// | ||
- | The two following screenshots show connection examples: | + | The two following screenshots show connection examples. |
Without TLS encryption: | Without TLS encryption: | ||
Line 183: | Line 214: | ||
{{: | {{: | ||
- | After successfull | + | After successful |
{{: | {{: |