Thingsboard MQTT publish messages “en masse”

Juniarto Samsudin
1 min readAug 2, 2019

--

If we include timestamp in your message, we can publish multiple messages in one go.

  1. Include timestamp in your payload.

Payload format (https://thingsboard.io/docs/reference/mqtt-api/#telemetry-upload-api)

{"ts":1451649600512, "values":{"key1":"value1", "key2":"value2"}}p.s:  ts: 13 digit timestamp.example:
{"ts":1451649600512, "values":{"temperature":31, "humidity": 18}}

In the example above, we assume that “1451649600512” is a unix timestamp with milliseconds precision. For example, the value ‘1451649600512’ corresponds to ‘Fri, 01 Jan 2016 12:00:00.512 GMT’

How to get 13 digit unix timestamp.

from datetime import datetime
//You cannot use this format
mytimestamp = datetime.timestamp(now)
//Convert it to 10 digit timestamp,use this in our payloadthetimestamp = int(round(mytimestamp * 1000))

2. Package your payload in the message format.

msg = ("v1/devices/me/telemetry", json.dumps(payload, use_decimal=True), 2, True)

3. Accumulate messages into a list.

msg_list.append(msg)

4. Publish en-masse

import paho.mqtt.publish as publish
THINGSBOARD_HOST = "172.20.98.140"
ACCESS_TOKEN1 = "rke3pFygrkgnKZTam6Kz"
publish.multiple(msg_list,
hostname=THINGSBOARD_HOST,
port=1883,
client_id="",
keepalive=60,
will=None,
auth={'username': ACCESS_TOKEN1},
tls=None,
protocol=mqtt.MQTTv31,
transport="tcp")

That’s all folks.

--

--

No responses yet