Thingsboard MQTT publish messages “en masse”
1 min readAug 2, 2019
If we include timestamp in your message, we can publish multiple messages in one go.
- 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.