/* * ESPRESSIF MIT License * * Copyright (c) 2015 * * 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