https://github.com/27escape/mqtt2jsonl
Record and replay MQTT messages sent to a particular topic. The messages are recorded to a JSONL (https://jsonlines.org/) file
https://github.com/27escape/mqtt2jsonl
cli jsonlines mqtt python python3 record recorder replay
Last synced: 7 months ago
JSON representation
Record and replay MQTT messages sent to a particular topic. The messages are recorded to a JSONL (https://jsonlines.org/) file
- Host: GitHub
- URL: https://github.com/27escape/mqtt2jsonl
- Owner: 27escape
- License: apache-2.0
- Created: 2024-09-30T14:05:57.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-01-20T10:21:33.000Z (9 months ago)
- Last Synced: 2025-01-29T02:54:22.780Z (9 months ago)
- Topics: cli, jsonlines, mqtt, python, python3, record, recorder, replay
- Language: Python
- Homepage:
- Size: 65.4 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# mqtt2jsonl
This is a simple script to listen to MQTT messages and store them into a [JSONL](https://jsonlines.org/) file. This JSONL file can then be replayed at a later date, which is useful for testing MQTT systems.
I had a quick look on the Internet and could not see anything similar, though it likely exists, this just helps me at the moment.
## Installation
**TODO: Fix this when I understand how to package things properly**
This is a python3 script, if that does not match your requirements, please look elsewhere.
This is my first python code, so I have not created an account with PyPI or whatever, so you need to install from this dist
install it
```
pip install -r requirements.txt
pip install -e .
```
This will make the script `mqtt2jsonl` available either in the virtualenv you are running in or your complete environmentIf you want to make changes and rebuild, remember to update the version number in the `pyproject.toml` file.
## Using it
Assumption that you are using linux/unix otherwise prefix the command with `python3`, assuming your other OS has python3 installed and its accessible from a command prompt.
Help is available
```
./mqtt2jsonl -h
usage: mqtt2jsonl [-h] [-v] [-f] [-j JSONL] [-s SERVER] [-p PORT] [-t TOPIC] [-d DELAY] cmdEither record or replay MQTT via a JSONL file
positional arguments:
cmd Command to perform against the MQTT topic queue, 'record' or 'replay'options:
-h, --help show this help message and exit
-v, --verbose Increase level of logging from WARNING to INFO
-f, --force Force overwrite when destination file already exists
-j JSONL, --jsonl JSONL
JSONL file to read from or write to
-s SERVER, --server SERVER
MQTT server name/ip to connect to (localhost)
-p PORT, --port PORT MQTT port to connect to (1883)
-t TOPIC, --topic TOPIC
MQTT topic queue to listen to (for recording), usual wildcards apply (default everying as '#')
-d DELAY, --delay DELAY
For replay, override the recorded delay between messages to use an artifical
value in msecs, 0 means use record value
```### Record
Connect to default localhost port 1883, with a wildcard topic, overwriting any previous file
```
./mqtt2jsonl -j /tmp/record.jsonl record -t 'some_topic/#' -f
```Connect to to named server and port, use default topic of everything (#)
```
./mqtt2jsonl -j /tmp/record.jsonl record --server some_mqtt_server --port 1000
```### Replay
Connect to default localhost port 1883, replay at the recorded rate
```
./mqtt2jsonl -j /tmp/record.jsonl replay
```Connect to to named server and port, replay at a fast rate of one message per 5ms
```
./mqtt2jsonl -j /tmp/record.jsonl record --server some_mqtt_server --port 1000 --delay=5
```## Improvements / TODO
There are a few things that could possibly make this a better more general tool but I don't need these features right now
- [ ] Create a PyPI account and upload it there
- [ ] Log in with a username/password
- [ ] Log into a MQTT server that uses TLS