2018-02-17 11:42:41 +07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/*
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  This  file  is  subject  to  the  terms  and  conditions  defined  in 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  file  ' LICENSE ' ,  which  is  part  of  this  source  code  package . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  Tuan  PM  < tuanpm  at  live  dot  com > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-02-16 02:40:16 +07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# ifndef _MQTT_CLIENT_H_ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define _MQTT_CLIENT_H_ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  <stdint.h> 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  <stdbool.h> 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  <string.h> 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-26 16:07:20 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "esp_err.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-16 02:40:16 +07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  "mqtt_config.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-27 04:50:31 +03:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifdef __cplusplus 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								extern  " C "  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-02-16 02:40:16 +07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								typedef  struct  esp_mqtt_client *  esp_mqtt_client_handle_t ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-10-16 09:15:44 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/**
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  @ brief  MQTT  event  types . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  User  event  handler  receives  context  data  in  ` esp_mqtt_event_t `  structure  with 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *   -  ` user_context `  -  user  data  from  ` esp_mqtt_client_config_t ` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *   -  ` client `  -  mqtt  client  handle 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *   -  various  other  data  depending  on  event  type 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 */ 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-16 02:40:16 +07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								typedef  enum  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    MQTT_EVENT_ERROR  =  0 , 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-16 09:15:44 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    MQTT_EVENT_CONNECTED ,           /*!< connected event, additional context: session_present flag */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    MQTT_EVENT_DISCONNECTED ,        /*!< disconnected event */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    MQTT_EVENT_SUBSCRIBED ,          /*!< subscribed event, additional context: msg_id */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    MQTT_EVENT_UNSUBSCRIBED ,        /*!< unsubscribed event */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    MQTT_EVENT_PUBLISHED ,           /*!< published event, additional context:  msg_id */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    MQTT_EVENT_DATA ,                /*!< data event, additional context:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                                        -  msg_id                message  id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                                        -  topic                 pointer  to  the  received  topic 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                                        -  topic_len             length  of  the  topic 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                                        -  data                  pointer  to  the  received  data 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                                        -  data_len              length  of  the  data  for  this  event 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                                        -  current_data_offset   offset  of  the  current  data  for  this  event 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                                        -  total_data_len        total  length  of  the  data  received 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                                         */ 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 23:26:35 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    MQTT_EVENT_BEFORE_CONNECT ,      /*!< The event occurs before connecting */ 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-16 02:40:16 +07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								}  esp_mqtt_event_id_t ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-02-22 10:07:57 +07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								typedef  enum  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    MQTT_TRANSPORT_UNKNOWN  =  0x0 , 
							 
						 
					
						
							
								
									
										
										
										
											2018-08-16 18:35:08 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    MQTT_TRANSPORT_OVER_TCP ,       /*!< MQTT over TCP, using scheme: ``mqtt`` */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    MQTT_TRANSPORT_OVER_SSL ,       /*!< MQTT over SSL, using scheme: ``mqtts`` */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    MQTT_TRANSPORT_OVER_WS ,        /*!< MQTT over Websocket, using scheme:: ``ws`` */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    MQTT_TRANSPORT_OVER_WSS        /*!< MQTT over Websocket Secure, using scheme: ``wss`` */ 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-22 10:07:57 +07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								}  esp_mqtt_transport_t ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-08-21 15:31:10 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/**
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  MQTT  event  configuration  structure 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 */ 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-16 02:40:16 +07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								typedef  struct  { 
							 
						 
					
						
							
								
									
										
										
										
											2018-08-21 15:31:10 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    esp_mqtt_event_id_t  event_id ;        /*!< MQTT event type */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    esp_mqtt_client_handle_t  client ;     /*!< MQTT client handle for this event */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    void  * user_context ;                  /*!< User context passed from MQTT client config */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    char  * data ;                          /*!< Data asociated with this event */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int  data_len ;                        /*!< Lenght of the data for this event */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int  total_data_len ;                  /*!< Total length of the data (longer data are supplied with multiple events) */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int  current_data_offset ;             /*!< Actual offset for the data asociated with this event */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    char  * topic ;                         /*!< Topic asociated with this event */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int  topic_len ;                       /*!< Length of the topic for this event asociated with this event */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int  msg_id ;                          /*!< MQTT messaged id of message */ 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 16:06:17 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    int  session_present ;                 /*!< MQTT session_present flag for connection event */ 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-16 02:40:16 +07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								}  esp_mqtt_event_t ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								typedef  esp_mqtt_event_t *  esp_mqtt_event_handle_t ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								typedef  esp_err_t  ( *  mqtt_event_callback_t ) ( esp_mqtt_event_handle_t  event ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-08-21 15:31:10 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/**
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  MQTT  client  configuration  structure 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 */ 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-16 02:40:16 +07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								typedef  struct  { 
							 
						 
					
						
							
								
									
										
										
										
											2018-08-16 18:35:08 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    mqtt_event_callback_t  event_handle ;      /*!< handle for MQTT events */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    const  char  * host ;                        /*!< MQTT server domain (ipv4 as string) */ 
							 
						 
					
						
							
								
									
										
										
										
											2018-08-21 15:31:10 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    const  char  * uri ;                         /*!< Complete MQTT broker URI */ 
							 
						 
					
						
							
								
									
										
										
										
											2018-08-16 18:35:08 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    uint32_t  port ;                           /*!< MQTT server port */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    const  char  * client_id ;                   /*!< default client id is ``ESP32_%CHIPID%`` where %CHIPID% are last 3 bytes of MAC address in hex format */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    const  char  * username ;                    /*!< MQTT username */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    const  char  * password ;                    /*!< MQTT password */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    const  char  * lwt_topic ;                   /*!< LWT (Last Will and Testament) message topic (NULL by default) */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    const  char  * lwt_msg ;                     /*!< LWT message (NULL by default) */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int  lwt_qos ;                             /*!< LWT message qos */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int  lwt_retain ;                          /*!< LWT retained message flag */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int  lwt_msg_len ;                         /*!< LWT message length */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int  disable_clean_session ;               /*!< mqtt clean session, default clean_session is true */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int  keepalive ;                           /*!< mqtt keepalive, default is 120 seconds */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bool  disable_auto_reconnect ;             /*!< this mqtt client will reconnect to server (when errors/disconnect). Set disable_auto_reconnect=true to disable */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    void  * user_context ;                      /*!< pass user context to this option, then can receive that context in ``event->user_context`` */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int  task_prio ;                           /*!< MQTT task priority, default is 5, can be changed in ``make menuconfig`` */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int  task_stack ;                          /*!< MQTT task stack size, default is 6144 bytes, can be changed in ``make menuconfig`` */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int  buffer_size ;                         /*!< size of MQTT send/receive buffer, default is 1024 */ 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-16 09:15:44 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    const  char  * cert_pem ;                    /*!< Pointer to certificate data in PEM format for server verify (with SSL), default is NULL, not required to verify the server */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    const  char  * client_cert_pem ;             /*!< Pointer to certificate data in PEM format for SSL mutual authentication, default is NULL, not required if mutual authentication is not needed. If it is not NULL, also `client_key_pem` has to be provided. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    const  char  * client_key_pem ;              /*!< Pointer to private key data in PEM format for SSL mutual authentication, default is NULL, not required if mutual authentication is not needed. If it is not NULL, also `client_cert_pem` has to be provided. */ 
							 
						 
					
						
							
								
									
										
										
										
											2018-08-16 18:35:08 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    esp_mqtt_transport_t  transport ;          /*!< overrides URI transport */ 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 23:26:35 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    int  refresh_connection_after_ms ;         /*!< Refresh connection after this value (in milliseconds) */ 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-16 02:40:16 +07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								}  esp_mqtt_client_config_t ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								esp_mqtt_client_handle_t  esp_mqtt_client_init ( const  esp_mqtt_client_config_t  * config ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								esp_err_t  esp_mqtt_client_set_uri ( esp_mqtt_client_handle_t  client ,  const  char  * uri ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								esp_err_t  esp_mqtt_client_start ( esp_mqtt_client_handle_t  client ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								esp_err_t  esp_mqtt_client_stop ( esp_mqtt_client_handle_t  client ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								esp_err_t  esp_mqtt_client_subscribe ( esp_mqtt_client_handle_t  client ,  const  char  * topic ,  int  qos ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								esp_err_t  esp_mqtt_client_unsubscribe ( esp_mqtt_client_handle_t  client ,  const  char  * topic ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								int  esp_mqtt_client_publish ( esp_mqtt_client_handle_t  client ,  const  char  * topic ,  const  char  * data ,  int  len ,  int  qos ,  int  retain ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								esp_err_t  esp_mqtt_client_destroy ( esp_mqtt_client_handle_t  client ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 23:26:35 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								esp_err_t  esp_mqtt_set_config ( esp_mqtt_client_handle_t  client ,  const  esp_mqtt_client_config_t  * config ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-16 02:40:16 +07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-27 04:50:31 +03:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifdef __cplusplus 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif  //__cplusplus
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-02-16 02:40:16 +07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# endif