189 lines
7.1 KiB
C
189 lines
7.1 KiB
C
/*
|
|
* ESPRESSIF MIT License
|
|
*
|
|
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
|
*
|
|
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
|
* it is free of charge, to any person obtaining a copy of this software and associated
|
|
* documentation files (the "Software"), to deal in the Software without restriction, including
|
|
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
|
* to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in all copies or
|
|
* substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
*
|
|
*/
|
|
|
|
#ifndef ESP_MQTT_H_
|
|
#define ESP_MQTT_H_
|
|
|
|
|
|
typedef enum{
|
|
NO_TLS = 0, // 0: disable SSL/TLS, there must be no certificate verify between MQTT server and ESP8266
|
|
TLS_WITHOUT_AUTHENTICATION = 1, // 1: enable SSL/TLS, but there is no a certificate verify
|
|
ONE_WAY_ANTHENTICATION = 2, // 2: enable SSL/TLS, ESP8266 would verify the SSL server certificate at the same time
|
|
TWO_WAY_ANTHENTICATION = 3, // 3: enable SSL/TLS, ESP8266 would verify the SSL server certificate and SSL server would verify ESP8266 certificate
|
|
}TLS_LEVEL;
|
|
|
|
typedef struct {
|
|
uint8* data;
|
|
uint32 len;
|
|
} esp_mqtt_msg_type;
|
|
|
|
#define MQTT_PUB_SEQ_SUCCESS 0
|
|
#define MQTT_PUB_SEQ_FULL 1
|
|
#define MQTT_PUB_SEQ_TIMEOUT 2
|
|
#define MQTT_PUB_SEQ_NAK 3
|
|
#define MQTT_PUB_SEQ_LINKLOST 4
|
|
|
|
|
|
#define MQTT_DEBUG_ENABLE 1
|
|
#if MQTT_DEBUG_ENABLE
|
|
#define MQTT_LOG_EX LOG_RAW
|
|
#else
|
|
#define MQTT_LOG_EX
|
|
#endif
|
|
|
|
|
|
#define MQTT_PUB_MAX_SEQUENCE 1
|
|
typedef void (*mqtt_seq_callback)(int result);
|
|
struct str_mqtt_publish_seq {
|
|
uint32 seqNum;
|
|
uint16 packetId[MQTT_PUB_MAX_SEQUENCE];
|
|
mqtt_seq_callback seqCallback[MQTT_PUB_MAX_SEQUENCE];
|
|
};
|
|
|
|
|
|
#define MQTT_MSG_DELAY_TIMEOUT 100 //100ms
|
|
#define MQTT_MSG_TOPIC_SIZE 128
|
|
|
|
|
|
#define DEFAULT_SECURITY TLS_WITHOUT_AUTHENTICATION // very important: you must config DEFAULT_SECURITY for SSL/TLS
|
|
|
|
#define PUB_TYPE_UPDATE 1
|
|
#define PUB_TYPE_ERROR 2
|
|
#define PUB_TYPE_GET 3
|
|
#define PUB_TYPE_DATA 4
|
|
#define PUB_TYPE_RRPC_REQ 5
|
|
#define PUB_TYPE_RRPC_RSP 6
|
|
#define PUB_TYPE_OTA_INFORM 7
|
|
#define PUB_TYPE_OTA_UPGRADE 8
|
|
#define PUB_TYPE_OTA_PROGRESS 9
|
|
#define PUB_TYPE_SHADOW_UPDATE 10
|
|
#define PUB_TYPE_SHADOW_UPSTATE 11
|
|
#define PUB_TYPE_SHADOW_OTA_INFO 12
|
|
|
|
|
|
#define SUB_TYPE_GET 1
|
|
#define SUB_TYPE_DATA 2
|
|
#define SUB_TYPE_WILL 3
|
|
#define SUB_TYPE_RRPC_REQ 4
|
|
#define SUB_TYPE_INFORM 5
|
|
#define SUB_TYPE_OTA_INFORM 7
|
|
#define SUB_TYPE_OTA_UPGRADE 8
|
|
#define SUB_TYPE_OTA_PROGRESS 9
|
|
#define SUB_TYPE_BROADCAST 10
|
|
#define SUB_TYPE_MAX 11
|
|
|
|
#define MQTT_BROADCAST_MAX_GROUP 90
|
|
|
|
#define CMD_ID_OTA_CMD1 2001
|
|
#define CMD_ID_OTA_CMD2 12000
|
|
|
|
#if (MQTT_SERVER == MQTT_SERVER_ESPRESSIF)
|
|
#define MQTT_BROKER "59.111.148.76"// "192.168.3.237" /* MQTT Broker Address*/
|
|
#define MQTT_PORT 8883// 1883 /* MQTT Port*/
|
|
|
|
#define MQTT_USER_NAME "user_name"
|
|
#define MQTT_USER_PASSWORD "user_password"
|
|
|
|
#define MQTT_SUB_TOPIC "/test/sub/data"
|
|
#define MQTT_PUB_TOPIC "/test/pub/data"
|
|
#endif
|
|
|
|
#if (MQTT_SERVER == MQTT_SERVER_ALIBABA)
|
|
/* These are pre-defined topics */
|
|
#define TOPIC_UPDATE "/"PRODUCT_KEY"/"DEVICE_NAME"/update"
|
|
#define TOPIC_ERROR "/"PRODUCT_KEY"/"DEVICE_NAME"/update/error"
|
|
#define TOPIC_GET "/"PRODUCT_KEY"/"DEVICE_NAME"/get"
|
|
#define TOPIC_DATA "/"PRODUCT_KEY"/"DEVICE_NAME"/data"
|
|
|
|
#define TOPIC_RRPC_REQUEST "/sys/"PRODUCT_KEY"/"DEVICE_NAME"/rrpc/+"
|
|
#define TOPIC_RRPC_RESPONSE "/sys/"PRODUCT_KEY"/"DEVICE_NAME"/rrpc/"
|
|
|
|
#define TOPIC_SHADOW_UPDATE "/shadow/update/"PRODUCT_KEY"/"DEVICE_NAME
|
|
|
|
// these are ota topics, which interact with aliyun cloud
|
|
#define TOPIC_OTA_INFORM "/ota/device/inform/"PRODUCT_KEY"/"DEVICE_NAME
|
|
#define TOPIC_OTA_UPGRADE "/ota/device/upgrade/"PRODUCT_KEY"/"DEVICE_NAME
|
|
#define TOPIC_OTA_PROGRESS "/ota/device/progress/"PRODUCT_KEY"/"DEVICE_NAME
|
|
#endif
|
|
|
|
#if (MQTT_SERVER == MQTT_SERVER_NETEASE)
|
|
#define TOPIC_UPDATE "/%s/%s/update"
|
|
#define TOPIC_GET "/%s/%s/get"
|
|
#define TOPIC_DATA "/%s/%s/data"
|
|
|
|
#define TOPIC_RRPC_REQUEST "/rrpc/%s/%s/get/+"
|
|
#define TOPIC_RRPC_RESPONSE "/rrpc/%s/%s/update/"
|
|
|
|
#define TOPIC_SHADOW_UPDATE "/shadow/%s/%s/update"
|
|
#define TOPIC_BROADCAST "/broadcast/%s/%d/get"
|
|
|
|
// these are ota topics, which interact with netease cloud
|
|
#define TOPIC_OTA_INFORM "/%s/%s/update"
|
|
#define TOPIC_OTA_UPGRADE "/ota/%s/%s/get"
|
|
#define TOPIC_OTA_PROGRESS ""
|
|
#endif
|
|
|
|
/* Data Struct for Pub Sub */
|
|
#if (MQTT_SERVER == MQTT_SERVER_ALIBABA)
|
|
#define MQTT_PUB_UPDATE "%s"
|
|
#define MQTT_PUB_DATA "%s" //"{\"attr_name\":\"temperature\", \"attr_value\":\"%s\"}"
|
|
|
|
#define MQTT_PUB_OTA_INFORM "%s"
|
|
#endif
|
|
|
|
#if (MQTT_SERVER == MQTT_SERVER_NETEASE)
|
|
#define MQTT_PUB_UPDATE "{\"cmdId\":1000,\"cryptoType\":0,\"timeStamp\":"MQTT_PUB_TIMESTAMP"," "\"msgContent\":\""MQTT_PUB_UPDATE_CONTENT"\"}"
|
|
#define MQTT_PUB_UPDATE_CONTENT "{\"mcuCmd\":\"%s\"" "}"
|
|
#define MQTT_PUB_TIMESTAMP "1526625689"
|
|
|
|
|
|
#define MQTT_PUB_DATA "%s"
|
|
#define MQTT_PUB_RRPC_RSP "%s"
|
|
|
|
#define MQTT_PUB_OTA "{\"cmdId\":2000,\"cryptoType\":0,\"timeStamp\":"MQTT_PUB_TIMESTAMP"," "\"msgContent\":\""MQTT_PUB_OTA_CONTENT"\"}"
|
|
#define MQTT_PUB_OTA_CONTENT "{\\\"wifiVersion\\\":%s, \\\"mcuVersion\\\":%s""}"
|
|
|
|
#define MQTT_PUB_OTA_START "{\"cmdId\":12001,\"ver\":1,\"cryptoType\":0,\"timeStamp\":"MQTT_PUB_TIMESTAMP"," "\"msgContent\":\""MQTT_PUB_OTA_START_CONTENT"\"}"
|
|
#define MQTT_PUB_OTA_START_CONTENT "{\\\"OTADevice\\\":%x}"
|
|
|
|
#define MQTT_PUB_OTA_INFO_SHADOW "{\"method\":\"update\",\"state\":"MQTT_PUB_OTA_INFO_CONTENT"\"version\":1}"
|
|
#define MQTT_PUB_OTA_INFO_CONTENT "{\"reported\":{\"OTADevice\":%s" "}},"
|
|
|
|
#define MQTT_PUB_SHADOW_UPDATE "%s"
|
|
#define MQTT_PUB_SHADOW_UPSTATE "{\"method\":\"update\",\"state\":"MQTT_PUB_SHADOW_STATUS"\"version\":1}"
|
|
#define MQTT_PUB_SHADOW_STATUS "{\"reported\":{\"_status\":%s" "}},"
|
|
|
|
#define MQTT_PUB_OTA_INFORM "%s"
|
|
#endif
|
|
|
|
#if (MQTT_SERVER == MQTT_SERVER_NETEASE)
|
|
#define MQTT_WILL_FLAG 1 //
|
|
#define MQTT_WILL_TOPIC TOPIC_SHADOW_UPDATE
|
|
#define MQTT_WILL_MESSAGE "{\"method\":\"update\",\"state\":" "{\"reported\":{\"_status\":0" "}}," "\"version\":1}"
|
|
|
|
#endif
|
|
|
|
|
|
#endif
|