递归监视目录修改并将文件内容发布到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)。允许的值是0、1或2。
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函数。在这个简单的例子中,有效负载中的空格和新行被替换为破折号和加号。
该函数必须返回一个包含两个元素的元组
第一个指定是否发布有效负载(True)或不是(False)
第二个是一个可能已修改的有效负载字符串或None。如果返回的有效负载是None,则不修改原始有效负载。
过滤器的一些可能用途包括
限制有效负载长度
转换为JSON
忽略某些文件类型(例如,二进制数据)
处理文件内容,例如YAML或JSON,并作为字符串返回提取的元素
要求
项目详情
mqtt-watchdir-2.4.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4c081b8c4b72a16f2377f784f6d579ba1e6a389cc749e7e9e4d2bacb7d02143e |
|
MD5 | 1faf87751547c38b1beecd36c3b8d4ab |
|
BLAKE2b-256 | 9be60db90ebc537148221eb6cf63552a084e74684edff04c9965320c7ba7c576 |