Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

mqtt-watchdir

This simple Python program portably watches a directory recursively and publishes the content of newly created and modified files as payload to an MQTT broker. Files which are deleted are published with a NULL payload.

The path to the directory to watch recursively (default .), as well as a list of files to ignore (*.swp, *.o, *.pyc), the broker host (localhost) and port number (1883) must be specified in via environment variables , together with the topic prefix to which to publish to (watch/).

Installation

git clone https://github.com/jpmens/mqtt-watchdir.git
cd mqtt-watchdir
virtualenv watchdir
source watchdir/bin/activate
pip install -e .

Configuration

Set the following optional environment variables before invoking mqtt-watchdir.py:

  • MQTTHOST (default "localhost") is the name/address of the MQTT broker.

  • MQTTPORT (default 1883) is the TCP port number of the broker.

  • MQTTWATCHDIR (default: ".") is the path to the directory to watch.

  • MQTTQOS (default: 0) is the MQTT Quality of Service (QoS) to use on publish. Allowed values are 0, 1, or 2.

  • MQTTRETAIN (default: 0) specifies whether the “retain” flag should be set on publish. Set to 1 if you want messages to be retained.

  • MQTTPREFIX (default: "watch") is the prefix to be prepended (with a slash) to the MQTT topic name. The topic name is formed from this prefix plus the path name of the file that is being modified (i.e. watched). You can set this to an empty string ("") to avoid prefixing the topic name.

  • MQTTFILTER (default None) allows modifying payload (see below). Takes path to a Python file (e.g. "/path/to/example-filter.py".

  • Set WATCHDEBUG (default: 0) to 1 to show debugging information.

Testing

Launch mosquitto_sub:

mosquitto_sub -v -t 'watch/#'

Launch this program and, in another terminal, try something like this:

echo Hello World > message
echo JP > myname
rm myname

whereupon, on the first window, you should see:

watch/message Hello World
watch/myname JP
watch/myname (null)

Filters

Without a filter (the default), mqtt-watchdir reads the content of a newly created or modified file and uses that as the MQTT payload. By creating and enabling a so-called filter, mqtt-watchdir can pass the payload into said filter (a Python function) to have a payload translated.

Consider the included example-filter.py:

def mfilter(filename, topic, payload):
    '''Return a tuple [pub, newpayload] indicating whether this event
       should be published (True or False) and a new payload string
       or None'''

    print "Filter for topic %s" % topic

    if filename.endswith('.jpg'):
        return False, None

    if payload is not None:
        return True, payload.replace("\n", "-").replace(" ", "+")
    return True, None

The mfilter function is passed the fully qualified path to the file, the (possibly prefixed) MQTT topic name and the payload. In this simple example, spaces and newlines in the payload are replaced by dashes and plusses.

The function must return a tuple with two elements:

  1. The first specifies whether the payload will be published (True) or not (False)

  2. The second is a string with a possibly modified payload or None. If the returned payload is None, the original payload is not modified.

Possible uses of filters include

  • Limiting payload lengths

  • Conversion to JSON

  • Ignore certain file types (e.g. binary data)

  • Process content of files, say, YAML or JSON, and extract elements returning as string

Requirements

  • watchdog, a Python library to monitor file-system events.

  • Mosquitto’s Python module

Metadata

Release files for mqtt-watchdir 2.0-10-g926c526

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mqtt-watchdir 2.0-10-g926c526
File Size Uploaded Provenance
mqtt-watchdir-2.0-10-g926c526.tar.gz 7.2 kB Without provenance Details

Release files / mqtt-watchdir-2.0-10-g926c526.tar.gz

Download URL mqtt-watchdir-2.0-10-g926c526.tar.gz
Size 7.2 kB
Tags Source
SHA-256 checksum
How to use checksums
3c4ccecdb6f67d0261a40fe1a197b20a96c5ff9ade5e735966eef85a6253a56e
BLAKE2b-256 checksum
How to use checksums
6a606b0d9ac18259d9a1d5dce1d65798aa453eb1004c43df9456e0cc4385e6f7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Security for mqtt-watchdir 2.0-10-g926c526

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page