Command-line utility designed to facilitate the interconnection between serial devices and an MQTT server. This project is based on the `mqtty` library and allows simple configuration using a TOML file.
Project description
mqtty-cli
mqtty-cli is a command-line utility designed to facilitate the interconnection between serial devices and an MQTT server. This project is based on the mqtty library and allows simple configuration using a TOML file.
Installation
You can install mqtty-cli directly from PyPI:
pip install ki2-mqtty-cli
Usage
Basic Command
Once installed, the mqtty-cli command will be available. You can use it to start the interconnection using a TOML configuration file.
mqtty-cli <path-to-settings.toml>
If no path is provided, the program will attempt to load a configuration file named settings.toml from the current directory. You can also specify the path using the MQTTY_CONFIG environment variable.
Configuration
The configuration file must be written in TOML format. Here is an example settings.toml file:
# MQTT Configuration
[mqtt]
host = "localhost"
port = 1883
startup_wait_time = 5
notification_topic = "mqtty/notifications"
[[devices]]
# Device 1 configuration
topic = "device/1"
port = "/dev/ttyACM0"
baudrate = 9600
[[devices]]
# Device 2 configuration
topic = "device/2"
port = "/dev/ttyACM1"
baudrate = 9600
Field Details
MQTT Section ([mqtt])
| Field | Type | Default | Description |
|---|---|---|---|
| host | string | "localhost" | Address of the MQTT server |
| port | int | 1883 | Port of the MQTT server |
| auth | table | None | Authentication configuration (optional) |
| startup_wait_time | int | 0 | Time to wait (in seconds) before connecting to the MQTT server |
| notification_topic | string | None | MQTT topic where mqtty-cli can send notifications (e.g., error messages) |
| pending_calls_threshold | int | None | Maximum number of pending publications before logging a warning |
If authentication is required, add the following fields:
[mqtt.auth]
username = "my-username"
password = "my-password"
Devices Section ([[devices]])
Each serial device must be defined as a table in a [[devices]] list.
| Field | Type | Default | Description |
|---|---|---|---|
| topic | string | - | MQTT topic associated with the device |
| port | string | - | Serial port of the device (e.g., /dev/ttyACM0) |
| name | string | null | Optional name for the device; defaults to its port if not provided |
| optional | bool | true | If true, the program checks if the port exists before registering the device |
| baudrate | int | 9600 | Serial communication speed |
| bytesize | int | 8 | Size of serial data |
| parity | string | "None" | Parity (None, Even, Odd, Mark, Space, or N, E, O, M, S) |
| stopbits | float | 1 | Number of stop bits |
| timeout | int / null | null | Timeout in seconds (null to disable) |
| xonxoff | bool | False | XON/XOFF flow control |
| rtscts | bool | False | RTS/CTS flow control |
| write_timeout | float / null | null | Write timeout |
| dsrdtr | bool | False | DSR/DTR flow control |
| inter_byte_timeout | float / null | null | Timeout between bytes |
| exclusive | bool / null | null | Exclusive mode for the serial port |
| endline_char | string (1) | "\n" | End-of-line character |
| mqtt_start | string (1) | "@" | Start character for MQTT messages |
| mqtt_separator | string (1) | ":" | Separator in MQTT messages |
Example Execution
- Create a
settings.tomlconfiguration file with your parameters. - Run the following command:
mqtty-cli settings.toml
You will see a message indicating that the devices have been configured and the interconnection has started:
Path = settings.toml
New device '/dev/ttyACM0' on topic 'device/1'
New device '/dev/ttyACM1' on topic 'device/2'
Programming Example for Serial Devices
For serial devices, all messages received on the associated topic are sent directly to the device without any specific start or end characters.
To publish to a specific topic from the device, messages written to the serial port should follow the format:
@<topic>:<payload>\n
<topic>is the target MQTT topic.<payload>is the message to be published.
Arduino Example
void setup() {
Serial.begin(9600);
Serial.println("Arduino is ready!");
}
void loop() {
// Send data to the MQTT broker
if (Serial.available()) {
String topic = "other-topic"; // Specify the target topic
String payload = Serial.readStringUntil('\n');
Serial.print("@");
Serial.print(topic);
Serial.print(":");
Serial.println(payload);
}
}
In this example, the Arduino listens on its serial input and formats outgoing messages to publish to the topic other-topic.
License
This project is distributed under the MIT License. See the LICENSE file for more details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ki2_mqtty_cli-1.5.1.tar.gz.
File metadata
- Download URL: ki2_mqtty_cli-1.5.1.tar.gz
- Upload date:
- Size: 10.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.5 CPython/3.10.12 Linux/5.15.0-130-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1589dca1ee1abcbee17032426224eb905a6d5cbd800b185d0f2bf24608bec478
|
|
| MD5 |
3dbcf09f5e8ffd10fd8fdf7bd3ae853c
|
|
| BLAKE2b-256 |
3af6853d018bdfe032c9d70771154604ab33e7eb9997142a00a2e05da1a85635
|
File details
Details for the file ki2_mqtty_cli-1.5.1-py3-none-any.whl.
File metadata
- Download URL: ki2_mqtty_cli-1.5.1-py3-none-any.whl
- Upload date:
- Size: 13.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.5 CPython/3.10.12 Linux/5.15.0-130-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d2d890fa24dca7cef2ead57921296904c01eeae99db3ee56dcd664273cc27358
|
|
| MD5 |
ef823c3c3db01362c67bfbcba3d6357b
|
|
| BLAKE2b-256 |
ee382a3a6fedbf99a918e4217fbc6b037f0ddf1f0679d2629ed3d0d9353f01a3
|