I am trying to publish image data to MQTT (CloudMQTT) with following code, but the data is not appearing on MQTT, don't even see any data on MQTT broker.
import identity
import json
import paho.mqtt.client as mqtt
import time
import datetime
import RPi.GPIO as GPIO
import bme280
import picamera
import base64
DEVICE_ID = identity.local_hostname()
config = json.loads(open('config.json').read())
SERVER = config['mqtt1']['hostname']
PORT = int(config['mqtt1']['port'])
USER = config['mqtt1']['username']
PASSWORD = config['mqtt1']['password']
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected to broker")
else:
print("Connection failed")
def on_subscribe(client, userdata, mid, granted_qos):
print("Subscribed: " + str(message.topic) + " " + str(mid) + " " + str(granted_qos))
def on_message(client, userdata, message):
print("message topic=",message.topic)
print("message qos=",message.qos)
print("message retain flag=",message.retain)
client = mqtt.Client(DEVICE_ID)
camera = picamera.PiCamera()
camera.resolution = (1280, 720)
client.username_pw_set(USER, password=PASSWORD)
client.on_connect= on_connect
client.on_subscribe= on_subscribe
client.on_message= on_message
client.connect(SERVER, port=PORT)
client.loop_start()
topics = [("DOWN/site01/pod02",2)]
client.subscribe(topics)
data = {'device_id':DEVICE_ID}
PUBLISH_DATA = "UP/" + "site01/" + DEVICE_ID + "/data"
PUBLISH_IMAGE = "UP/" + "site01/" + DEVICE_ID + "/image"
try:
while True:
data['date'] = str(datetime.datetime.today().isoformat())
data['temperature'],data['pressure'],data['humidity'] = bme280.readBME280All()
data['switch1'] = GPIO.input(14)
data['switch2'] = GPIO.input(15)
client.publish(PUBLISH_DATA,json.dumps(data))
camera.capture('image.jpg')
image_data = open("image.jpg", "rb")
image_string = image_data.read()
imageByteArray = bytes(image_string)
client.publish(PUBLISH_IMAGE, imageByteArray, 0)
time.sleep(10)
except KeyboardInterrupt:
camera.close()
client.disconnect()
client.loop_stop()
GPIO.cleanup()
Anyone know what I am missing here?