2020-06-19 22:14:50 +02:00
# include "Global.h"
2020-06-24 01:16:00 +03:00
# include "CaptiveRequestHandler.h"
2020-06-22 17:40:29 +03:00
# include "Utils/PresetUtils.h"
2020-06-22 14:01:12 +03:00
static const char * MODULE = " Web " ;
static const uint8_t MIN_PRESET = 1 ;
static const uint8_t MAX_PRESET = 21 ;
bool parseRequestForPreset ( AsyncWebServerRequest * request , uint8_t & preset ) {
if ( request - > hasArg ( " preset " ) ) {
preset = request - > getParam ( " preset " ) - > value ( ) . toInt ( ) ;
return preset > = MIN_PRESET & & preset < = MAX_PRESET ;
}
return false ;
}
2020-06-19 22:14:50 +02:00
void web_init ( ) {
2020-06-24 01:16:00 +03:00
// server.addHandler(new CaptiveRequestHandler(jsonReadStr(configSetupJson, "name").c_str())).setFilter(ON_AP_FILTER);
2020-06-20 22:51:14 +03:00
server . on ( " /set " , HTTP_GET , [ ] ( AsyncWebServerRequest * request ) {
2020-06-22 14:01:12 +03:00
uint8_t preset ;
if ( parseRequestForPreset ( request , preset ) ) {
String srcMacro = preset = = 21 ? " configs/firmware.c.txt " : getPresetFile ( preset , CT_MACRO ) ;
String srcScenario = preset = = 21 ? " configs/firmware.s.txt " : getPresetFile ( preset , CT_SCENARIO ) ;
2020-06-22 17:40:29 +03:00
pm . info ( " activate " + getItemName ( getPresetItem ( preset ) ) ) ;
2020-06-22 14:01:12 +03:00
copyFile ( srcMacro , " firmware.c.txt " ) ;
copyFile ( srcScenario , " firmware.s.txt " ) ;
2020-06-20 22:51:14 +03:00
Device_init ( ) ;
Scenario_init ( ) ;
2020-06-22 14:01:12 +03:00
2020-06-20 22:51:14 +03:00
request - > redirect ( " /?set.device " ) ;
}
2020-06-22 14:01:12 +03:00
2020-06-20 22:51:14 +03:00
//--------------------------------------------------------------------------------
if ( request - > hasArg ( " devinit " ) ) {
Device_init ( ) ;
request - > send ( 200 , " text/text " , " OK " ) ;
}
//--------------------------------------------------------------------------------
if ( request - > hasArg ( " scen " ) ) {
2020-06-22 14:01:12 +03:00
String value = request - > getParam ( " scen " ) - > value ( ) ;
2020-06-20 22:51:14 +03:00
if ( value = = " 0 " ) {
jsonWriteStr ( configSetupJson , " scen " , value ) ;
saveConfig ( ) ;
Scenario_init ( ) ;
}
if ( value = = " 1 " ) {
jsonWriteStr ( configSetupJson , " scen " , value ) ;
saveConfig ( ) ;
Scenario_init ( ) ;
}
request - > send ( 200 , " text/text " , " OK " ) ;
}
//--------------------------------------------------------------------------------
if ( request - > hasArg ( " sceninit " ) ) {
Scenario_init ( ) ;
request - > send ( 200 , " text/text " , " OK " ) ;
}
//--------------------------------------------------------------------------------
2020-06-21 03:43:15 +03:00
# ifdef LOGGING_ENABLED
2020-06-20 22:51:14 +03:00
if ( request - > hasArg ( " cleanlog " ) ) {
clean_log_date ( ) ;
request - > send ( 200 , " text/text " , " OK " ) ;
}
2020-06-19 22:14:50 +02:00
# endif
2020-06-20 22:51:14 +03:00
//==============================udp settings=============================================
if ( request - > hasArg ( " udponoff " ) ) {
2020-06-22 14:01:12 +03:00
String value = request - > getParam ( " udponoff " ) - > value ( ) ;
2020-06-20 22:51:14 +03:00
if ( value = = " 0 " ) {
jsonWriteStr ( configSetupJson , " udponoff " , value ) ;
saveConfig ( ) ;
Scenario_init ( ) ;
}
if ( value = = " 1 " ) {
jsonWriteStr ( configSetupJson , " udponoff " , value ) ;
saveConfig ( ) ;
Scenario_init ( ) ;
}
request - > send ( 200 , " text/text " , " OK " ) ;
}
//--------------------------------------------------------------------------------
if ( request - > hasArg ( " updatelist " ) ) {
2020-06-21 03:43:15 +03:00
removeFile ( " /dev.csv " ) ;
2020-06-20 22:51:14 +03:00
addFile ( " dev.csv " , " device id;device name;ip address " ) ;
request - > redirect ( " /?set.udp " ) ;
}
//--------------------------------------------------------------------------------
if ( request - > hasArg ( " updatepage " ) ) {
request - > redirect ( " /?set.udp " ) ;
}
//--------------------------------------------------------------------------------
if ( request - > hasArg ( " devname " ) ) {
jsonWriteStr ( configSetupJson , " name " , request - > getParam ( " devname " ) - > value ( ) ) ;
saveConfig ( ) ;
request - > send ( 200 , " text/text " , " OK " ) ;
}
//==============================wifi settings=============================================
if ( request - > hasArg ( " routerssid " ) ) {
jsonWriteStr ( configSetupJson , " routerssid " , request - > getParam ( " routerssid " ) - > value ( ) ) ;
saveConfig ( ) ;
request - > send ( 200 , " text/text " , " OK " ) ;
}
if ( request - > hasArg ( " routerpass " ) ) {
jsonWriteStr ( configSetupJson , " routerpass " , request - > getParam ( " routerpass " ) - > value ( ) ) ;
saveConfig ( ) ;
request - > send ( 200 , " text/text " , " OK " ) ;
}
//--------------------------------------------------------------------------------
if ( request - > hasArg ( " apssid " ) ) {
jsonWriteStr ( configSetupJson , " apssid " , request - > getParam ( " apssid " ) - > value ( ) ) ;
saveConfig ( ) ;
request - > send ( 200 , " text/text " , " OK " ) ;
}
if ( request - > hasArg ( " appass " ) ) {
jsonWriteStr ( configSetupJson , " appass " , request - > getParam ( " appass " ) - > value ( ) ) ;
saveConfig ( ) ;
request - > send ( 200 , " text/text " , " OK " ) ;
}
//--------------------------------------------------------------------------------
if ( request - > hasArg ( " weblogin " ) ) {
jsonWriteStr ( configSetupJson , " weblogin " , request - > getParam ( " weblogin " ) - > value ( ) ) ;
saveConfig ( ) ;
request - > send ( 200 , " text/text " , " OK " ) ;
}
if ( request - > hasArg ( " webpass " ) ) {
jsonWriteStr ( configSetupJson , " webpass " , request - > getParam ( " webpass " ) - > value ( ) ) ;
saveConfig ( ) ;
request - > send ( 200 , " text/text " , " OK " ) ;
}
//--------------------------------------------------------------------------------
if ( request - > hasArg ( " timezone " ) ) {
jsonWriteStr ( configSetupJson , " timezone " , request - > getParam ( " timezone " ) - > value ( ) ) ;
saveConfig ( ) ;
reconfigTime ( ) ;
request - > send ( 200 , " text/text " , " OK " ) ;
}
if ( request - > hasArg ( " ntp " ) ) {
jsonWriteStr ( configSetupJson , " ntp " , request - > getParam ( " ntp " ) - > value ( ) ) ;
saveConfig ( ) ;
reconfigTime ( ) ;
request - > send ( 200 , " text/text " , " OK " ) ;
}
//--------------------------------------------------------------------------------
if ( request - > hasArg ( " device " ) ) {
if ( request - > getParam ( " device " ) - > value ( ) = = " ok " ) ESP . restart ( ) ;
request - > send ( 200 , " text/text " , " OK " ) ;
}
//--------------------------------------------------------------------------------
if ( request - > hasArg ( " blink " ) ) {
2020-06-22 14:01:12 +03:00
String value = request - > getParam ( " blink " ) - > value ( ) ;
2020-06-20 22:51:14 +03:00
if ( value = = " 0 " ) {
jsonWriteStr ( configSetupJson , " blink " , value ) ;
saveConfig ( ) ;
}
if ( value = = " 1 " ) {
jsonWriteStr ( configSetupJson , " blink " , value ) ;
saveConfig ( ) ;
}
request - > send ( 200 , " text/text " , " OK " ) ;
}
//==============================mqtt settings=============================================
if ( request - > hasArg ( " mqttServer " ) ) {
jsonWriteStr ( configSetupJson , " mqttServer " , request - > getParam ( " mqttServer " ) - > value ( ) ) ;
saveConfig ( ) ;
2020-06-22 14:01:12 +03:00
mqttParamsChanged = true ;
2020-06-20 22:51:14 +03:00
request - > send ( 200 , " text/text " , " ok " ) ;
}
if ( request - > hasArg ( " mqttPort " ) ) {
int port = ( request - > getParam ( " mqttPort " ) - > value ( ) ) . toInt ( ) ;
jsonWriteInt ( configSetupJson , " mqttPort " , port ) ;
saveConfig ( ) ;
2020-06-22 14:01:12 +03:00
mqttParamsChanged = true ;
2020-06-20 22:51:14 +03:00
request - > send ( 200 , " text/text " , " ok " ) ;
}
if ( request - > hasArg ( " mqttPrefix " ) ) {
jsonWriteStr ( configSetupJson , " mqttPrefix " , request - > getParam ( " mqttPrefix " ) - > value ( ) ) ;
saveConfig ( ) ;
2020-06-22 14:01:12 +03:00
mqttParamsChanged = true ;
2020-06-20 22:51:14 +03:00
request - > send ( 200 , " text/text " , " ok " ) ;
}
if ( request - > hasArg ( " mqttUser " ) ) {
jsonWriteStr ( configSetupJson , " mqttUser " , request - > getParam ( " mqttUser " ) - > value ( ) ) ;
saveConfig ( ) ;
2020-06-22 14:01:12 +03:00
mqttParamsChanged = true ;
2020-06-20 22:51:14 +03:00
request - > send ( 200 , " text/text " , " ok " ) ;
}
if ( request - > hasArg ( " mqttPass " ) ) {
jsonWriteStr ( configSetupJson , " mqttPass " , request - > getParam ( " mqttPass " ) - > value ( ) ) ;
saveConfig ( ) ;
2020-06-22 14:01:12 +03:00
mqttParamsChanged = true ;
2020-06-20 22:51:14 +03:00
request - > send ( 200 , " text/text " , " ok " ) ;
}
//--------------------------------------------------------------------------------
if ( request - > hasArg ( " mqttsend " ) ) {
mqtt_send_settings_to_udp = true ;
request - > send ( 200 , " text/text " , " ok " ) ;
}
//--------------------------------------------------------------------------------
2020-06-22 14:01:12 +03:00
2020-06-20 22:51:14 +03:00
if ( request - > hasArg ( " mqttcheck " ) ) {
2020-06-22 14:01:12 +03:00
String buf = " {} " ;
2020-06-24 01:16:00 +03:00
String payload = " <button class= \" close \" onclick= \" toggle('my-block') \" >× </button> " + MqttClient : : getStateStr ( ) ;
2020-06-22 14:01:12 +03:00
jsonWriteStr ( buf , " title " , payload ) ;
jsonWriteStr ( buf , " class " , " pop-up " ) ;
request - > send ( 200 , " text/text " , buf ) ;
2020-06-20 22:51:14 +03:00
}
2020-06-22 14:01:12 +03:00
2020-06-20 22:51:14 +03:00
//==============================push settings=============================================
2020-06-21 03:43:15 +03:00
# ifdef PUSH_ENABLED
2020-06-20 22:51:14 +03:00
if ( request - > hasArg ( " pushingboxid " ) ) {
jsonWriteStr ( configSetupJson , " pushingboxid " , request - > getParam ( " pushingboxid " ) - > value ( ) ) ;
saveConfig ( ) ;
request - > send ( 200 , " text/text " , " ok " ) ;
}
2020-06-19 22:14:50 +02:00
# endif
2020-06-20 22:51:14 +03:00
//==============================utilities settings=============================================
if ( request - > hasArg ( " itoc " ) ) {
i2c_scanning = true ;
request - > redirect ( " /?set.utilities " ) ;
}
} ) ;
//==============================upgrade settings=============================================
server . on ( " /check " , HTTP_GET , [ ] ( AsyncWebServerRequest * request ) {
upgrade_url = true ;
Serial . print ( " [I] Last firmware version: " ) ;
Serial . println ( last_version ) ;
String tmp = " {} " ;
int case_of_update ;
2020-06-19 22:14:50 +02:00
2020-06-20 22:51:14 +03:00
if ( WiFi . status ( ) ! = WL_CONNECTED ) last_version = " nowifi " ;
2020-06-21 03:43:15 +03:00
if ( ! FLASH_4MB ) last_version = " less " ;
2020-06-19 22:14:50 +02:00
2020-06-21 03:43:15 +03:00
if ( last_version = = FIRMWARE_VERSION ) case_of_update = 1 ;
if ( last_version ! = FIRMWARE_VERSION ) case_of_update = 2 ;
2020-06-20 22:51:14 +03:00
if ( last_version = = " error " ) case_of_update = 3 ;
if ( last_version = = " " ) case_of_update = 4 ;
if ( last_version = = " less " ) case_of_update = 5 ;
if ( last_version = = " nowifi " ) case_of_update = 6 ;
if ( last_version = = " notsupported " ) case_of_update = 7 ;
2020-06-19 22:14:50 +02:00
2020-06-20 22:51:14 +03:00
switch ( case_of_update ) {
case 1 : {
jsonWriteStr ( tmp , " title " , " <button class= \" close \" onclick= \" toggle('my-block') \" >× </button>Последняя версия прошивки уже установлена. " ) ;
jsonWriteStr ( tmp , " class " , " pop-up " ) ;
} break ;
2020-06-19 22:14:50 +02:00
2020-06-20 22:51:14 +03:00
case 2 : {
jsonWriteStr ( tmp , " title " , " <button class= \" close \" onclick= \" toggle('my-block') \" >× </button>Имеется новая версия прошивки<a href= \" # \" class= \" btn btn-block btn-danger \" onclick= \" send_request(this, '/upgrade');setTimeout(function(){ location.href='/'; }, 120000);html('my-block','<span class=loader></span>Идет обновление прошивки, после обновления страница перезагрузится автоматически...') \" >Установить</a> " ) ;
jsonWriteStr ( tmp , " class " , " pop-up " ) ;
} break ;
2020-06-19 22:14:50 +02:00
2020-06-20 22:51:14 +03:00
case 3 : {
jsonWriteStr ( tmp , " title " , " <button class= \" close \" onclick= \" toggle('my-block') \" >× </button>Ошибка... Cе р ве р не найден. Попробуйте позже... " ) ;
jsonWriteStr ( tmp , " class " , " pop-up " ) ;
} break ;
2020-06-19 22:14:50 +02:00
2020-06-20 22:51:14 +03:00
case 4 : {
jsonWriteStr ( tmp , " title " , " <button class= \" close \" onclick= \" toggle('my-block') \" >× </button>Нажмите на кнопку \" обновить прошивку \" повторно... " ) ;
jsonWriteStr ( tmp , " class " , " pop-up " ) ;
break ;
}
2020-06-19 22:14:50 +02:00
2020-06-20 22:51:14 +03:00
case 5 : {
jsonWriteStr ( tmp , " title " , " <button class= \" close \" onclick= \" toggle('my-block') \" >× </button>Обновление по воздуху не поддерживается, модуль имеет меньше 4 мб памяти... " ) ;
jsonWriteStr ( tmp , " class " , " pop-up " ) ;
break ;
}
2020-06-19 22:14:50 +02:00
2020-06-20 22:51:14 +03:00
case 6 : {
jsonWriteStr ( tmp , " title " , " <button class= \" close \" onclick= \" toggle('my-block') \" >× </button>Устройство не подключено к роутеру... " ) ;
jsonWriteStr ( tmp , " class " , " pop-up " ) ;
break ;
}
2020-06-19 22:14:50 +02:00
2020-06-20 22:51:14 +03:00
case 7 : {
jsonWriteStr ( tmp , " title " , " <button class= \" close \" onclick= \" toggle('my-block') \" >× </button>Обновление на новую версию возможно только через usb... " ) ;
jsonWriteStr ( tmp , " class " , " pop-up " ) ;
break ;
}
2020-06-19 22:14:50 +02:00
}
2020-06-20 22:51:14 +03:00
request - > send ( 200 , " text/text " , tmp ) ;
} ) ;
2020-06-19 22:14:50 +02:00
2020-06-20 22:51:14 +03:00
server . on ( " /upgrade " , HTTP_GET , [ ] ( AsyncWebServerRequest * request ) {
upgrade = true ;
String tmp = " {} " ;
request - > send ( 200 , " text/text " , " ok " ) ;
} ) ;
2020-06-19 22:14:50 +02:00
}