// #ifndef BLINKER_ESP_MQTT_LP_H // #define BLINKER_ESP_MQTT_LP_H // #if defined(ESP8266) || defined(ESP32) // #ifndef BLINKER_ARDUINOJSON // #define BLINKER_ARDUINOJSON // #endif // #include "Adapters/BlinkerMQTTLP.h" // #include "Blinker/BlinkerApi.h" // #include "modules/ArduinoJson/ArduinoJson.h" // #if defined(ESP8266) // #include <ESP8266mDNS.h> // #include <ESP8266WiFi.h> // #include <ESP8266WebServer.h> // #elif defined(ESP32) // #include <ESPmDNS.h> // #include <WiFi.h> // #include <WebServer.h> // #endif // typedef BlinkerApi BApi; // class BlinkerESPMQTTLP : public BlinkerApi // { // public : // #if defined(BLINKER_ESP_SMARTCONFIG) || defined(BLINKER_APCONFIG) // void begin(const char* _auth) // { // #if defined(BLINKER_ALIGENIE_LIGHT) // String _aliType = BLINKER_F("&aliType=light"); // #elif defined(BLINKER_ALIGENIE_OUTLET) // String _aliType = BLINKER_F("&aliType=outlet"); // #elif defined(BLINKER_ALIGENIE_MULTI_OUTLET) // String _aliType = BLINKER_F("&aliType=multi_outlet"); // #elif defined(BLINKER_ALIGENIE_SENSOR) // String _aliType = BLINKER_F("&aliType=sensor"); // #else // String _aliType = BLINKER_F(""); // #endif // #if defined(BLINKER_DUEROS_LIGHT) // String _duerType = BLINKER_F("&duerType=LIGHT"); // #elif defined(BLINKER_DUEROS_OUTLET) // String _duerType = BLINKER_F("&duerType=SOCKET"); // #elif defined(BLINKER_DUEROS_MULTI_OUTLET) // String _duerType = BLINKER_F("&duerType=MULTI_SOCKET"); // #elif defined(BLINKER_DUEROS_SENSOR) // String _duerType = BLINKER_F("&duerType=AIR_MONITOR"); // #else // String _duerType = BLINKER_F(""); // #endif // BApi::begin(); // Transp.aliType(_aliType); // Transp.duerType(_duerType); // Transp.begin(_auth); // transport(Transp); // #if defined(BLINKER_ESP_SMARTCONFIG) // Transp.smartconfigBegin(); // #elif defined(BLINKER_APCONFIG) // Transp.apconfigBegin(); // #endif // BApi::loadTimer(); // // #if defined(BLINKER_ESP_SMARTCONFIG) // // smartconfigBegin(_auth, _aliType, _duerType); // // #elif defined(BLINKER_APCONFIG) // // apconfigBegin(_auth, _aliType, _duerType); // // #endif // // __auth = _auth; // // #ifndef BLINKER_ESP_TASK // // beginMQTT(); // // #endif // } // #else // void begin( const char* _auth, // const char* _ssid, // const char* _pswd ) // { // #if defined(BLINKER_ALIGENIE_LIGHT) // String _aliType = BLINKER_F("&aliType=light"); // #elif defined(BLINKER_ALIGENIE_OUTLET) // String _aliType = BLINKER_F("&aliType=outlet"); // #elif defined(BLINKER_ALIGENIE_MULTI_OUTLET) // String _aliType = BLINKER_F("&aliType=multi_outlet"); // #elif defined(BLINKER_ALIGENIE_SENSOR) // String _aliType = BLINKER_F("&aliType=sensor"); // #else // String _aliType = BLINKER_F(""); // #endif // #if defined(BLINKER_DUEROS_LIGHT) // String _duerType = BLINKER_F("&duerType=LIGHT"); // #elif defined(BLINKER_DUEROS_OUTLET) // String _duerType = BLINKER_F("&duerType=SOCKET"); // #elif defined(BLINKER_DUEROS_MULTI_OUTLET) // String _duerType = BLINKER_F("&duerType=MULTI_SOCKET"); // #elif defined(BLINKER_DUEROS_SENSOR) // String _duerType = BLINKER_F("&duerType=AIR_MONITOR"); // #else // String _duerType = BLINKER_F(""); // #endif // BApi::begin(); // Transp.aliType(_aliType); // Transp.duerType(_duerType); // Transp.begin(_auth); // transport(Transp); // Transp.commonBegin(_ssid, _pswd); // BApi::loadTimer(); // // __auth = _auth; // // __ssid = _ssid; // // __pswd = _pswd; // // #ifndef BLINKER_ESP_TASK // // beginMQTT(); // // #endif // } // #endif // // void beginMQTT() // // { // // #if defined(BLINKER_ALIGENIE_LIGHT) // // String _aliType = BLINKER_F("&aliType=light"); // // #elif defined(BLINKER_ALIGENIE_OUTLET) // // String _aliType = BLINKER_F("&aliType=outlet"); // // #elif defined(BLINKER_ALIGENIE_SENSOR) // // String _aliType = BLINKER_F("&aliType=sensor"); // // #else // // String _aliType = BLINKER_F(""); // // #endif // // #if defined(BLINKER_DUEROS_LIGHT) // // String _duerType = BLINKER_F("&duerType=LIGHT"); // // #elif defined(BLINKER_DUEROS_OUTLET) // // String _duerType = BLINKER_F("&duerType=SOCKET"); // // #elif defined(BLINKER_DUEROS_SENSOR) // // String _duerType = BLINKER_F("&duerType=AIR_MONITOR"); // // #else // // String _duerType = BLINKER_F(""); // // #endif // // #if defined(BLINKER_ESP_SMARTCONFIG) // // smartconfigBegin(__auth, _aliType, _duerType); // // #elif defined(BLINKER_APCONFIG) // // apconfigBegin(__auth, _aliType, _duerType); // // #else // // commonBegin(__auth, __ssid, __pswd, _aliType, _duerType); // // #endif // // } // private : // // void commonBegin(const char* _auth, // // const char* _ssid, // // const char* _pswd, // // String & _alitype, // // String & _duertype); // // void smartconfigBegin(const char* _auth, String & _alitype, String & _duertype); // // void apconfigBegin(const char* _auth, String & _alitype, String & _duertype); // // bool autoInit(); // // void smartconfig(); // // void softAPinit(); // // // void serverClient(); // // bool parseUrl(String data); // // void connectWiFi(String _ssid, String _pswd); // // void connectWiFi(const char* _ssid, const char* _pswd); // // const char* __auth; // // const char* __ssid; // // const char* __pswd; // BlinkerMQTTLP Transp; // }; // // void BlinkerESPMQTTLP::commonBegin(const char* _auth, // // const char* _ssid, // // const char* _pswd, // // String & _alitype, // // String & _duertype) // // { // // BApi::begin(); // // connectWiFi(_ssid, _pswd); // // // BApi::loadOTA(); // // Transp.aliType(_alitype); // // Transp.duerType(_duertype); // // Transp.begin(_auth); // // transport(Transp); // // BApi::loadTimer(); // // #if defined(ESP8266) // // BLINKER_LOG(BLINKER_F("ESP8266_MQTT initialized...")); // // #elif defined(ESP32) // // BLINKER_LOG(BLINKER_F("ESP32_MQTT initialized...")); // // #endif // // } // // void BlinkerESPMQTTLP::smartconfigBegin(const char* _auth, String & _alitype, // // String & _duertype) // // { // // BApi::begin(); // // if (!autoInit()) smartconfig(); // // // BApi::loadOTA(); // // Transp.aliType(_alitype); // // Transp.duerType(_duertype); // // Transp.begin(_auth); // // transport(Transp); // // BApi::loadTimer(); // // #if defined(ESP8266) // // BLINKER_LOG(BLINKER_F("ESP8266_MQTT initialized...")); // // #elif defined(ESP32) // // BLINKER_LOG(BLINKER_F("ESP32_MQTT initialized...")); // // #endif // // } // // void BlinkerESPMQTTLP::apconfigBegin(const char* _auth, String & _alitype, // // String & _duertype) // // { // // BApi::begin(); // // if (!autoInit()) // // { // // softAPinit(); // // // while(WiFi.status() != WL_CONNECTED) // // // { // // // serverClient(); // // // ::delay(10); // // // } // // } // // // BApi::loadOTA(); // // Transp.aliType(_alitype); // // Transp.duerType(_duertype); // // Transp.begin(_auth); // // transport(Transp); // // BApi::loadTimer(); // // #if defined(ESP8266) // // BLINKER_LOG(BLINKER_F("ESP8266_MQTT initialized...")); // // #elif defined(ESP32) // // BLINKER_LOG(BLINKER_F("ESP32_MQTT initialized...")); // // #endif // // } // // bool BlinkerESPMQTTLP::autoInit() // // { // // WiFi.mode(WIFI_STA); // // String _hostname = BLINKER_F("DiyArduino_"); // // _hostname += macDeviceName(); // // #if defined(ESP8266) // // WiFi.hostname(_hostname.c_str()); // // #elif defined(ESP32) // // WiFi.setHostname(_hostname.c_str()); // // #endif // // WiFi.begin(); // // ::delay(500); // // BLINKER_LOG(BLINKER_F("Waiting for WiFi "), // // BLINKER_WIFI_AUTO_INIT_TIMEOUT / 1000, // // BLINKER_F("s, will enter SMARTCONFIG or "), // // BLINKER_F("APCONFIG while WiFi not connect!")); // // uint8_t _times = 0; // // while (WiFi.status() != WL_CONNECTED) { // // ::delay(500); // // if (_times > BLINKER_WIFI_AUTO_INIT_TIMEOUT / 500) break; // // _times++; // // } // // if (WiFi.status() != WL_CONNECTED) return false; // // else { // // BLINKER_LOG(BLINKER_F("WiFi Connected.")); // // BLINKER_LOG(BLINKER_F("IP Address: ")); // // BLINKER_LOG(WiFi.localIP()); // // return true; // // } // // } // // void BlinkerESPMQTTLP::smartconfig() // // { // // WiFi.mode(WIFI_STA); // // String _hostname = BLINKER_F("DiyArduino_"); // // _hostname += macDeviceName(); // // #if defined(ESP8266) // // WiFi.hostname(_hostname.c_str()); // // #elif defined(ESP32) // // WiFi.setHostname(_hostname.c_str()); // // #endif // // WiFi.beginSmartConfig(); // // BLINKER_LOG(BLINKER_F("Waiting for SmartConfig.")); // // while (!WiFi.smartConfigDone()) { // // ::delay(500); // // } // // BLINKER_LOG(BLINKER_F("SmartConfig received.")); // // BLINKER_LOG(BLINKER_F("Waiting for WiFi")); // // while (WiFi.status() != WL_CONNECTED) { // // ::delay(500); // // } // // BLINKER_LOG(BLINKER_F("WiFi Connected.")); // // BLINKER_LOG(BLINKER_F("IP Address: ")); // // BLINKER_LOG(WiFi.localIP()); // // } // // void BlinkerESPMQTTLP::softAPinit() // // { // // WiFiServer _server(80); // // WiFiClient _client; // // IPAddress apIP(192, 168, 4, 1); // // #if defined(ESP8266) // // IPAddress netMsk(255, 255, 255, 0); // // #endif // // // _server = new WiFiServer(80); // // WiFi.mode(WIFI_AP); // // String softAP_ssid = BLINKER_F("DiyArduino_"); // // softAP_ssid += macDeviceName(); // // #if defined(ESP8266) // // WiFi.hostname(softAP_ssid.c_str()); // // WiFi.softAPConfig(apIP, apIP, netMsk); // // #elif defined(ESP32) // // WiFi.setHostname(softAP_ssid.c_str()); // // WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0)); // // #endif // // WiFi.softAP(softAP_ssid.c_str(), ("12345678")); // // delay(100); // // _server.begin(); // // BLINKER_LOG(BLINKER_F("AP IP address: "), WiFi.softAPIP()); // // BLINKER_LOG(BLINKER_F("HTTP _server started")); // // BLINKER_LOG(BLINKER_F("URL: http://"), WiFi.softAPIP()); // // while(WiFi.status() != WL_CONNECTED) // // { // // // serverClient(); // // _client = _server.available(); // // // if (_client.status() == CLOSED) // // if (!_client.connected()) // // { // // _client.stop(); // // BLINKER_LOG(BLINKER_F("Connection closed on _client")); // // } // // else // // { // // if (_client.available()) // // { // // String data = _client.readStringUntil('\r'); // // // data = data.substring(4, data.length() - 9); // // _client.flush(); // // BLINKER_LOG(BLINKER_F("clientData: "), data); // // if (STRING_contains_string(data, "ssid") && // // STRING_contains_string(data, "pswd")) // // { // // String msg = BLINKER_F("{\"hello\":\"world\"}"); // // String s= BLINKER_F("HTTP/1.1 200 OK\r\n"); // // s += BLINKER_F("Content-Type: application/json;"); // // s += BLINKER_F("charset=utf-8\r\n"); // // s += BLINKER_F("Content-Length: "); // // s += String(msg.length()); // // s += BLINKER_F("\r\nConnection: Keep Alive\r\n\r\n"); // // s += msg; // // s += BLINKER_F("\r\n"); // // _client.print(s); // // _client.stop(); // // parseUrl(data); // // } // // } // // } // // ::delay(10); // // } // // } // // // void BlinkerESPMQTTLP::serverClient() // // // { // // // if (!_client) // // // { // // // _client = _server->available(); // // // } // // // else // // // { // // // // if (_client.status() == CLOSED) // // // if (!_client.connected()) // // // { // // // _client.stop(); // // // BLINKER_LOG(BLINKER_F("Connection closed on _client")); // // // } // // // else // // // { // // // if (_client.available()) // // // { // // // String data = _client.readStringUntil('\r'); // // // // data = data.substring(4, data.length() - 9); // // // _client.flush(); // // // BLINKER_LOG(BLINKER_F("clientData: "), data); // // // if (STRING_contains_string(data, "ssid") && // // // STRING_contains_string(data, "pswd")) // // // { // // // String msg = BLINKER_F("{\"hello\":\"world\"}"); // // // String s= BLINKER_F("HTTP/1.1 200 OK\r\n"); // // // s += BLINKER_F("Content-Type: application/json;"); // // // s += BLINKER_F("charset=utf-8\r\n"); // // // s += BLINKER_F("Content-Length: "); // // // s += String(msg.length()); // // // s += BLINKER_F("\r\nConnection: Keep Alive\r\n\r\n"); // // // s += msg; // // // s += BLINKER_F("\r\n"); // // // _client.print(s); // // // _client.stop(); // // // parseUrl(data); // // // } // // // } // // // } // // // } // // // } // // bool BlinkerESPMQTTLP::parseUrl(String data) // // { // // BLINKER_LOG(BLINKER_F("APCONFIG data: "), data); // // DynamicJsonBuffer jsonBuffer; // // JsonObject& wifi_data = jsonBuffer.parseObject(data); // // if (!wifi_data.success()) { // // return false; // // } // // String _ssid = wifi_data["ssid"]; // // String _pswd = wifi_data["pswd"]; // // BLINKER_LOG(BLINKER_F("ssid: "), _ssid); // // BLINKER_LOG(BLINKER_F("pswd: "), _pswd); // // // free(_server); // // connectWiFi(_ssid, _pswd); // // return true; // // } // // void BlinkerESPMQTTLP::connectWiFi(String _ssid, String _pswd) // // { // // connectWiFi(_ssid.c_str(), _pswd.c_str()); // // } // // void BlinkerESPMQTTLP::connectWiFi(const char* _ssid, const char* _pswd) // // { // // uint32_t connectTime = millis(); // // BLINKER_LOG(BLINKER_F("Connecting to "), _ssid); // // WiFi.mode(WIFI_STA); // // String _hostname = BLINKER_F("DiyArduinoMQTT_"); // // _hostname += macDeviceName(); // // #if defined(ESP8266) // // WiFi.hostname(_hostname.c_str()); // // #elif defined(ESP32) // // WiFi.setHostname(_hostname.c_str()); // // #endif // // if (_pswd && strlen(_pswd)) { // // WiFi.begin(_ssid, _pswd); // // } // // else { // // WiFi.begin(_ssid); // // } // // while (WiFi.status() != WL_CONNECTED) { // // ::delay(50); // // if (millis() - connectTime > BLINKER_CONNECT_TIMEOUT_MS && WiFi.status() != WL_CONNECTED) { // // connectTime = millis(); // // BLINKER_LOG(BLINKER_F("WiFi connect timeout, please check ssid and pswd!")); // // BLINKER_LOG(BLINKER_F("Retring WiFi connect again!")); // // } // // } // // BLINKER_LOG(BLINKER_F("Connected")); // // IPAddress myip = WiFi.localIP(); // // BLINKER_LOG(BLINKER_F("Your IP is: "), myip); // // } // #endif // #endif