Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
msoak(1)			MQTT utilities			      msoak(1)

NAME
       msoak - consume messages	from arbitrary MQTT brokers and	subscriptions

SYNOPSIS
       msoak [ -v ] configuration

DESCRIPTION
       msoak  is  a utility with which to simultaneously subscribe to an arbi-
       trary number of topics on any number of	MQTT  brokers  and  optionally
       modify  or  normalize  received payloads	before printing	them out. This
       utility was created to back up to a central location messages  received
       by  a hand full of brokers; instead of launching	(and having to monitor
       success of) a large number of mosquitto_sub(1) programs,	msoak took  on
       the job.

       msoak  uses  asynchronous  connects  to the MQTT	brokers	so that	it can
       handle situations in which a broker may temporarily be unavailable even
       when msoak initially starts, and	msoak embeds  a	 Lua  interpreter  for
       which you can create scripts which act on messages received to, for ex-
       ample, trigger actions.

       msoak  can  be used with, say, tinylog(8) to create compressed archives
       of data.

       msoak my.config | tinylog -k 30 -s 1077936128 -z	archive

OPTIONS
       -v   print version information and exit.

CONFIGURATION
       msoak reads the configuration file  using  libconfig(3)	utility	 func-
       tions. This is a	short example:

	  # this is a comment

	  luascript = "example.lua"

	  servers = (
		      {	id = "local"
			host = "localhost"
			port = 1883
			fmt = "greet"
			showid = true
			showtopic = true
			topics = [
			   "tests/sponge/#",
			   "some/thing/else/+/+"
			]
		      },
		      {	id = "tmo"
			host = "test.mosquitto.org"
			qos = 0
			showid = true
			showtopic = true
			topics = [
			    "home/special",
			    "nothome/dont"
			]
		      }
		  );

       The  configuration  consists  of	global settings	and a list or array of
       servers,	each with a number of settings.

   global variables
       luascript the path to the Lua script file to use. If left unset,	no Lua
		 processing is performed.

       verbose	 whether or not	to be verbose (default true)

   server array
       id	 identifier for	the connection,	also shown on output. If id is
		 unset we generate a numeric id.

       host	 host name or address of the MQTT broker. Defaults  to	local-
		 host.

       port	 the TCP port number for the MQTT broker. Defaults to 1883.

       clientid	 MQTT  clientId	 to use. The client identifier defaults	to the
		 string	msoak-hostname:basename(configfilename)	 so  that  the
		 program  can  run  on multiple	hosts with the same configura-
		 tion.

       qos	 MQTT QoS (default 1)

       user	 username for the MQTT connection

       pass	 password for the MQTT connection; see passenv	to  omit  from
		 having	 to  specify clear-text	passwords in the configuration
		 file.

       passenv	 name of environment variable (including $) from which to  ob-
		 tain pass.

       showretained
		 consume retained messages; default true

       cacert	 path  to PEM-encoded CA certificate chain for TLS connections
		 to MQTT broker

       showid	 true or false,	default	true; whether to print id on output.

       showtopic true or false,	default	true; whether to print topic  name  on
		 output.

       topics	 array	of  strings  with topic	branch names for msoak to sub-
		 scribe	to.

       fmt	 optional name of Lua formatting function (see below).

   Formatting
       By default, the received	payload	is printed to standard output, option-
       ally prefixed by	the message topic (if showtopic	is true),  and	it  is
       preceeded by the	connection identifier if showid	is true.

       If  fmt	is  set,  it contains a	string with the	name of	a Lua function
       from the	Lua script specified in	the luascript global. this function is
       used to format the payload msoak	receives;  the	return	value  of  the
       function	replaces the original payload and is printed out.

       If msoak	can decode the payload into JSON (i.e. the message begins with
       a  brace	({) and	the JSON can be	decoded), it will invoke the Lua func-
       tion to obtain output.

	  function init()
	      if msoak.verbose then
		  msoak.log(msoak.luascript .. " starting up")
	      end
	  end

	  function greet(topic,	_type, d)
	      s	= string.format("Hello %s -> now=%s", d.name,
		  msoak.strftime("%TZ"))
	      return s
	  end

	  function exit()
	      msoak.log("Hasta la vista, baby!")
	  end

       The optional init() and exit() functions	are invoked when msoak	begins
       and  ends  respectively.	The greet function is invoked for each message
       for which a server in the configuration file contains fmt = "greet".

   Lua functions
       There are a few variables and  functions	 msoak	implements  which  are
       available to the	Lua scripts you	use.

       version	 returns the msoak version number as a string

       luascript returns the file name of the luascript	global variable

       verbose	 is a boolean which indicates whether msoak is running in ver-
		 bose mode

       msoak_log()
		 accepts  a  string  which  is	printed	 to stderr prefixed by
		 "MSOAKLOG:".

       msoak_strftime()
		 expects a format string and integer  seconds  and  implements
		 strtime(3)  for Lua with the specified	format and seconds and
		 returns the string result to Lua.  As a special case, if sec-
		 onds is less than one it uses current time.

   JSON
       When configured to use a	Lua script file, msoak attempts	to decode  in-
       coming  JSON  payloads  and  will pass the decoded JSON elements	to the
       configured fmt function as a table with these additional	elements in it

       _conn_id	 the original connection id

       _conn_host
		 the hostname of the connection

       _conn_port
		 the port number of the	connection

       _conn_topic
		 the MQTT topic	on which the original payload message was  re-
		 ceived

       Note  that  if no luascript was specified and the payload contains JSON
       it will be dumped as is to stdout.

ENVIRONMENT
       Any number of environment variables may be used by msoak	 if  specified
       in passenv settings with	the configuration.

BUGS
       What's with the strange name? Just as I started working on this program
       I learned about sponge(1) and loved the name. The rest is history.

       Note  that there	are different versions of libconfig(3) floating	around
       which may have effects on the syntax permitted in msoak's configuration
       file .

AUTHOR
       Jan-Piet	Mens, https://github.com/jpmens/msoak

SEE ALSO
       mosquitto_sub(1), mqttwarn, sponge(1), strftime(1), tinylog(8)

jpmens				 January 2020			      msoak(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=msoak&sektion=1&manpath=FreeBSD+Ports+15.0>

home | help