I strongly recomend to use on publish if your application publish a message in short interval. On publish pools a connection with MQTT Broker permanently, and you can reduce connection overhead by using this.
on_publish.py
# !/usr/bin/python
# -*- coding: utf-8 -*-
import mosquitto
import time
import datetime
import random
def on_connect(mosq, obj, rc):
print("rc: "+str(rc))
def on_publish(mosq, obj, mid):
print("mid: "+str(mid))
run = -1
mqtt = mosquitto.Mosquitto("test", run)
mqtt.on_connect = on_connect
mqtt.on_publish = on_publish
MQTT_BROKER = "{MQTT Broker IP}"
MQTT_PORT = 1883
MQTT_TIMEOUT = 0.5
count = 0
mqtt.connect(MQTT_BROKER, MQTT_PORT)
while mqtt.loop(timeout=MQTT_TIMEOUT) == 0:
now = datetime.datetime.now()
timestamp = time.mktime(now.timetuple()) + (now.microsecond / 1000000.0)
value = random.randint(1,100)
payload = "[%s] %s,%s" % (str(count), str(timestamp), str(value))
mqtt.publish("test", payload)
count = count + 1
pass