跳转到主要内容

递归监视目录修改并将文件内容发布到MQTT代理

项目描述

这是一个简单的Python程序,可以便携地递归监视目录,并将新创建和修改的文件的内容作为有效载荷发布到MQTT代理。被删除的文件将使用NULL有效载荷发布。

要递归监视的目录的路径(默认 .),以及要忽略的文件列表(*.swp*.o*.pyc),代理主机(localhost)和端口号(1883),以及要发布的主题前缀(watch/),都必须通过环境变量指定。

安装

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

配置

在调用 mqtt-watchdir.py 之前设置以下可选环境变量

  • MQTTHOST(默认 "localhost")是MQTT代理的名称/地址。

  • MQTTPORT(默认 1883)是代理的TCP端口号。

  • MQTTUSERNAME 是连接到代理的用户名。

  • MQTTPASSWORD 是连接到代理的密码。

  • MQTTWATCHDIR(默认: ".")是要监视的目录的路径。

  • MQTTQOS(默认值:0)指定在发布时使用的MQTT服务质量(QoS)。允许的值是012

  • MQTTRETAIN(默认值:0)指定是否在发布时设置“保留”标志。如果您希望消息被保留,则设置为1

  • MQTTPREFIX(默认值:"watch")是要添加到(与斜杠一起)MQTT主题名称的前缀。主题名称由该前缀加上正在修改的文件的路径名称形成(即监视的)。您可以将其设置为空字符串(""),以避免在主题名称前添加前缀。

  • MQTTFILTER(默认值 None)允许修改有效负载(见下文)。接受Python文件的路径(例如,"/path/to/example-filter.py")。

  • MQTTFIXEDTOPIC(默认值 None)设置所有消息都发布的MQTT主题。如果设置,则覆盖并忽略MQTTPREFIX设置。

  • WATCHDEBUG(默认值:0)设置为1以显示调试信息。

测试

启动mosquitto_sub

mosquitto_sub -v -t 'watch/#'

启动此程序,然后在另一个终端中尝试以下内容

echo Hello World > message
echo JP > myname
rm myname

随后,在第一个窗口中,您应该看到

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

过滤器

在没有过滤器(默认)的情况下,mqtt-watchdir读取新创建或修改的文件的内容,并将其用作MQTT有效负载。通过创建和启用所谓的过滤器mqtt-watchdir可以将有效负载传递到该过滤器(Python函数)以进行翻译。

考虑包含的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

将文件的全限定路径、(可能已前缀的)MQTT主题名称和有效负载传递给mfilter函数。在这个简单的例子中,有效负载中的空格和新行被替换为破折号和加号。

该函数必须返回一个包含两个元素的元组

  1. 第一个指定是否发布有效负载(True)或不是(False)

  2. 第二个是一个可能已修改的有效负载字符串或None。如果返回的有效负载是None,则不修改原始有效负载。

过滤器的一些可能用途包括

  • 限制有效负载长度

  • 转换为JSON

  • 忽略某些文件类型(例如,二进制数据)

  • 处理文件内容,例如YAML或JSON,并作为字符串返回提取的元素

要求

  • watchdog,一个用于监视文件系统事件的Python库。

  • Paho-MQTT的Python模块

项目详情


下载文件

下载适合您平台的自定义文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

mqtt-watchdir-2.4.tar.gz (8.0 kB 查看哈希值)

上传于 源代码

支持