title: How to troubleshoot mqtt and AWS iot
body: <p>I am newbie to AWS IoT and MQTT as well. I am trying with simple example to read payload from AWS and publish payload to AWS. I am able to read payload on device but not able to publish. When I update shadow state from AWS console my raspberry pi able to receive the message but when I am publishing nothing happening. Not even state is changing on AWS console.</p>
  
  <p>Code is attached. Please suggest.</p>
  
  <pre><code>def on_connect(mqttc, obj, flags, rc):
      if rc==0:
          print ("Subscriber Connection status code: "+str(rc)+" | Connection status: successful")
      elif rc==1:
          print ("Subscriber Connection status code: "+str(rc)+" | Connection status: Connection refused")
  
  def on_subscribe(mqttc, obj, mid, granted_qos):
      print("Subscribed: "+str(mid)+" "+str(granted_qos)+"data"+str(obj))
      first_message()
  
  def on_message(mqttc, obj, msg):
      print("Received message from topic: "+msg.topic+" | QoS: "+str(msg.qos)+" | Data Received: "+str(msg.payload))
  
  def on_publish(client, userdata, mid):
      print("Message is published")
  
  def first_message():
      data = {} data['r'] = 2 data['g'] = 255 data['b'] = 95 data2 = {} data2['color'] = data data3 = {} data3['reported'] = data2 data4 = {}
      data4['state'] = data3 json_data = json.dumps(data4) print(str(json_data))
      (rc, mid) = mqttc.publish("$aws/things/thirdthing/shadow/update/", str(json_data), 1)
  
  mqttc = mqtt.Client(client_id="thirdthing1")
  mqttc.on_connect = on_connect
  mqttc.on_subscribe = on_subscribe
  mqttc.on_message = on_message
  mqttc.on_publish = on_publish
  mqttc.tls_set("/home/pi/deviceSDK/root-CA.crt",
                  certfile="/home/pi/deviceSDK/7391d7d21d-certificate.pem.crt",
                  keyfile="/home/pi/deviceSDK/7391d7d21d-private.pem.key",
                tls_version=ssl.PROTOCOL_TLSv1_2,
                ciphers=None)
  mqttc.connect("AYYCW0HM971XS.iot.us-west-2.amazonaws.com", port=8883) #AWS IoT service hostname and portno
  mqttc.subscribe("$aws/things/thirdthing/shadow/update/#", qos=1) #The names of these topics start with $aws/things/thingName/shadow."
  mqttc.loop_forever()
  </code></pre>