/* command.cpp - ESP3D configuration class Copyright (c) 2014 Luc Lebosse. All rights reserved. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "command.h" #include "wificonf.h" #include "webinterface.h" #ifndef FS_NO_GLOBALS #define FS_NO_GLOBALS #endif #include #if defined(ARDUINO_ARCH_ESP32) #include "SPIFFS.h" #define MAX_GPIO 37 int ChannelAttached2Pin[16]= {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; #else #define MAX_GPIO 16 #endif #ifdef TIMESTAMP_FEATURE #include #endif #ifdef ESP_OLED_FEATURE #include "esp_oled.h" #endif #ifdef DHT_FEATURE #include "DHTesp.h" extern DHTesp dht; #endif #ifdef NOTIFICATION_FEATURE #include "notifications_service.h" #endif String COMMAND::buffer_serial; String COMMAND::buffer_tcp; #define ERROR_CMD_MSG (output == WEB_PIPE)?F("Error: Wrong Command"):F("Cmd Error") #define INCORRECT_CMD_MSG (output == WEB_PIPE)?F("Error: Incorrect Command"):F("Incorrect Cmd") #define OK_CMD_MSG (output == WEB_PIPE)?F("ok"):F("Cmd Ok") extern uint8_t Checksum(const char * line, uint16_t lineSize); extern bool sendLine2Serial (String & line, int32_t linenb, int32_t* newlinenb); const char * encodeString(const char * s){ static String tmp; tmp = s; while(tmp.indexOf("'")!=-1)tmp.replace("'", "'"); while(tmp.indexOf("\"")!=-1)tmp.replace("\"", """); if (tmp =="") tmp=" "; return tmp.c_str(); } bool isValidNumber(String str) { if(!(str.charAt(0) == '+' || str.charAt(0) == '-' || isDigit(str.charAt(0)))) return false; for(byte i=1;i0){ if (cmd_params[start-1]!=' ') return parameter; } //password and SSID can have space so handle it //if no space expected use space as delimiter if (!withspace) { end = cmd_params.indexOf (" ", start); } #ifdef AUTHENTICATION_FEATURE //if space expected only one parameter but additional password may be present else if (sid != " pwd=") { end = cmd_params.indexOf (" pwd=", start); } #endif //if no end found - take all if (end == -1) { end = cmd_params.length(); } //extract parameter parameter = cmd_params.substring (start + strlen (id), end); //be sure no extra space parameter.trim(); return parameter; } #ifdef AUTHENTICATION_FEATURE //check admin password bool COMMAND::isadmin (String & cmd_params) { String adminpassword; String sadminPassword; if (!CONFIG::read_string (EP_ADMIN_PWD, sadminPassword, MAX_LOCAL_PASSWORD_LENGTH) ) { LOG ("ERROR getting admin\r\n") sadminPassword = FPSTR (DEFAULT_ADMIN_PWD); } adminpassword = get_param (cmd_params, "pwd=", true); if (!sadminPassword.equals (adminpassword) ) { LOG("Not identified from command line\r\n") return false; } else { return true; } } //check user password - admin password is also valid bool COMMAND::isuser (String & cmd_params) { String userpassword; String suserPassword; if (!CONFIG::read_string (EP_USER_PWD, suserPassword, MAX_LOCAL_PASSWORD_LENGTH) ) { LOG ("ERROR getting user\r\n") suserPassword = FPSTR (DEFAULT_USER_PWD); } userpassword = get_param (cmd_params, "pwd=", true); //it is not user password if (!suserPassword.equals (userpassword) ) { //check admin password return COMMAND::isadmin (cmd_params); } else { return true; } } #endif bool COMMAND::execute_command (int cmd, String cmd_params, tpipe output, level_authenticate_type auth_level, ESPResponseStream *espresponse) { bool response = true; level_authenticate_type auth_type = auth_level; (void)auth_type; //avoid warning if updater only #ifdef AUTHENTICATION_FEATURE if (isadmin(cmd_params)) { auth_type = LEVEL_ADMIN; LOG("you are Admin\r\n"); } if (isuser (cmd_params) && (auth_type != LEVEL_ADMIN) ) { auth_type = LEVEL_USER; LOG("you are User\r\n"); } #ifdef DEBUG_ESP3D if ( auth_type == LEVEL_ADMIN) { LOG("admin identified\r\n"); } else { if( auth_type == LEVEL_USER) { LOG("user identified\r\n"); } else { LOG("guest identified\r\n"); } } #endif #endif //manage parameters byte mode = 254; String parameter; LOG ("Execute Command\r\n") switch (cmd) { //STA SSID //[ESP100][pwd=] case 100: parameter = get_param (cmd_params, "", true); if (!CONFIG::isSSIDValid (parameter.c_str() ) ) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); } #ifdef AUTHENTICATION_FEATURE if (auth_type != LEVEL_ADMIN) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); } else #endif if (!CONFIG::write_string (EP_STA_SSID, parameter.c_str() ) ) { ESPCOM::println (ERROR_CMD_MSG, output, espresponse); response = false; } else { ESPCOM::println (OK_CMD_MSG, output, espresponse); } break; //STA Password //[ESP101][pwd=] case 101: parameter = get_param (cmd_params, "", true); if (!CONFIG::isPasswordValid (parameter.c_str() ) ) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } #ifdef AUTHENTICATION_FEATURE if (auth_type != LEVEL_ADMIN) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } else #endif if (!CONFIG::write_string (EP_STA_PASSWORD, parameter.c_str() ) ) { ESPCOM::println (ERROR_CMD_MSG, output, espresponse); response = false; } else { ESPCOM::println (OK_CMD_MSG, output, espresponse); } break; //Hostname //[ESP102][pwd=] case 102: parameter = get_param (cmd_params, "", true); if (!CONFIG::isHostnameValid (parameter.c_str() ) ) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } #ifdef AUTHENTICATION_FEATURE if (auth_type != LEVEL_ADMIN) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } else #endif if (!CONFIG::write_string (EP_HOSTNAME, parameter.c_str() ) ) { ESPCOM::println (ERROR_CMD_MSG, output, espresponse); response = false; } else { ESPCOM::println (OK_CMD_MSG, output, espresponse); } break; //Wifi mode (STA/AP) //[ESP103][pwd=] case 103: parameter = get_param (cmd_params, "", true); if (parameter == "STA") { mode = CLIENT_MODE; } else if (parameter == "AP") { mode = AP_MODE; } else { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } if ( (mode == CLIENT_MODE) || (mode == AP_MODE) ) { #ifdef AUTHENTICATION_FEATURE if (auth_type != LEVEL_ADMIN) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } else #endif if (!CONFIG::write_byte (EP_WIFI_MODE, mode) ) { ESPCOM::println (ERROR_CMD_MSG, output, espresponse); response = false; } else { ESPCOM::println (OK_CMD_MSG, output, espresponse); } } break; //STA IP mode (DHCP/STATIC) //[ESP104][pwd=] case 104: parameter = get_param (cmd_params, "", true); if (parameter == "STATIC") { mode = STATIC_IP_MODE; } else if (parameter == "DHCP") { mode = DHCP_MODE; } else { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } if ( (mode == STATIC_IP_MODE) || (mode == DHCP_MODE) ) { #ifdef AUTHENTICATION_FEATURE if (auth_type != LEVEL_ADMIN) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } else #endif if (!CONFIG::write_byte (EP_STA_IP_MODE, mode) ) { ESPCOM::println (ERROR_CMD_MSG, output, espresponse); response = false; } else { ESPCOM::println (OK_CMD_MSG, output, espresponse); } } break; #ifndef USE_AS_UPDATER_ONLY //AP SSID //[ESP105][pwd=] case 105: parameter = get_param (cmd_params, "", true); if (!CONFIG::isSSIDValid (parameter.c_str() ) ) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } #ifdef AUTHENTICATION_FEATURE if (auth_type != LEVEL_ADMIN) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } else #endif if (!CONFIG::write_string (EP_AP_SSID, parameter.c_str() ) ) { ESPCOM::println (ERROR_CMD_MSG, output, espresponse); response = false; } else { ESPCOM::println (OK_CMD_MSG, output, espresponse); } break; //AP Password //[ESP106][pwd=] case 106: parameter = get_param (cmd_params, "", true); if (!CONFIG::isPasswordValid (parameter.c_str() ) ) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } #ifdef AUTHENTICATION_FEATURE if (auth_type != LEVEL_ADMIN) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } else #endif if (!CONFIG::write_string (EP_AP_PASSWORD, parameter.c_str() ) ) { ESPCOM::println (ERROR_CMD_MSG, output, espresponse); response = false; } else { ESPCOM::println (OK_CMD_MSG, output, espresponse); } break; //AP IP mode (DHCP/STATIC) //[ESP107][pwd=] case 107: parameter = get_param (cmd_params, "", true); if (parameter == "STATIC") { mode = STATIC_IP_MODE; } else if (parameter == "DHCP") { mode = DHCP_MODE; } else { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } if ( (mode == STATIC_IP_MODE) || (mode == DHCP_MODE) ) { #ifdef AUTHENTICATION_FEATURE if (auth_type != LEVEL_ADMIN) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } else #endif if (!CONFIG::write_byte (EP_AP_IP_MODE, mode) ) { ESPCOM::println (ERROR_CMD_MSG, output, espresponse); response = false; } else { ESPCOM::println (OK_CMD_MSG, output, espresponse); } } break; // Set wifi on/off //[ESP110][pwd=] case 110: parameter = get_param (cmd_params, "", true); if (parameter == "ON") { mode = 1; } else if (parameter == "OFF") { mode = 0; } else if (parameter == "RESTART") { mode = 2; } else { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } if (response) { #ifdef AUTHENTICATION_FEATURE if (auth_type != LEVEL_ADMIN) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } else #endif if (mode == 0) { if ((WiFi.getMode() != WIFI_OFF) || wifi_config.WiFi_on) { //disable wifi ESPCOM::println ("Disabling Wifi", output, espresponse); #ifdef ESP_OLED_FEATURE OLED_DISPLAY::display_signal(-1); OLED_DISPLAY::setCursor(0, 0); ESPCOM::print("", OLED_PIPE); OLED_DISPLAY::setCursor(0, 16); ESPCOM::print("", OLED_PIPE); OLED_DISPLAY::setCursor(0, 48); ESPCOM::print("Wifi disabled", OLED_PIPE); #endif WiFi.disconnect(true); WiFi.enableSTA (false); WiFi.enableAP (false); WiFi.mode (WIFI_OFF); wifi_config.WiFi_on = false; wifi_config.Disable_servers(); return response; } else { ESPCOM::println ("Wifi already off", output, espresponse); } } else if (mode == 1) { //restart device is the best way to start everything clean if ((WiFi.getMode() == WIFI_OFF) || !wifi_config.WiFi_on) { ESPCOM::println ("Enabling Wifi", output, espresponse); web_interface->restartmodule = true; } else { ESPCOM::println ("Wifi already on", output, espresponse); } } else { //restart wifi and restart is the best way to start everything clean ESPCOM::println ("Enabling Wifi", output, espresponse); web_interface->restartmodule = true; } } break; //Get current IP //[ESP111]
case 111: { String currentIP ; if (WiFi.getMode() == WIFI_STA) { currentIP = WiFi.localIP().toString(); } else { currentIP = WiFi.softAPIP().toString(); } ESPCOM::print (cmd_params, output, espresponse); ESPCOM::println (currentIP, output, espresponse); LOG (cmd_params) LOG (currentIP) LOG ("\r\n") } break; //Get hostname //[ESP112]
case 112: { String shost ; if (!CONFIG::read_string (EP_HOSTNAME, shost, MAX_HOSTNAME_LENGTH) ) { shost = wifi_config.get_default_hostname(); } ESPCOM::print (cmd_params, output, espresponse); ESPCOM::println (shost, output, espresponse); LOG (cmd_params) LOG (shost) LOG ("\r\n") } break; #if defined(TIMESTAMP_FEATURE) //restart time client case 114: { CONFIG::init_time_client(); ESPCOM::println (OK_CMD_MSG, output, espresponse); LOG ("restart time client\r\n") } break; //get time client case 115: { struct tm tmstruct; time_t now; String stmp = ""; time(&now); localtime_r(&now, &tmstruct); stmp = String((tmstruct.tm_year)+1900) + "-"; if (((tmstruct.tm_mon)+1) < 10) { stmp +="0"; } stmp += String(( tmstruct.tm_mon)+1) + "-"; if (tmstruct.tm_mday < 10) { stmp +="0"; } stmp += String(tmstruct.tm_mday) + " "; if (tmstruct.tm_hour < 10) { stmp +="0"; } stmp += String(tmstruct.tm_hour) + ":"; if (tmstruct.tm_min < 10) { stmp +="0"; } stmp += String(tmstruct.tm_min) + ":"; if (tmstruct.tm_sec < 10) { stmp +="0"; } stmp += String(tmstruct.tm_sec); ESPCOM::println(stmp.c_str(), output, espresponse); } break; #endif #ifdef DIRECT_PIN_FEATURE //Get/Set pin value //[ESP201]P V [PULLUP=YES RAW=YES ANALOG=NO ANALOG_RANGE=255 CLEARCHANNELS=NO]pwd= case 201: parameter = get_param (cmd_params, "", true); #ifdef AUTHENTICATION_FEATURE if (auth_type == LEVEL_GUEST) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } else #endif { //check if have pin parameter = get_param (cmd_params, "P", false); LOG ("Pin:") LOG (parameter) LOG ("\r\n") if (parameter == "") { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } else { int pin = parameter.toInt(); //check pin is valid if ((pin >= 0) && (pin <= MAX_GPIO) && isValidNumber(parameter)) { //check if analog or digital bool isdigital = true; parameter = get_param (cmd_params, "ANALOG=", false); if (parameter == "YES") { LOG ("Set as analog\r\n") isdigital=false; #ifdef ARDUINO_ARCH_ESP32 parameter = get_param (cmd_params, "CLEARCHANNELS=", false); if (parameter == "YES") { for (uint8_t p = 0; p < 16; p++) { if(ChannelAttached2Pin[p] != -1) { ledcDetachPin(ChannelAttached2Pin[p]); ChannelAttached2Pin[p] = -1; } } } #endif } //check if is set or get parameter = get_param (cmd_params, "V", false); //it is a get if (parameter == "") { int value = 0; if(isdigital) { //this is to not set pin mode parameter = get_param (cmd_params, "RAW=", false); if (parameter == "NO") { parameter = get_param (cmd_params, "PULLUP=", false); if (parameter == "NO") { LOG ("Set as input\r\n") pinMode (pin, INPUT); } else { //GPIO16 is different than others if (pin < MAX_GPIO) { LOG ("Set as input pull up\r\n") pinMode (pin, INPUT_PULLUP); } #ifdef ARDUINO_ARCH_ESP8266 else { LOG ("Set as input pull down 16\r\n") pinMode (pin, INPUT_PULLDOWN_16); } #endif } } value = digitalRead (pin); } else { #ifdef ARDUINO_ARCH_ESP8266 //only one ADC on ESP8266 A0 value = analogRead (A0); #else value = analogRead (pin); #endif } LOG ("Read:"); LOG (String (value).c_str() ) LOG ("\n"); ESPCOM::println (String (value).c_str(), output, espresponse); } else { //it is a set int value = parameter.toInt(); if (!isValidNumber(parameter)){ ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; break; } if (isdigital) { //verify it is a 0 or a 1 if ( (value == 0) || (value == 1) ) { pinMode (pin, OUTPUT); LOG ("Set:") LOG (String ( (value == 0) ? LOW : HIGH) ) LOG ("\r\n") digitalWrite (pin, (value == 0) ? LOW : HIGH); ESPCOM::println (OK_CMD_MSG, output, espresponse); } else { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } } else { int analog_range= 255; parameter = get_param (cmd_params, "ANALOG_RANGE=", false); if (parameter.length() > 0) { analog_range = parameter.toInt(); } LOG ("Range ") LOG(String (analog_range).c_str() ) LOG ("\r\n") if ( (value >= 0) || (value <= analog_range+1) ) { LOG ("Set:") LOG (String ( value) ) LOG ("\r\n") #ifdef ARDUINO_ARCH_ESP8266 analogWriteRange(analog_range); pinMode(pin, OUTPUT); analogWrite(pin, value); #else int channel = -1; for (uint8_t p = 0; p < 16; p++) { if(ChannelAttached2Pin[p] == pin) { channel = p; } } if (channel==-1) { for (uint8_t p = 0; p < 16; p++) { if(ChannelAttached2Pin[p] == -1) { channel = p; ChannelAttached2Pin[p] = pin; p = 16; } } } uint8_t resolution = 0; analog_range++; switch(analog_range) { case 8191: resolution=13; break; case 1024: resolution=10; break; case 2047: resolution=11; break; case 4095: resolution=12; break; default: resolution=8; analog_range = 255; break; } if ((channel==-1) || (value > (analog_range-1))) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); return false; } ledcSetup(channel, 1000, resolution); ledcAttachPin(pin, channel); ledcWrite(channel, value); #endif } else { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } } } } else { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } } } break; #endif #ifdef ESP_OLED_FEATURE //Output to oled //[ESP210] case 210: { parameter = get_param (cmd_params, "C=", false); int c = parameter.toInt(); parameter = get_param (cmd_params, "L=", false); int l = parameter.toInt(); parameter = get_param (cmd_params, "T=", true); OLED_DISPLAY::setCursor(c, l); ESPCOM::print(parameter.c_str(), OLED_PIPE); ESPCOM::println (OK_CMD_MSG, output, espresponse); } break; //Output to oled line 1 //[ESP211] case 211: { parameter = get_param (cmd_params, "", true); OLED_DISPLAY::setCursor(0, 0); ESPCOM::print(parameter.c_str(), OLED_PIPE); ESPCOM::println (OK_CMD_MSG, output, espresponse); } break; //Output to oled line 2 //[ESP212] case 212: { parameter = get_param (cmd_params, "", true); OLED_DISPLAY::setCursor(0, 16); ESPCOM::print(parameter.c_str(), OLED_PIPE); ESPCOM::println (OK_CMD_MSG, output, espresponse); } break; //Output to oled line 3 //[ESP213] case 213: { parameter = get_param (cmd_params, "", true); OLED_DISPLAY::setCursor(0, 32); ESPCOM::print(parameter.c_str(), OLED_PIPE); ESPCOM::println (OK_CMD_MSG, output, espresponse); } break; //Output to oled line 4 //[ESP214] case 214: { parameter = get_param (cmd_params, "", true); OLED_DISPLAY::setCursor(0, 48); ESPCOM::print(parameter.c_str(), OLED_PIPE); ESPCOM::println (OK_CMD_MSG, output, espresponse); } break; #endif //Command delay case 290: { parameter = get_param (cmd_params, "", true); #ifdef AUTHENTICATION_FEATURE if (auth_type == LEVEL_GUEST) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } else #endif { if (parameter.length() != 0) { ESPCOM::println ("Pause", output, espresponse); CONFIG::wait(parameter.toInt()); } ESPCOM::println (OK_CMD_MSG, output, espresponse); } } break; //display ESP3D EEPROM version detected case 300: { uint8_t v = CONFIG::get_EEPROM_version(); ESPCOM::println (String(v).c_str(), output, espresponse); } break; //Get full EEPROM settings content //[ESP400] case 400: { char sbuf[MAX_DATA_LENGTH + 1]; uint8_t ipbuf[4]; byte bbuf = 0; int ibuf = 0; parameter = get_param (cmd_params, "", true); //Start JSON ESPCOM::println (F ("{\"EEPROM\":["), output, espresponse); if (cmd_params == "network" || cmd_params == "") { //1- Baud Rate ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_BAUD_RATE), output, espresponse); ESPCOM::print (F ("\",\"T\":\"I\",\"V\":\""), output, espresponse); if (!CONFIG::read_buffer (EP_BAUD_RATE, (byte *) &ibuf, INTEGER_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ( (const char *) CONFIG::intTostr (ibuf), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"Baud Rate\",\"O\":[{\"9600\":\"9600\"},{\"19200\":\"19200\"},{\"38400\":\"38400\"},{\"57600\":\"57600\"},{\"115200\":\"115200\"},{\"230400\":\"230400\"},{\"250000\":\"250000\"},{\"500000\":\"500000\"},{\"921600\":\"921600\"}]}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //2-Sleep Mode ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_SLEEP_MODE), output, espresponse); ESPCOM::print (F ("\",\"T\":\"B\",\"V\":\""), output, espresponse); if (!CONFIG::read_byte (EP_SLEEP_MODE, &bbuf ) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ( (const char *) CONFIG::intTostr (bbuf), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"Sleep Mode\",\"O\":[{\"None\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (WIFI_NONE_SLEEP), output, espresponse); ESPCOM::print (F ("\"},{\"Light\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (WIFI_LIGHT_SLEEP), output, espresponse); ESPCOM::print (F ("\"},{\"Modem\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (WIFI_MODEM_SLEEP), output, espresponse); ESPCOM::print (F ("\"}]}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //3-Web Port ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_WEB_PORT), output, espresponse); ESPCOM::print (F ("\",\"T\":\"I\",\"V\":\""), output, espresponse); if (!CONFIG::read_buffer (EP_WEB_PORT, (byte *) &ibuf, INTEGER_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ( (const char *) CONFIG::intTostr (ibuf), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"Web Port\",\"S\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (DEFAULT_MAX_WEB_PORT), output, espresponse); ESPCOM::print (F ("\",\"M\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (DEFAULT_MIN_WEB_PORT), output, espresponse); ESPCOM::print (F ("\"}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //4-Data Port ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_DATA_PORT), output, espresponse); ESPCOM::print (F ("\",\"T\":\"I\",\"V\":\""), output, espresponse); if (!CONFIG::read_buffer (EP_DATA_PORT, (byte *) &ibuf, INTEGER_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ( (const char *) CONFIG::intTostr (ibuf), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"Data Port\",\"S\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (DEFAULT_MAX_DATA_PORT), output, espresponse); ESPCOM::print (F ("\",\"M\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (DEFAULT_MIN_DATA_PORT), output, espresponse); ESPCOM::print (F ("\"}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); #ifdef AUTHENTICATION_FEATURE //5-Admin password ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_ADMIN_PWD), output, espresponse); ESPCOM::print (F ("\",\"T\":\"S\",\"V\":\""), output, espresponse); if (!CONFIG::read_string (EP_ADMIN_PWD, sbuf, MAX_LOCAL_PASSWORD_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ("********", output, espresponse); } ESPCOM::print (F ("\",\"S\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MAX_LOCAL_PASSWORD_LENGTH), output, espresponse); ESPCOM::print (F ("\",\"H\":\"Admin Password\",\"M\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MIN_LOCAL_PASSWORD_LENGTH), output, espresponse); ESPCOM::print (F ("\"}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //6-User password ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_USER_PWD), output, espresponse); ESPCOM::print (F ("\",\"T\":\"S\",\"V\":\""), output, espresponse); if (!CONFIG::read_string (EP_USER_PWD, sbuf, MAX_LOCAL_PASSWORD_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ("********", output, espresponse); } ESPCOM::print (F ("\",\"S\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MAX_LOCAL_PASSWORD_LENGTH), output, espresponse); ESPCOM::print (F ("\",\"H\":\"User Password\",\"M\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MIN_LOCAL_PASSWORD_LENGTH), output, espresponse); ESPCOM::print (F ("\"}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); #endif //7-Hostname ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_HOSTNAME), output, espresponse); ESPCOM::print (F ("\",\"T\":\"S\",\"V\":\""), output, espresponse); if (!CONFIG::read_string (EP_HOSTNAME, sbuf, MAX_HOSTNAME_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print (encodeString(sbuf), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"Hostname\" ,\"S\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MAX_HOSTNAME_LENGTH), output, espresponse); ESPCOM::print (F ("\", \"M\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MIN_HOSTNAME_LENGTH), output, espresponse); ESPCOM::print (F ("\"}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //8-wifi mode ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_WIFI_MODE), output, espresponse); ESPCOM::print (F ("\",\"T\":\"B\",\"V\":\""), output, espresponse); if (!CONFIG::read_byte (EP_WIFI_MODE, &bbuf ) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ( (const char *) CONFIG::intTostr (bbuf), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"Wifi mode\",\"O\":[{\"AP\":\"1\"},{\"STA\":\"2\"}]}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //9-STA SSID ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_STA_SSID), output, espresponse); ESPCOM::print (F ("\",\"T\":\"S\",\"V\":\""), output, espresponse); if (!CONFIG::read_string (EP_STA_SSID, sbuf, MAX_SSID_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print (encodeString(sbuf), output, espresponse); } ESPCOM::print (F ("\",\"S\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MAX_SSID_LENGTH), output, espresponse); ESPCOM::print (F ("\",\"H\":\"Station SSID\",\"M\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MIN_SSID_LENGTH), output, espresponse); ESPCOM::print (F ("\"}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //10-STA password ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_STA_PASSWORD), output, espresponse); ESPCOM::print (F ("\",\"T\":\"S\",\"V\":\""), output, espresponse); if (!CONFIG::read_string (EP_STA_PASSWORD, sbuf, MAX_PASSWORD_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ("********", output, espresponse); } ESPCOM::print (F ("\",\"S\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MAX_PASSWORD_LENGTH), output, espresponse); ESPCOM::print (F ("\",\"H\":\"Station Password\",\"M\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MIN_PASSWORD_LENGTH), output, espresponse); ESPCOM::print (F ("\"}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //11-Station Network Mode ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_STA_PHY_MODE), output, espresponse); ESPCOM::print (F ("\",\"T\":\"B\",\"V\":\""), output, espresponse); if (!CONFIG::read_byte (EP_STA_PHY_MODE, &bbuf ) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ( (const char *) CONFIG::intTostr (bbuf), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"Station Network Mode\",\"O\":[{\"11b\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (WIFI_PHY_MODE_11B), output, espresponse); ESPCOM::print (F ("\"},{\"11g\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (WIFI_PHY_MODE_11G), output, espresponse); ESPCOM::print (F ("\"},{\"11n\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (WIFI_PHY_MODE_11N), output, espresponse); ESPCOM::print (F ("\"}]}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //12-STA IP mode ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_STA_IP_MODE), output, espresponse); ESPCOM::print (F ("\",\"T\":\"B\",\"V\":\""), output, espresponse); if (!CONFIG::read_byte (EP_STA_IP_MODE, &bbuf ) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ( (const char *) CONFIG::intTostr (bbuf), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"Station IP Mode\",\"O\":[{\"DHCP\":\"1\"},{\"Static\":\"2\"}]}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //13-STA static IP ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_STA_IP_VALUE), output, espresponse); ESPCOM::print (F ("\",\"T\":\"A\",\"V\":\""), output, espresponse); if (!CONFIG::read_buffer (EP_STA_IP_VALUE, (byte *) ipbuf, IP_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print (IPAddress (ipbuf).toString().c_str(), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"Station Static IP\"}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //14-STA static Mask ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_STA_MASK_VALUE), output, espresponse); ESPCOM::print (F ("\",\"T\":\"A\",\"V\":\""), output, espresponse); if (!CONFIG::read_buffer (EP_STA_MASK_VALUE, (byte *) ipbuf, IP_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print (IPAddress (ipbuf).toString().c_str(), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"Station Static Mask\"}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //15-STA static Gateway ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_STA_GATEWAY_VALUE), output, espresponse); ESPCOM::print (F ("\",\"T\":\"A\",\"V\":\""), output, espresponse); if (!CONFIG::read_buffer (EP_STA_GATEWAY_VALUE, (byte *) ipbuf, IP_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print (IPAddress (ipbuf).toString().c_str(), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"Station Static Gateway\"}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //16-AP SSID ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_AP_SSID), output, espresponse); ESPCOM::print (F ("\",\"T\":\"S\",\"V\":\""), output, espresponse); if (!CONFIG::read_string (EP_AP_SSID, sbuf, MAX_SSID_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print (encodeString(sbuf), output, espresponse); } ESPCOM::print (F ("\",\"S\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MAX_SSID_LENGTH), output, espresponse); ESPCOM::print (F ("\",\"H\":\"AP SSID\",\"M\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MIN_SSID_LENGTH), output, espresponse); ESPCOM::print (F ("\"}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //17-AP password ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_AP_PASSWORD), output, espresponse); ESPCOM::print (F ("\",\"T\":\"S\",\"V\":\""), output, espresponse); if (!CONFIG::read_string (EP_AP_PASSWORD, sbuf, MAX_PASSWORD_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ("********", output, espresponse); } ESPCOM::print (F ("\",\"S\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MAX_PASSWORD_LENGTH), output, espresponse); ESPCOM::print (F ("\",\"H\":\"AP Password\",\"M\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MIN_PASSWORD_LENGTH), output, espresponse); ESPCOM::print (F ("\"}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //18 - AP Network Mode ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_AP_PHY_MODE), output, espresponse); ESPCOM::print (F ("\",\"T\":\"B\",\"V\":\""), output, espresponse); if (!CONFIG::read_byte (EP_AP_PHY_MODE, &bbuf ) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ( (const char *) CONFIG::intTostr (bbuf), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"AP Network Mode\",\"O\":[{\"11b\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (WIFI_PHY_MODE_11B), output, espresponse); ESPCOM::print (F ("\"},{\"11g\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (WIFI_PHY_MODE_11G), output, espresponse); ESPCOM::print (F ("\"}]}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //19-AP SSID visibility ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_SSID_VISIBLE), output, espresponse); ESPCOM::print (F ("\",\"T\":\"B\",\"V\":\""), output, espresponse); if (!CONFIG::read_byte (EP_SSID_VISIBLE, &bbuf ) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ( (const char *) CONFIG::intTostr (bbuf), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"SSID Visible\",\"O\":[{\"No\":\"0\"},{\"Yes\":\"1\"}]}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //20-AP Channel ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_CHANNEL), output, espresponse); ESPCOM::print (F ("\",\"T\":\"B\",\"V\":\""), output, espresponse); if (!CONFIG::read_byte (EP_CHANNEL, &bbuf ) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ( (const char *) CONFIG::intTostr (bbuf), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"AP Channel\",\"O\":["), output, espresponse); for (int i = 1; i < 12 ; i++) { ESPCOM::print (F ("{\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (i), output, espresponse); ESPCOM::print (F ("\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (i), output, espresponse); ESPCOM::print (F ("\"}"), output, espresponse); if (i < 11) { ESPCOM::print (F (","), output, espresponse); } } ESPCOM::print (F ("]}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //21-AP Authentication ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_AUTH_TYPE), output, espresponse); ESPCOM::print (F ("\",\"T\":\"B\",\"V\":\""), output, espresponse); if (!CONFIG::read_byte (EP_AUTH_TYPE, &bbuf ) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ( (const char *) CONFIG::intTostr (bbuf), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"Authentication\",\"O\":[{\"Open\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (AUTH_OPEN), output, espresponse); ESPCOM::print (F ("\"},{\"WPA\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (AUTH_WPA_PSK), output, espresponse); ESPCOM::print (F ("\"},{\"WPA2\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (AUTH_WPA2_PSK), output, espresponse); ESPCOM::print (F ("\"},{\"WPA/WPA2\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (AUTH_WPA_WPA2_PSK), output, espresponse); ESPCOM::print (F ("\"}]}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //22-AP IP mode ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_AP_IP_MODE), output, espresponse); ESPCOM::print (F ("\",\"T\":\"B\",\"V\":\""), output, espresponse); if (!CONFIG::read_byte (EP_AP_IP_MODE, &bbuf ) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ( (const char *) CONFIG::intTostr (bbuf), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"AP IP Mode\",\"O\":[{\"DHCP\":\"1\"},{\"Static\":\"2\"}]}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //23-AP static IP ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_AP_IP_VALUE), output, espresponse); ESPCOM::print (F ("\",\"T\":\"A\",\"V\":\""), output, espresponse); if (!CONFIG::read_buffer (EP_AP_IP_VALUE, (byte *) ipbuf, IP_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print (IPAddress (ipbuf).toString().c_str(), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"AP Static IP\"}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //24-AP static Mask ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_AP_MASK_VALUE), output, espresponse); ESPCOM::print (F ("\",\"T\":\"A\",\"V\":\""), output, espresponse); if (!CONFIG::read_buffer (EP_AP_MASK_VALUE, (byte *) ipbuf, IP_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print (IPAddress (ipbuf).toString().c_str(), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"AP Static Mask\"}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //25-AP static Gateway ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_AP_GATEWAY_VALUE), output, espresponse); ESPCOM::print (F ("\",\"T\":\"A\",\"V\":\""), output, espresponse); if (!CONFIG::read_buffer (EP_AP_GATEWAY_VALUE, (byte *) ipbuf, IP_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print (IPAddress (ipbuf).toString().c_str(), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"AP Static Gateway\"}"), output, espresponse); #if defined(TIMESTAMP_FEATURE) ESPCOM::println (F (","), output, espresponse); //26-Time zone ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_TIMEZONE), output, espresponse); ESPCOM::print (F ("\",\"T\":\"B\",\"V\":\""), output, espresponse); if (!CONFIG::read_byte (EP_TIMEZONE, &bbuf ) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ( (const char *) CONFIG::intTostr ( (int8_t) bbuf), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"Time Zone\",\"O\":["), output, espresponse); for (int i = -12; i <= 12 ; i++) { ESPCOM::print (F ("{\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (i), output, espresponse); ESPCOM::print (F ("\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (i), output, espresponse); ESPCOM::print (F ("\"}"), output, espresponse); if (i < 12) { ESPCOM::print (F (","), output, espresponse); } } ESPCOM::print (F ("]}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //27- DST ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_TIME_ISDST), output, espresponse); ESPCOM::print (F ("\",\"T\":\"B\",\"V\":\""), output, espresponse); if (!CONFIG::read_byte (EP_TIME_ISDST, &bbuf ) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ( (const char *) CONFIG::intTostr (bbuf), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"Day Saving Time\",\"O\":[{\"No\":\"0\"},{\"Yes\":\"1\"}]}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //28- Time Server1 ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_TIME_SERVER1), output, espresponse); ESPCOM::print (F ("\",\"T\":\"S\",\"V\":\""), output, espresponse); if (!CONFIG::read_string (EP_TIME_SERVER1, sbuf, MAX_DATA_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print (encodeString(sbuf), output, espresponse); } ESPCOM::print (F ("\",\"S\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MAX_DATA_LENGTH), output, espresponse); ESPCOM::print (F ("\",\"H\":\"Time Server 1\",\"M\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MIN_DATA_LENGTH), output, espresponse); ESPCOM::print (F ("\"}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //29- Time Server2 ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_TIME_SERVER2), output, espresponse); ESPCOM::print (F ("\",\"T\":\"S\",\"V\":\""), output, espresponse); if (!CONFIG::read_string (EP_TIME_SERVER2, sbuf, MAX_DATA_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print (encodeString(sbuf), output, espresponse); } ESPCOM::print (F ("\",\"S\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MAX_DATA_LENGTH), output, espresponse); ESPCOM::print (F ("\",\"H\":\"Time Server 2\",\"M\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MIN_DATA_LENGTH), output, espresponse); ESPCOM::print (F ("\"}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //30- Time Server3 ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_TIME_SERVER3), output, espresponse); ESPCOM::print (F ("\",\"T\":\"S\",\"V\":\""), output, espresponse); if (!CONFIG::read_string (EP_TIME_SERVER3, sbuf, MAX_DATA_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print (encodeString(sbuf), output, espresponse); } ESPCOM::print (F ("\",\"S\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MAX_DATA_LENGTH), output, espresponse); ESPCOM::print (F ("\",\"H\":\"Time Server 3\",\"M\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MIN_DATA_LENGTH), output, espresponse); ESPCOM::print (F ("\"}"), output, espresponse); #endif #ifdef NOTIFICATION_FEATURE ESPCOM::println (F (","), output, espresponse); //Notification type ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (ESP_NOTIFICATION_TYPE), output, espresponse); ESPCOM::print (F("\",\"T\":\"B\",\"V\":\""), output, espresponse); if (!CONFIG::read_byte (ESP_NOTIFICATION_TYPE, &bbuf ) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ( (const char *) CONFIG::intTostr (bbuf), output, espresponse); } ESPCOM::print (F("\",\"H\":\"Notification\",\"O\":[{\"None\":\"0\"},{\"Pushover\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (ESP_PUSHOVER_NOTIFICATION), output, espresponse); ESPCOM::print (F("\"},{\"Email\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (ESP_EMAIL_NOTIFICATION), output, espresponse); ESPCOM::print (F("\"},{\"Line\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (ESP_LINE_NOTIFICATION), output, espresponse); ESPCOM::print (F("\"},{\"IFTTT\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (ESP_IFTTT_NOTIFICATION), output, espresponse); ESPCOM::print (F("\"}]}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //Token 1 ESPCOM::print (F("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (ESP_NOTIFICATION_TOKEN1), output, espresponse); ESPCOM::print ( F("\",\"T\":\"S\",\"V\":\""), output, espresponse); if (!CONFIG::read_string (ESP_NOTIFICATION_TOKEN1, sbuf, MAX_NOTIFICATION_TOKEN_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ("********", output, espresponse); } ESPCOM::print ( F("\",\"S\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MAX_NOTIFICATION_TOKEN_LENGTH), output, espresponse); ESPCOM::print ( F ("\",\"H\":\"Token 1\",\"M\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MIN_NOTIFICATION_TOKEN_LENGTH), output, espresponse); ESPCOM::print ( F("\"}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //Token 2 ESPCOM::print (F("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (ESP_NOTIFICATION_TOKEN2), output, espresponse); ESPCOM::print ( F("\",\"T\":\"S\",\"V\":\""), output, espresponse); if (!CONFIG::read_string (ESP_NOTIFICATION_TOKEN2, sbuf, MAX_NOTIFICATION_TOKEN_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ("********", output, espresponse); } ESPCOM::print ( F("\",\"S\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MAX_NOTIFICATION_TOKEN_LENGTH), output, espresponse); ESPCOM::print ( F ("\",\"H\":\"Token 2\",\"M\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MIN_NOTIFICATION_TOKEN_LENGTH), output, espresponse); ESPCOM::print ( F("\"}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //Notifications Settings ESPCOM::print (F("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (ESP_NOTIFICATION_SETTINGS), output, espresponse); ESPCOM::print ( F("\",\"T\":\"S\",\"V\":\""), output, espresponse); if (!CONFIG::read_string (ESP_NOTIFICATION_SETTINGS, sbuf, MAX_NOTIFICATION_TOKEN_LENGTH) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print (encodeString(sbuf), output, espresponse); } ESPCOM::print ( F("\",\"S\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MAX_NOTIFICATION_SETTINGS_LENGTH), output, espresponse); ESPCOM::print ( F ("\",\"H\":\"Notifications Settings\",\"M\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MIN_NOTIFICATION_SETTINGS_LENGTH), output, espresponse); ESPCOM::print ( F("\"}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //Auto Notification ESPCOM::print (F ("{\"F\":\"network\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (ESP_AUTO_NOTIFICATION), output, espresponse); ESPCOM::print (F ("\",\"T\":\"B\",\"V\":\""), output, espresponse); if (!CONFIG::read_byte (ESP_AUTO_NOTIFICATION, &bbuf ) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ( (const char *) CONFIG::intTostr (bbuf), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"Auto notification\",\"O\":[{\"No\":\"0\"},{\"Yes\":\"1\"}]}"), output, espresponse); #endif //NOTIFICATION_FEATURE } if (cmd_params == "printer" || cmd_params == "") { if (cmd_params == "") { ESPCOM::println (F (","), output, espresponse); } //Target FW ESPCOM::print (F ("{\"F\":\"printer\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_TARGET_FW), output, espresponse); ESPCOM::print (F ("\",\"T\":\"B\",\"V\":\""), output, espresponse); if (!CONFIG::read_byte (EP_TARGET_FW, &bbuf ) ) { ESPCOM::print ("Unknown", output, espresponse); } else { ESPCOM::print ( (const char *) CONFIG::intTostr (bbuf), output, espresponse); } ESPCOM::print (F ("\",\"H\":\"Target FW\",\"O\":[{\"Repetier\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (REPETIER), output, espresponse); ESPCOM::print (F ("\"},{\"Repetier for Davinci\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (REPETIER4DV), output, espresponse); ESPCOM::print (F ("\"},{\"Marlin\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MARLIN), output, espresponse); ESPCOM::print (F ("\"},{\"Marlin Kimbra\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (MARLINKIMBRA), output, espresponse); ESPCOM::print (F ("\"},{\"Smoothieware\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (SMOOTHIEWARE), output, espresponse); ESPCOM::print (F ("\"},{\"Grbl\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (GRBL), output, espresponse); ESPCOM::print (F ("\"},{\"Unknown\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (UNKNOWN_FW), output, espresponse); ESPCOM::print (F ("\"}]}"), output, espresponse); ESPCOM::println (F (","), output, espresponse); //Output flag ESPCOM::print (F ("{\"F\":\"printer\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_OUTPUT_FLAG), output, espresponse); ESPCOM::print (F ("\",\"T\":\"F\",\"V\":\""), output, espresponse); if (!CONFIG::read_byte (EP_OUTPUT_FLAG, &bbuf ) ) { ESPCOM::print ("???", output, espresponse); } else { ESPCOM::print ( (const char *) CONFIG::intTostr (bbuf), output, espresponse); } String s = "\",\"H\":\"Output msg\",\"O\":[{\"M117\":\""; s+= CONFIG::intTostr(FLAG_BLOCK_M117); s+= "\"}"; #ifdef ESP_OLED_FEATURE s+=",{\"Oled\":\""; s+= CONFIG::intTostr(FLAG_BLOCK_OLED); s+="\"}"; #endif s+=",{\"Serial\":\""; s+= CONFIG::intTostr(FLAG_BLOCK_SERIAL); s+="\"}"; #ifdef WS_DATA_FEATURE s+=",{\"Web Socket\":\""; s+= CONFIG::intTostr(FLAG_BLOCK_WSOCKET); s+="\"}"; #endif #ifdef TCP_IP_DATA_FEATURE s+=",{\"TCP\":\""; s+= CONFIG::intTostr(FLAG_BLOCK_TCP); s+="\"}"; #endif s+= "]}"; ESPCOM::print (s, output, espresponse); #ifdef DHT_FEATURE //DHT type ESPCOM::println (F (","), output, espresponse); ESPCOM::print (F ("{\"F\":\"printer\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_DHT_TYPE), output, espresponse); ESPCOM::print (F ("\",\"T\":\"B\",\"V\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (CONFIG::DHT_type), output, espresponse); ESPCOM::print (F ("\",\"H\":\"DHT Type\",\"O\":[{\"None\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (255), output, espresponse); ESPCOM::print (F ("\"},{\"DHT11\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (DHTesp::DHT11), output, espresponse); ESPCOM::print (F ("\"},{\"DHT22\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (DHTesp::DHT22), output, espresponse); ESPCOM::print (F ("\"},{\"AM2302\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (DHTesp::RHT03), output, espresponse); ESPCOM::print (F ("\"},{\"RHT03\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (DHTesp::AM2302), output, espresponse); ESPCOM::print (F ("\"}]}"), output, espresponse); //DHT interval ESPCOM::println (F (","), output, espresponse); ESPCOM::print (F ("{\"F\":\"printer\",\"P\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (EP_DHT_INTERVAL), output, espresponse); ESPCOM::print (F ("\",\"T\":\"I\",\"V\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (CONFIG::DHT_interval), output, espresponse); ESPCOM::print (F ("\",\"H\":\"DHT check (seconds)\",\"S\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (DEFAULT_MAX_WEB_PORT), output, espresponse); ESPCOM::print (F ("\",\"M\":\""), output, espresponse); ESPCOM::print ( (const char *) CONFIG::intTostr (0), output, espresponse); ESPCOM::print (F ("\"}"), output, espresponse); #endif } //end JSON ESPCOM::println (F ("\n]}"), output, espresponse); } break; //Set EEPROM setting //[ESP401]P= T= V= pwd= case 401: { //check validity of parameters String spos = get_param (cmd_params, "P=", false); String styp = get_param (cmd_params, "T=", false); String sval = get_param (cmd_params, "V=", true); sval.trim(); int pos = spos.toInt(); if ( (pos == 0 && spos != "0") || (pos > LAST_EEPROM_ADDRESS || pos < 0) ) { response = false; } if (! (styp == "B" || styp == "S" || styp == "A" || styp == "I" || styp == "F") ) { response = false; } if ((sval.length() == 0) && !((pos==EP_AP_PASSWORD) || (pos==EP_STA_PASSWORD))) { response = false; } #ifdef AUTHENTICATION_FEATURE if (response) { //check authentication level_authenticate_type auth_need = LEVEL_ADMIN; for (int i = 0; i < AUTH_ENTRY_NB; i++) { if (Setting[i][0] == pos ) { auth_need = (level_authenticate_type) (Setting[i][1]); i = AUTH_ENTRY_NB; } } if ( (auth_need == LEVEL_ADMIN && auth_type == LEVEL_USER) || (auth_type == LEVEL_GUEST) ) { response = false; } } #endif if (response) { if ((styp == "B") || (styp == "F")) { byte bbuf = sval.toInt(); if (!CONFIG::write_byte (pos, bbuf) ) { response = false; } else { //dynamique refresh is better than restart the board if (pos == EP_OUTPUT_FLAG) { CONFIG::output_flag = bbuf; } if (pos == EP_TARGET_FW) { CONFIG::InitFirmwareTarget(); } #ifdef DHT_FEATURE if (pos == EP_DHT_TYPE) { CONFIG::DHT_type = bbuf; CONFIG::InitDHT(true); } #endif #ifdef NOTIFICATION_FEATURE if (pos == ESP_AUTO_NOTIFICATION) { notificationsservice.setAutonotification ((bbuf == 0)? false: true); } #endif #if defined(TIMESTAMP_FEATURE) if ( (pos == EP_TIMEZONE) || (pos == EP_TIME_ISDST) || (pos == EP_TIME_SERVER1) || (pos == EP_TIME_SERVER2) || (pos == EP_TIME_SERVER3) ) { CONFIG::init_time_client(); } #endif } } if (styp == "I") { int ibuf = sval.toInt(); if (!CONFIG::write_buffer (pos, (const byte *) &ibuf, INTEGER_LENGTH) ) { response = false; } else { #ifdef DHT_FEATURE if (pos == EP_DHT_INTERVAL) { CONFIG::DHT_interval = ibuf; } #endif } } if (styp == "S") { if (!CONFIG::write_string (pos, sval.c_str() ) ) { response = false; } } if (styp == "A") { byte ipbuf[4]; if (CONFIG::split_ip (sval.c_str(), ipbuf) < 4) { response = false; } else if (!CONFIG::write_buffer (pos, ipbuf, IP_LENGTH) ) { response = false; } } } if (!response) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); } else { ESPCOM::println (OK_CMD_MSG, output, espresponse); } } break; //Get available AP list (limited to 30) //output is JSON or plain text according parameter //[ESP410] case 410: { parameter = get_param (cmd_params, "", true); bool plain = (parameter == "plain"); #if defined(ASYNCWEBSERVER) if (!plain) { ESPCOM::print (F ("{\"AP_LIST\":["), output, espresponse); } int n = WiFi.scanComplete(); if (n == -2) { WiFi.scanNetworks (ESP_USE_ASYNC); } else if (n) { #else int n = WiFi.scanNetworks (); if (!plain) { ESPCOM::print (F ("{\"AP_LIST\":["), output, espresponse); } #endif for (int i = 0; i < n; ++i) { if (i > 0) { if (!plain) { ESPCOM::print (F (","), output, espresponse); } else { ESPCOM::print (F ("\n"), output, espresponse); } } if (!plain) { ESPCOM::print (F ("{\"SSID\":\""), output, espresponse); ESPCOM::print (encodeString(WiFi.SSID (i).c_str()), output, espresponse); } else ESPCOM::print (WiFi.SSID (i).c_str(), output, espresponse); if (!plain) { ESPCOM::print (F ("\",\"SIGNAL\":\""), output, espresponse); } else { ESPCOM::print (F ("\t"), output, espresponse); } ESPCOM::print (CONFIG::intTostr (wifi_config.getSignal (WiFi.RSSI (i) ) ), output, espresponse);; //ESPCOM::print(F("%"), output, espresponse); if (!plain) { ESPCOM::print (F ("\",\"IS_PROTECTED\":\""), output, espresponse); } if (WiFi.encryptionType (i) == ENC_TYPE_NONE) { if (!plain) { ESPCOM::print (F ("0"), output, espresponse); } else { ESPCOM::print (F ("\tOpen"), output, espresponse); } } else { if (!plain) { ESPCOM::print (F ("1"), output, espresponse); } else { ESPCOM::print (F ("\tSecure"), output, espresponse); } } if (!plain) { ESPCOM::print (F ("\"}"), output, espresponse); } } WiFi.scanDelete(); #if defined(ASYNCWEBSERVER) if (WiFi.scanComplete() == -2) { WiFi.scanNetworks (ESP_USE_ASYNC); } } #endif if (!plain) { ESPCOM::print (F ("]}"), output, espresponse); } else { ESPCOM::print (F ("\n"), output, espresponse); } } break; #endif //USE_AS_UPDATER_ONLY //Get ESP current status in plain or JSON //[ESP420] case 420: { parameter = get_param (cmd_params, "", true); CONFIG::print_config (output, (parameter == "plain"), espresponse); } break; //Set ESP mode //cmd is RESET, SAFEMODE, RESTART //[ESP444] pwd= case 444: parameter = get_param (cmd_params, "", true); #ifdef AUTHENTICATION_FEATURE if (auth_type != LEVEL_ADMIN) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } else #endif { if (parameter == "RESET") { CONFIG::reset_config(); ESPCOM::println (F ("Reset done - restart needed"), output, espresponse); } else if (parameter == "SAFEMODE") { wifi_config.Safe_Setup(); ESPCOM::println (F ("Set Safe Mode - restart needed"), output, espresponse); } else if (parameter == "RESTART") { ESPCOM::println (F ("Restart started"), output, espresponse); web_interface->restartmodule = true; } else { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } } break; #ifndef USE_AS_UPDATER_ONLY //[ESP500] case 500: { //send GCode with check sum caching right line numbering //be sure serial is locked if ( (web_interface->blockserial) ) { break; } int32_t linenb = 1; cmd_params.trim() ; if (sendLine2Serial (cmd_params, linenb, &linenb)) { ESPCOM::println (OK_CMD_MSG, output, espresponse); } else { //it may failed because of skip if repetier so let's reset numbering first if ( ( CONFIG::GetFirmwareTarget() == REPETIER4DV) || (CONFIG::GetFirmwareTarget() == REPETIER) ) { //reset numbering String cmd = "M110 N0"; if (sendLine2Serial (cmd, -1, NULL)) { linenb = 1; //if success let's try again to send the command if (sendLine2Serial (cmd_params, linenb, &linenb)) { ESPCOM::println (OK_CMD_MSG, output, espresponse); } else { ESPCOM::println (ERROR_CMD_MSG, output, espresponse); response = false; } } else { ESPCOM::println (ERROR_CMD_MSG, output, espresponse); response = false; } } else { ESPCOM::println (ERROR_CMD_MSG, output, espresponse); response = false; } } } break; //[ESP501] case 501: { //send line checksum cmd_params.trim(); int8_t chk = Checksum(cmd_params.c_str(),cmd_params.length()); String schecksum = "Checksum: " + String(chk); ESPCOM::println (schecksum, output, espresponse); } #ifdef AUTHENTICATION_FEATURE //Change / Reset user password //[ESP555] pwd= case 555: { if (auth_type == LEVEL_ADMIN) { parameter = get_param (cmd_params, "", true); if (parameter.length() == 0) { if (CONFIG::write_string (EP_USER_PWD, FPSTR (DEFAULT_USER_PWD) ) ) { ESPCOM::println (OK_CMD_MSG, output, espresponse); } else { ESPCOM::println (ERROR_CMD_MSG, output, espresponse); response = false; } } else { if (CONFIG::isLocalPasswordValid (parameter.c_str() ) ) { if (CONFIG::write_string (EP_USER_PWD, parameter.c_str() ) ) { ESPCOM::println (OK_CMD_MSG, output, espresponse); } else { ESPCOM::println (ERROR_CMD_MSG, output, espresponse); response = false; } } else { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } } } else { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } break; } #endif #ifdef NOTIFICATION_FEATURE //Send Notification //[ESP600]msg [pwd=] case 600: #ifdef AUTHENTICATION_FEATURE if (auth_type == LEVEL_GUEST) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); return false; } #endif parameter = get_param (cmd_params, "", true); if (parameter.length() == 0) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); return false; } if (notificationsservice.sendMSG("ESP3D Notification", parameter.c_str())) { ESPCOM::println (OK_CMD_MSG, output, espresponse); } else { ESPCOM::println (ERROR_CMD_MSG, output, espresponse); response = false; } break; //Set/Get Notification settings //[ESP610]type= T1= T2= TS= [pwd=] //Get will give type and settings only not the protected T1/T2 case 610: #ifdef AUTHENTICATION_FEATURE if (auth_type == LEVEL_GUEST) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); return false; } #endif parameter = get_param (cmd_params, "", false); //get if (parameter.length() == 0) { uint8_t Ntype = 0; if (!CONFIG::read_byte (ESP_NOTIFICATION_TYPE, &Ntype ) ) { Ntype =0; } char sbuf[MAX_DATA_LENGTH + 1]; static String tmp; tmp = (Ntype == ESP_PUSHOVER_NOTIFICATION)?"PUSHOVER":(Ntype == ESP_EMAIL_NOTIFICATION)?"EMAIL":(Ntype == ESP_LINE_NOTIFICATION)?"LINE":(Ntype == ESP_IFTTT_NOTIFICATION)?"IFTTT":"NONE"; if (CONFIG::read_string (ESP_NOTIFICATION_SETTINGS, sbuf, MAX_NOTIFICATION_SETTINGS_LENGTH) ) { tmp+= " "; tmp += sbuf; } ESPCOM::println (tmp.c_str(), output, espresponse); } else { response = false; //type parameter = get_param (cmd_params, "type="); if (parameter.length() > 0) { uint8_t Ntype; parameter.toUpperCase(); if (parameter == "NONE") { Ntype = 0; } else if (parameter == "PUSHOVER") { Ntype = ESP_PUSHOVER_NOTIFICATION; } else if (parameter == "EMAIL") { Ntype = ESP_EMAIL_NOTIFICATION; } else if (parameter == "LINE") { Ntype = ESP_LINE_NOTIFICATION; } else if (parameter == "IFTTT") { Ntype = ESP_IFTTT_NOTIFICATION; } else { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); return false; } if (!CONFIG::write_byte (ESP_NOTIFICATION_TYPE, Ntype) ) { ESPCOM::println (ERROR_CMD_MSG, output, espresponse); return false; } else { response = true; } } //Settings parameter = get_param (cmd_params, "TS="); if (parameter.length() > 0) { if (!CONFIG::write_string (ESP_NOTIFICATION_SETTINGS, parameter.c_str() ) ) { ESPCOM::println (ERROR_CMD_MSG, output, espresponse); return false; } else { response = true; } } //Token1 parameter = get_param (cmd_params, "T1="); if (parameter.length() > 0) { if (!CONFIG::write_string (ESP_NOTIFICATION_TOKEN1, parameter.c_str() ) ) { ESPCOM::println (ERROR_CMD_MSG, output, espresponse); return false; } else { response = true; } } //Token2 parameter = get_param (cmd_params, "T2="); if (parameter.length() > 0) { if (!CONFIG::write_string (ESP_NOTIFICATION_TOKEN2, parameter.c_str() ) ) { ESPCOM::println (ERROR_CMD_MSG, output, espresponse); return false; } else { response = true; } } if (response) { //Restart service notificationsservice.begin(); ESPCOM::println (OK_CMD_MSG, output, espresponse); } else { ESPCOM::println (ERROR_CMD_MSG, output, espresponse); } } break; #endif //[ESP700] case 700: { //read local file //be sure serial is locked if ( (web_interface->blockserial) ) { break; } cmd_params.trim() ; if ( (cmd_params.length() > 0) && (cmd_params[0] != '/') ) { cmd_params = "/" + cmd_params; } FS_FILE currentfile = SPIFFS.open (cmd_params, SPIFFS_FILE_READ); if (currentfile) {//if file open success //flush to be sure send buffer is empty ESPCOM::flush (DEFAULT_PRINTER_PIPE); //until no line in file while (currentfile.available()) { String currentline = currentfile.readStringUntil('\n'); currentline.replace("\n",""); currentline.replace("\r",""); currentline.trim(); if (currentline.length() > 0) { int ESPpos = currentline.indexOf ("[ESP"); if (ESPpos ==0) { //is there the second part? int ESPpos2 = currentline.indexOf ("]", ESPpos); if (ESPpos2 > -1) { //Split in command and parameters String cmd_part1 = currentline.substring (ESPpos + 4, ESPpos2); String cmd_part2 = ""; //is there space for parameters? if ((uint)ESPpos2 < currentline.length() ) { cmd_part2 = currentline.substring (ESPpos2 + 1); } //if command is a valid number then execute command if(cmd_part1.toInt()!=0) { execute_command(cmd_part1.toInt(),cmd_part2,NO_PIPE, auth_type, espresponse); } //if not is not a valid [ESPXXX] command ignore it } } else { //send line to serial ESPCOM::println (currentline, DEFAULT_PRINTER_PIPE); CONFIG::wait (1); //flush to be sure send buffer is empty ESPCOM::flush (DEFAULT_PRINTER_PIPE); } CONFIG::wait (1); } } currentfile.close(); ESPCOM::println (OK_CMD_MSG, output, espresponse); } else { ESPCOM::println (ERROR_CMD_MSG, output, espresponse); response = false; } break; } //Format SPIFFS //[ESP710]FORMAT pwd= case 710: parameter = get_param (cmd_params, "", true); #ifdef AUTHENTICATION_FEATURE if (auth_type != LEVEL_ADMIN) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } else #endif { if (parameter == "FORMAT") { ESPCOM::print (F ("Formating"), output, espresponse); SPIFFS.format(); ESPCOM::println (F ("...Done"), output, espresponse); } else { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } } break; //SPIFFS total size and used size //[ESP720]
case 720: ESPCOM::print (cmd_params, output, espresponse); #ifdef ARDUINO_ARCH_ESP8266 fs::FSInfo info; SPIFFS.info (info); ESPCOM::print ("SPIFFS Total:", output, espresponse); ESPCOM::print (CONFIG::formatBytes (info.totalBytes).c_str(), output, espresponse); ESPCOM::print (" Used:", output, espresponse); ESPCOM::println (CONFIG::formatBytes (info.usedBytes).c_str(), output, espresponse); #else ESPCOM::print ("SPIFFS Total:", output, espresponse); ESPCOM::print (CONFIG::formatBytes (SPIFFS.totalBytes() ).c_str(), output, espresponse); ESPCOM::print (" Used:", output, espresponse); ESPCOM::println (CONFIG::formatBytes (SPIFFS.usedBytes() ).c_str(), output, espresponse); #endif break; #endif //USE_AS_UPDATER_ONLY //get fw version firmare target and fw version //[ESP800]
case 800: { byte sd_dir = 0; String shost ; if (!CONFIG::read_string (EP_HOSTNAME, shost, MAX_HOSTNAME_LENGTH) ) { shost = wifi_config.get_default_hostname(); } ESPCOM::print (cmd_params, output, espresponse); ESPCOM::print (F ("FW version:"), output, espresponse); ESPCOM::print (FW_VERSION, output, espresponse); ESPCOM::print (F (" # FW target:"), output, espresponse); ESPCOM::print (CONFIG::GetFirmwareTargetShortName(), output, espresponse); ESPCOM::print (F (" # FW HW:"), output, espresponse); if (CONFIG::is_direct_sd) { ESPCOM::print (F ("Direct SD"), output, espresponse); } else { ESPCOM::print (F ("Serial SD"), output, espresponse); } ESPCOM::print (F (" # primary sd:"), output, espresponse); if (!CONFIG::read_byte (EP_PRIMARY_SD, &sd_dir ) ) { sd_dir = DEFAULT_PRIMARY_SD; } if (sd_dir == SD_DIRECTORY) { ESPCOM::print (F ("/sd/"), output, espresponse); } else if (sd_dir == EXT_DIRECTORY) { ESPCOM::print (F ("/ext/"), output, espresponse); } else { ESPCOM::print (F ("none"), output, espresponse); } ESPCOM::print (F (" # secondary sd:"), output, espresponse); if (!CONFIG::read_byte (EP_SECONDARY_SD, &sd_dir ) ) { sd_dir = DEFAULT_SECONDARY_SD; } if (sd_dir == SD_DIRECTORY) { ESPCOM::print (F ("/sd/"), output, espresponse); } else if (sd_dir == EXT_DIRECTORY) { ESPCOM::print (F ("/ext/"), output, espresponse); } else { ESPCOM::print (F ("none"), output, espresponse); } ESPCOM::print (F (" # authentication:"), output, espresponse); #ifdef AUTHENTICATION_FEATURE ESPCOM::print (F ("yes"), output, espresponse); #else ESPCOM::print (F ("no"), output, espresponse); #endif ESPCOM::print (F (" # webcommunication:"), output, espresponse); #if defined (ASYNCWEBSERVER) ESPCOM::print (F ("Async"), output, espresponse); #else ESPCOM::print (F ("Sync:"), output, espresponse); String sp = String(wifi_config.iweb_port+1); sp += ":"; if (WiFi.getMode() == WIFI_STA) { sp += WiFi.localIP().toString(); } else if ((WiFi.getMode() == WIFI_AP) || (WiFi.getMode() == WIFI_AP_STA)) { sp += WiFi.softAPIP().toString(); } else { sp += "0.0.0.0"; } ESPCOM::print (sp.c_str(), output, espresponse); #endif ESPCOM::print (F (" # hostname:"), output, espresponse); ESPCOM::print (shost, output, espresponse); if (WiFi.getMode() == WIFI_AP) { ESPCOM::print (F("(AP mode)"), output, espresponse); } ESPCOM::println ("", output, espresponse); } break; #ifndef USE_AS_UPDATER_ONLY //get fw target //[ESP801]
case 801: ESPCOM::print (cmd_params, output, espresponse); ESPCOM::println (CONFIG::GetFirmwareTargetShortName(), output, espresponse); break; case 810: web_interface->blockserial = false; break; case 900: parameter = get_param (cmd_params, "", true); #ifdef AUTHENTICATION_FEATURE if (auth_type == LEVEL_GUEST) { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } #endif if (parameter.length() == 0) { if (CONFIG::is_com_enabled) { ESPCOM::print (F ("ENABLED"), output, espresponse); } else { ESPCOM::print (F ("DISABLED"), output, espresponse); } } else { if (parameter == "ENABLE") { CONFIG::DisableSerial(); if (!CONFIG::InitBaudrate()){ ESPCOM::print (F ("Cannot enable serial communication"), output, espresponse); } else { ESPCOM::print (F ("Enable serial communication"), output, espresponse); } } else if (parameter == "DISABLE") { ESPCOM::print (F ("Disable serial communication"), output, espresponse); CONFIG::DisableSerial(); } else { ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; } } break; #endif //USE_AS_UPDATER_ONLY default: ESPCOM::println (INCORRECT_CMD_MSG, output, espresponse); response = false; break; } return response; } bool COMMAND::check_command (String buffer, tpipe output, bool handlelockserial, bool executecmd) { String buffer2; LOG ("Check Command:") LOG (buffer) LOG ("\r\n") bool is_temp = false; if ( (buffer.indexOf ("T:") > -1 ) || (buffer.indexOf ("B:") > -1 ) ) { is_temp = true; } if ( ( CONFIG::GetFirmwareTarget() == REPETIER4DV) || (CONFIG::GetFirmwareTarget() == REPETIER) ) { //save time no need to continue if ( (buffer.indexOf ("busy:") > -1) || (buffer.startsWith ("wait") ) ) { return false; } if (buffer.startsWith ("ok") ) { return false; } } else if (buffer.startsWith ("ok") && buffer.length() < 4) { return false; } #ifdef SERIAL_COMMAND_FEATURE if (executecmd) { String ESP_Command; int ESPpos = -1; #ifdef MKS_TFT_FEATURE if (buffer.startsWith("at+")) { //echo ESPCOM::print (buffer, output); ESPCOM::print ("\r\r\n", output); if (buffer.startsWith("at+net_wanip=?")) { String ipstr; if (WiFi.getMode() == WIFI_STA) { ipstr = WiFi.localIP().toString() + "," + WiFi.subnetMask().toString()+ "," + WiFi.gatewayIP().toString()+"\r\n"; } else { ipstr = WiFi.softAPIP().toString() + ",255.255.255.0," + WiFi.softAPIP().toString()+"\r\n"; } ESPCOM::print (ipstr, output); } else if (buffer.startsWith("at+wifi_ConState=?")) { ESPCOM::print ("Connected\r\n", output); } else { ESPCOM::print ("ok\r\n", output); } return false; } #endif ESPpos = buffer.indexOf ("[ESP"); if (ESPpos == -1 && (CONFIG::GetFirmwareTarget() == SMOOTHIEWARE)) { ESPpos = buffer.indexOf ("[esp"); } if ((ESPpos > -1) && (ESPpos< (int)strlen("echo: " ))){ //is there the second part? int ESPpos2 = buffer.indexOf ("]", ESPpos); if (ESPpos2 > -1) { //Split in command and parameters String cmd_part1 = buffer.substring (ESPpos + 4, ESPpos2); String cmd_part2 = ""; //is there space for parameters? if ((uint)ESPpos2 < buffer.length() ) { cmd_part2 = buffer.substring (ESPpos2 + 1); } //if command is a valid number then execute command if (cmd_part1.toInt() != 0) { execute_command (cmd_part1.toInt(), cmd_part2, output); } //if not is not a valid [ESPXXX] command } } } #endif return is_temp; } //read a buffer in an array void COMMAND::read_buffer_serial (uint8_t *b, size_t len) { for (size_t i = 0; i < len; i++) { read_buffer_serial (b[i]); //*b++; } } #ifdef TCP_IP_DATA_FEATURE //read buffer as char void COMMAND::read_buffer_tcp (uint8_t b) { static bool previous_was_char = false; static bool iscomment = false; //to ensure it is continuous string, no char separated by binaries if (!previous_was_char) { buffer_tcp = ""; iscomment = false; } //is comment ? if (char (b) == ';') { iscomment = true; } //it is a char so add it to buffer if (isPrintable (b) ) { previous_was_char = true; //add char if not a comment if (!iscomment) { buffer_tcp += char (b); } } else { previous_was_char = false; //next call will reset the buffer } //this is not printable but end of command check if need to handle it if (b == 13 || b == 10) { //reset comment flag iscomment = false; //Minimum is something like M10 so 3 char if (buffer_tcp.length() > 3) { check_command (buffer_tcp, TCP_PIPE); } } } #endif //read buffer as char void COMMAND::read_buffer_serial (uint8_t b) { static bool previous_was_char = false; static bool iscomment = false; //to ensure it is continuous string, no char separated by binaries if (!previous_was_char) { buffer_serial = ""; iscomment = false; } //is comment ? if (char (b) == ';') { iscomment = true; } //it is a char so add it to buffer if (isPrintable (b) ) { previous_was_char = true; if (!iscomment) { buffer_serial += char (b); } } else { previous_was_char = false; //next call will reset the buffer } //this is not printable but end of command check if need to handle it if (b == 13 || b == 10) { //reset comment flag iscomment = false; //Minimum is something like M10 so 3 char if (buffer_serial.length() > 3) { check_command (buffer_serial, DEFAULT_PRINTER_PIPE); } } }