Running notification plugins standalone#
About#
Using the mqttwarn
command, you can invoke an individual notification plugin
directly, without the dispatching and transformation machinery, and without
needing to start it as a service.
This can be used for custom notification programs, and for debugging them, without needing to exercise a full end-to-end MQTT publishing workflow.
Details#
To launch a plugin standalone, the commands in the next sections will give you an idea how to pass relevant information on the command line. Please note that all configuration options are obtained as strings in JSON format.
Many plugins will work without a configuration, and only need an --options
parameter. Others will need an additional baseline configuration, obtained per
--config
parameter. Alternatively, a path to the configuration file can be
specified using the --config-file
parameter.
Synopsis#
Launch log
service plugin with a few target address descriptor options.
mqttwarn --plugin=log --options='{"message": "Hello world", "addrs": ["crit"]}'
Tip
For producing JSON with command line / script programs, you can use the excellent jo program, so you will not have to fiddle with curly braces and quotes too much.
mqttwarn --plugin=log --options="$(jo message="Hello world" addrs=$(jo -a crit))"
Examples#
The best way to learn about this feature, is on behalf of a few more example invocations.
Invoke plugins that do not need a configuration, like log
, file
, or pushover
.
# Launch "file" service plugin
mqttwarn --plugin=file --options='{"message": "Hello world\n", "addrs": ["/tmp/mqttwarn.err"]}'
# Launch "pushover" service plugin
mqttwarn --plugin=pushover --options='{"title": "About", "message": "Hello world", "addrs": ["userkey", "token"], "priority": 6}'
Invoke plugins that require a configuration, like ssh
.
# Launch "ssh" service plugin
mqttwarn --plugin=ssh --config='{"host": "ssh.example.org", "port": 22, "user": "foo", "password": "bar"}' --options='{"addrs": ["command with substitution %s"], "payload": "{\"args\": \"192.168.0.1\"}"}'
Invoke ntfy
plugin.
# Launch "ntfy" service plugin
mqttwarn --plugin=ntfy --options='{"addrs": {"url": "http://localhost:5555/testdrive"}, "title": "Example notification", "message": "Hello world"}' --data='{"tags": "foo,bar,äöü", "priority": "high"}'
# Launch "ntfy" service plugin, and add remote attachment
mqttwarn --plugin=ntfy --options='{"addrs": {"url": "http://localhost:5555/testdrive"}, "title": "Example notification", "message": "Hello world"}' --data='{"attach": "https://unsplash.com/photos/spdQ1dVuIHw/download?w=320", "filename": "goat.jpg"}'
# Launch "ntfy" service plugin, and add attachment from local filesystem
mqttwarn --plugin=ntfy --options='{"addrs": {"url": "http://localhost:5555/testdrive", "file": "goat.jpg"}, "title": "Example notification", "message": "Hello world"}'
Invoke external plugin.
# Launch "cloudflare_zone" service plugin from "mqttwarn-contrib"
pip install mqttwarn-contrib
mqttwarn --plugin=mqttwarn_contrib.services.cloudflare_zone --config='{"auth-email": "foo", "auth-key": "bar"}' --options='{"addrs": ["0815", "www.example.org", ""], "message": "192.168.0.1"}'