Arduino » Enrich temperature readings#
About#
Assuming we get, from an Arduino, say, a single numerical value in the payload of an MQTT message, we want to generate JSON with some additional fields. Using a Jinja2 template for the task, does exactly what we need.
Implementation#
The following target configuration invokes the template:
[arduino/temp]
targets = log:info, http:graylog2
template = temp2json.json
The Jinja2 template looks like this.
{#
We expect a single numeric temperature value in `payload'.
Return JSON suitable for Graylog2 (requires `host` and `short_message`).
Define a data structure in Jinja2 and return it as a JSON string.
Note how transformation data (produced within mqttwarn) is used:
The variables `_dtiso` and `payload` carry the timestamp and the
payload respectively.
#}
{% set data = {
'host': topic,
'short_message': "Heat " + payload,
'tst': _dtiso,
'temperature': payload,
'woohooo': 17,
}
%}
{{ data | jsonify }}
An example JSON string returned by that template is then passed to the configured targets.
{"host": "arduino/temp", "woohooo": 17, "tst": "2014-04-13T09:25:46.247150Z", "temperature": "22", "short_message": "Heat 22"}