mirror of https://github.com/arendst/Tasmota.git
Merge branch 'development' of https://github.com/pcdiem/Tasmota into device-groups-7
This commit is contained in:
commit
a4b3e61ed0
|
@ -19,6 +19,8 @@
|
|||
Modified 8 May 2015 by Hristo Gochkov (proper post and file upload handling)
|
||||
*/
|
||||
|
||||
#ifdef ESP8266
|
||||
|
||||
// Use patched Parsing.cpp to fix ALEXA parsing issue in v2.4.2
|
||||
#include <core_version.h>
|
||||
#if defined(ARDUINO_ESP8266_RELEASE_2_4_2)
|
||||
|
@ -620,4 +622,6 @@ bool ESP8266WebServer::_parseFormUploadAborted(){
|
|||
return false;
|
||||
}
|
||||
|
||||
#endif // ARDUINO_ESP8266_RELEASE
|
||||
#endif // ARDUINO_ESP8266_RELEASE
|
||||
|
||||
#endif // ESP8266
|
||||
|
|
|
@ -118,8 +118,6 @@ void ButtonHandler(void)
|
|||
uint8_t hold_time_extent = IMMINENT_RESET_FACTOR; // Extent hold time factor in case of iminnent Reset command
|
||||
uint16_t loops_per_second = 1000 / Settings.button_debounce; // ButtonDebounce (50)
|
||||
char scmnd[20];
|
||||
char scommand[CMDSZ];
|
||||
char stopic[TOPSZ];
|
||||
|
||||
// uint8_t maxdev = (devices_present > MAX_KEYS) ? MAX_KEYS : devices_present;
|
||||
// for (uint32_t button_index = 0; button_index < maxdev; button_index++) {
|
||||
|
@ -190,12 +188,15 @@ void ButtonHandler(void)
|
|||
|
||||
if ((PRESSED == button) && (NOT_PRESSED == Button.last_state[button_index])) {
|
||||
|
||||
if (Settings.flag.button_single && !Settings.flag3.mqtt_buttons) { // SetOption13 (0) - Allow only single button press for immediate action, SetOption73 (0) - Decouple button from relay and send just mqtt topic
|
||||
AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_BUTTON "%d " D_IMMEDIATE), button_index +1);
|
||||
if (!SendKey(KEY_BUTTON, button_index +1, POWER_TOGGLE)) { // Execute Toggle command via MQTT if ButtonTopic is set
|
||||
ExecuteCommandPower(button_index +1, POWER_TOGGLE, SRC_BUTTON); // Execute Toggle command internally
|
||||
if (Settings.flag.button_single) { // SetOption13 (0) - Allow only single button press for immediate action, SetOption73 (0) - Decouple button from relay and send just mqtt topic
|
||||
if (!Settings.flag3.mqtt_buttons) {
|
||||
AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_BUTTON "%d " D_IMMEDIATE), button_index +1);
|
||||
if (!SendKey(KEY_BUTTON, button_index +1, POWER_TOGGLE)) { // Execute Toggle command via MQTT if ButtonTopic is set
|
||||
ExecuteCommandPower(button_index +1, POWER_TOGGLE, SRC_BUTTON); // Execute Toggle command internally
|
||||
}
|
||||
} else {
|
||||
MqttButtonTopic(button_index +1, 1, 0); // SetOption73 (0) - Decouple button from relay and send just mqtt topic
|
||||
}
|
||||
|
||||
} else {
|
||||
Button.press_counter[button_index] = (Button.window_timer[button_index]) ? Button.press_counter[button_index] +1 : 1;
|
||||
AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_BUTTON "%d " D_MULTI_PRESS " %d"), button_index +1, Button.press_counter[button_index]);
|
||||
|
@ -217,12 +218,10 @@ void ButtonHandler(void)
|
|||
if (Button.hold_timer[button_index] == loops_per_second * Settings.param[P_HOLD_TIME] / 10) { // SetOption32 (40) - Button hold
|
||||
Button.press_counter[button_index] = 0;
|
||||
if (Settings.flag3.mqtt_buttons) { // SetOption73 (0) - Decouple button from relay and send just mqtt topic
|
||||
snprintf_P(scommand, sizeof(scommand), PSTR("BUTTON%d"), button_index +1);
|
||||
GetTopic_P(stopic, STAT, mqtt_topic, scommand);
|
||||
Response_P(S_JSON_COMMAND_SVALUE, "ACTION", GetStateText(3));
|
||||
MqttPublish(stopic);
|
||||
}
|
||||
SendKey(KEY_BUTTON, button_index +1, POWER_HOLD); // Execute Hold command via MQTT if ButtonTopic is set
|
||||
MqttButtonTopic(button_index +1, 3, 1);
|
||||
} else {
|
||||
SendKey(KEY_BUTTON, button_index +1, POWER_HOLD); // Execute Hold command via MQTT if ButtonTopic is set
|
||||
}
|
||||
} else {
|
||||
if (Button.hold_timer[button_index] == loops_per_second * hold_time_extent * Settings.param[P_HOLD_TIME] / 10) { // SetOption32 (40) - Button held for factor times longer
|
||||
Button.press_counter[button_index] = 0;
|
||||
|
@ -287,15 +286,7 @@ void ButtonHandler(void)
|
|||
}
|
||||
if (Settings.flag3.mqtt_buttons) { // SetOption73 (0) - Decouple button from relay and send just mqtt topic
|
||||
if (Button.press_counter[button_index] >= 1 && Button.press_counter[button_index] <= 5) {
|
||||
char mqttstate[7];
|
||||
|
||||
GetTextIndexed(mqttstate, sizeof(mqttstate), Button.press_counter[button_index], kMultiPress);
|
||||
SendKey(KEY_BUTTON, button_index +1, Button.press_counter[button_index] +9);
|
||||
snprintf_P(scommand, sizeof(scommand), PSTR("BUTTON%d"), button_index +1);
|
||||
GetTopic_P(stopic, STAT, mqtt_topic, scommand);
|
||||
Response_P(S_JSON_COMMAND_SVALUE, "ACTION", mqttstate);
|
||||
MqttPublish(stopic);
|
||||
|
||||
MqttButtonTopic(button_index +1, Button.press_counter[button_index], 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -306,12 +297,28 @@ void ButtonHandler(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Button.last_state[button_index] = button;
|
||||
}
|
||||
}
|
||||
|
||||
void MqttButtonTopic(uint8_t button_id, uint8_t action, uint8_t hold)
|
||||
{
|
||||
char scommand[CMDSZ];
|
||||
char stopic[TOPSZ];
|
||||
char mqttstate[7];
|
||||
|
||||
GetTextIndexed(mqttstate, sizeof(mqttstate), action, kMultiPress);
|
||||
|
||||
SendKey(KEY_BUTTON, button_id, (hold) ? 3 : action +9);
|
||||
snprintf_P(scommand, sizeof(scommand), PSTR("BUTTON%d"), button_id);
|
||||
GetTopic_P(stopic, STAT, mqtt_topic, scommand);
|
||||
Response_P(S_JSON_COMMAND_SVALUE, "ACTION", (hold) ? SettingsText(SET_STATE_TXT4) : mqttstate);
|
||||
MqttPublish(stopic);
|
||||
}
|
||||
|
||||
void ButtonLoop(void)
|
||||
{
|
||||
if (Button.present) {
|
||||
|
|
|
@ -371,13 +371,13 @@ void FLOG::stopRecording(void){
|
|||
*
|
||||
* @param size: size of the data entry/record in bytes, i.e. sizeof(myStruct)
|
||||
* @param sendHeader: should implement at least something like:
|
||||
* @example WebServer->setContentLength(CONTENT_LENGTH_UNKNOWN); // This is very likely unknown!!
|
||||
* WebServer->sendHeader(F("Content-Disposition"), F("attachment; filename=myfile.txt"));
|
||||
* @example Webserver->setContentLength(CONTENT_LENGTH_UNKNOWN); // This is very likely unknown!!
|
||||
* Webserver->sendHeader(F("Content-Disposition"), F("attachment; filename=myfile.txt"));
|
||||
* @param sendRecord: will receive the memory address as "uint8_t* addr" and should consume the current entry/record
|
||||
* @example myStruct_t *entry = (myStruct_t*)addr;
|
||||
* Then make useful Strings and send it, i.e.: WebServer->sendContent_P(myString);
|
||||
* Then make useful Strings and send it, i.e.: Webserver->sendContent_P(myString);
|
||||
* @param sendFooter: finish the download, should implement at least:
|
||||
* @example WebServer->sendContent("");
|
||||
* @example Webserver->sendContent("");
|
||||
*/
|
||||
void FLOG::startDownload(size_t size, CallbackNoArgs sendHeader, CallbackWithArgs sendRecord, CallbackNoArgs sendFooter){
|
||||
|
||||
|
|
|
@ -109,7 +109,7 @@ const char HTTP_SCRIPT_ROOT[] PROGMEM =
|
|||
"}"
|
||||
"};"
|
||||
"if (rfsh) {"
|
||||
"x.open('GET','.?m=1'+a,true);" // ?m related to WebServer->hasArg("m")
|
||||
"x.open('GET','.?m=1'+a,true);" // ?m related to Webserver->hasArg("m")
|
||||
"x.send();"
|
||||
"lt=setTimeout(la,%d);" // Settings.web_refresh
|
||||
"}"
|
||||
|
@ -146,7 +146,7 @@ const char HTTP_SCRIPT_ROOT[] PROGMEM =
|
|||
"eb('l1').innerHTML=s;"
|
||||
"}"
|
||||
"};"
|
||||
"x.open('GET','.?m=1'+a,true);" // ?m related to WebServer->hasArg("m")
|
||||
"x.open('GET','.?m=1'+a,true);" // ?m related to Webserver->hasArg("m")
|
||||
"x.send();"
|
||||
"lt=setTimeout(la,%d);" // Settings.web_refresh
|
||||
"}";
|
||||
|
@ -205,7 +205,7 @@ const char HTTP_SCRIPT_CONSOL[] PROGMEM =
|
|||
"sn=t.scrollTop;"
|
||||
"}"
|
||||
"};"
|
||||
"x.open('GET','cs?c2='+id+o,true);" // Related to WebServer->hasArg("c2") and WebGetArg("c2", stmp, sizeof(stmp))
|
||||
"x.open('GET','cs?c2='+id+o,true);" // Related to Webserver->hasArg("c2") and WebGetArg("c2", stmp, sizeof(stmp))
|
||||
"x.send();"
|
||||
"}"
|
||||
"lt=setTimeout(l,%d);"
|
||||
|
@ -301,10 +301,10 @@ const char HTTP_SCRIPT_TEMPLATE[] PROGMEM =
|
|||
"}"
|
||||
|
||||
#ifdef USE_JAVASCRIPT_ES6
|
||||
"sl=()=>ld('tp?m=1',x2);" // ?m related to WebServer->hasArg("m")
|
||||
"sl=()=>ld('tp?m=1',x2);" // ?m related to Webserver->hasArg("m")
|
||||
#else
|
||||
"function sl(){"
|
||||
"ld('tp?m=1',x2);" // ?m related to WebServer->hasArg("m")
|
||||
"ld('tp?m=1',x2);" // ?m related to Webserver->hasArg("m")
|
||||
"}"
|
||||
#endif
|
||||
|
||||
|
@ -325,11 +325,11 @@ const char HTTP_SCRIPT_MODULE2[] PROGMEM =
|
|||
"sk(%d," STR(ADC0_PIN) ");"
|
||||
"}"
|
||||
"function sl(){"
|
||||
"ld('md?m=1',x1);" // ?m related to WebServer->hasArg("m")
|
||||
"ld('md?g=1',x2);" // ?g related to WebServer->hasArg("g")
|
||||
"ld('md?m=1',x1);" // ?m related to Webserver->hasArg("m")
|
||||
"ld('md?g=1',x2);" // ?g related to Webserver->hasArg("g")
|
||||
// "if(eb('g17')){"
|
||||
"if(eb('g" STR(ADC0_PIN) "')){"
|
||||
"ld('md?a=1',x3);" // ?a related to WebServer->hasArg("a")
|
||||
"ld('md?a=1',x3);" // ?a related to Webserver->hasArg("a")
|
||||
"}"
|
||||
"}"
|
||||
"wl(sl);";
|
||||
|
@ -544,7 +544,7 @@ const uint16_t DNS_PORT = 53;
|
|||
enum HttpOptions {HTTP_OFF, HTTP_USER, HTTP_ADMIN, HTTP_MANAGER, HTTP_MANAGER_RESET_ONLY};
|
||||
|
||||
DNSServer *DnsServer;
|
||||
ESP8266WebServer *WebServer;
|
||||
ESP8266WebServer *Webserver;
|
||||
|
||||
struct WEB {
|
||||
String chunk_buffer = ""; // Could be max 2 * CHUNKED_BUFFER_SIZE
|
||||
|
@ -561,7 +561,7 @@ struct WEB {
|
|||
// Helper function to avoid code duplication (saves 4k Flash)
|
||||
static void WebGetArg(const char* arg, char* out, size_t max)
|
||||
{
|
||||
String s = WebServer->arg(arg);
|
||||
String s = Webserver->arg(arg);
|
||||
strlcpy(out, s.c_str(), max);
|
||||
// out[max-1] = '\0'; // Ensure terminating NUL
|
||||
}
|
||||
|
@ -574,7 +574,7 @@ void ShowWebSource(uint32_t source)
|
|||
{
|
||||
if ((source > 0) && (source < SRC_MAX)) {
|
||||
char stemp1[20];
|
||||
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SRC: %s from %s"), GetTextIndexed(stemp1, sizeof(stemp1), source, kCommandSource), WebServer->client().remoteIP().toString().c_str());
|
||||
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SRC: %s from %s"), GetTextIndexed(stemp1, sizeof(stemp1), source, kCommandSource), Webserver->client().remoteIP().toString().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -589,28 +589,28 @@ void StartWebserver(int type, IPAddress ipweb)
|
|||
{
|
||||
if (!Settings.web_refresh) { Settings.web_refresh = HTTP_REFRESH_TIME; }
|
||||
if (!Web.state) {
|
||||
if (!WebServer) {
|
||||
WebServer = new ESP8266WebServer((HTTP_MANAGER == type || HTTP_MANAGER_RESET_ONLY == type) ? 80 : WEB_PORT);
|
||||
WebServer->on("/", HandleRoot);
|
||||
WebServer->onNotFound(HandleNotFound);
|
||||
WebServer->on("/up", HandleUpgradeFirmware);
|
||||
WebServer->on("/u1", HandleUpgradeFirmwareStart); // OTA
|
||||
WebServer->on("/u2", HTTP_POST, HandleUploadDone, HandleUploadLoop);
|
||||
WebServer->on("/u2", HTTP_OPTIONS, HandlePreflightRequest);
|
||||
WebServer->on("/cs", HTTP_GET, HandleConsole);
|
||||
WebServer->on("/cs", HTTP_OPTIONS, HandlePreflightRequest);
|
||||
WebServer->on("/cm", HandleHttpCommand);
|
||||
if (!Webserver) {
|
||||
Webserver = new ESP8266WebServer((HTTP_MANAGER == type || HTTP_MANAGER_RESET_ONLY == type) ? 80 : WEB_PORT);
|
||||
Webserver->on("/", HandleRoot);
|
||||
Webserver->onNotFound(HandleNotFound);
|
||||
Webserver->on("/up", HandleUpgradeFirmware);
|
||||
Webserver->on("/u1", HandleUpgradeFirmwareStart); // OTA
|
||||
Webserver->on("/u2", HTTP_POST, HandleUploadDone, HandleUploadLoop);
|
||||
Webserver->on("/u2", HTTP_OPTIONS, HandlePreflightRequest);
|
||||
Webserver->on("/cs", HTTP_GET, HandleConsole);
|
||||
Webserver->on("/cs", HTTP_OPTIONS, HandlePreflightRequest);
|
||||
Webserver->on("/cm", HandleHttpCommand);
|
||||
#ifndef FIRMWARE_MINIMAL
|
||||
WebServer->on("/cn", HandleConfiguration);
|
||||
WebServer->on("/md", HandleModuleConfiguration);
|
||||
WebServer->on("/wi", HandleWifiConfiguration);
|
||||
WebServer->on("/lg", HandleLoggingConfiguration);
|
||||
WebServer->on("/tp", HandleTemplateConfiguration);
|
||||
WebServer->on("/co", HandleOtherConfiguration);
|
||||
WebServer->on("/dl", HandleBackupConfiguration);
|
||||
WebServer->on("/rs", HandleRestoreConfiguration);
|
||||
WebServer->on("/rt", HandleResetConfiguration);
|
||||
WebServer->on("/in", HandleInformation);
|
||||
Webserver->on("/cn", HandleConfiguration);
|
||||
Webserver->on("/md", HandleModuleConfiguration);
|
||||
Webserver->on("/wi", HandleWifiConfiguration);
|
||||
Webserver->on("/lg", HandleLoggingConfiguration);
|
||||
Webserver->on("/tp", HandleTemplateConfiguration);
|
||||
Webserver->on("/co", HandleOtherConfiguration);
|
||||
Webserver->on("/dl", HandleBackupConfiguration);
|
||||
Webserver->on("/rs", HandleRestoreConfiguration);
|
||||
Webserver->on("/rt", HandleResetConfiguration);
|
||||
Webserver->on("/in", HandleInformation);
|
||||
XdrvCall(FUNC_WEB_ADD_HANDLER);
|
||||
XsnsCall(FUNC_WEB_ADD_HANDLER);
|
||||
#endif // Not FIRMWARE_MINIMAL
|
||||
|
@ -619,9 +619,9 @@ void StartWebserver(int type, IPAddress ipweb)
|
|||
|
||||
// Collect User-Agent for Alexa Hue Emulation
|
||||
// This is used in xdrv_20_hue.ino in function findEchoGeneration()
|
||||
WebServer->collectHeaders(HEADER_KEYS, sizeof(HEADER_KEYS)/sizeof(char*));
|
||||
Webserver->collectHeaders(HEADER_KEYS, sizeof(HEADER_KEYS)/sizeof(char*));
|
||||
|
||||
WebServer->begin(); // Web server start
|
||||
Webserver->begin(); // Web server start
|
||||
}
|
||||
if (Web.state != type) {
|
||||
#if LWIP_IPV6
|
||||
|
@ -639,7 +639,7 @@ void StartWebserver(int type, IPAddress ipweb)
|
|||
void StopWebserver(void)
|
||||
{
|
||||
if (Web.state) {
|
||||
WebServer->close();
|
||||
Webserver->close();
|
||||
Web.state = HTTP_OFF;
|
||||
AddLog_P(LOG_LEVEL_INFO, PSTR(D_LOG_HTTP D_WEBSERVER_STOPPED));
|
||||
}
|
||||
|
@ -684,7 +684,7 @@ void WifiManagerBegin(bool reset_only)
|
|||
void PollDnsWebserver(void)
|
||||
{
|
||||
if (DnsServer) { DnsServer->processNextRequest(); }
|
||||
if (WebServer) { WebServer->handleClient(); }
|
||||
if (Webserver) { Webserver->handleClient(); }
|
||||
}
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
@ -692,7 +692,7 @@ void PollDnsWebserver(void)
|
|||
bool WebAuthenticate(void)
|
||||
{
|
||||
if (strlen(SettingsText(SET_WEBPWD)) && (HTTP_MANAGER_RESET_ONLY != Web.state)) {
|
||||
return WebServer->authenticate(WEB_USERNAME, SettingsText(SET_WEBPWD));
|
||||
return Webserver->authenticate(WEB_USERNAME, SettingsText(SET_WEBPWD));
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
|
@ -705,7 +705,7 @@ bool HttpCheckPriviledgedAccess(bool autorequestauth = true)
|
|||
return false;
|
||||
}
|
||||
if (autorequestauth && !WebAuthenticate()) {
|
||||
WebServer->requestAuthentication();
|
||||
Webserver->requestAuthentication();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -714,15 +714,15 @@ bool HttpCheckPriviledgedAccess(bool autorequestauth = true)
|
|||
void HttpHeaderCors(void)
|
||||
{
|
||||
if (strlen(SettingsText(SET_CORS))) {
|
||||
WebServer->sendHeader(F("Access-Control-Allow-Origin"), SettingsText(SET_CORS));
|
||||
Webserver->sendHeader(F("Access-Control-Allow-Origin"), SettingsText(SET_CORS));
|
||||
}
|
||||
}
|
||||
|
||||
void WSHeaderSend(void)
|
||||
{
|
||||
WebServer->sendHeader(F("Cache-Control"), F("no-cache, no-store, must-revalidate"));
|
||||
WebServer->sendHeader(F("Pragma"), F("no-cache"));
|
||||
WebServer->sendHeader(F("Expires"), F("-1"));
|
||||
Webserver->sendHeader(F("Cache-Control"), F("no-cache, no-store, must-revalidate"));
|
||||
Webserver->sendHeader(F("Pragma"), F("no-cache"));
|
||||
Webserver->sendHeader(F("Expires"), F("-1"));
|
||||
HttpHeaderCors();
|
||||
}
|
||||
|
||||
|
@ -733,7 +733,7 @@ void WSHeaderSend(void)
|
|||
void WSSend(int code, int ctype, const String& content)
|
||||
{
|
||||
char ct[25]; // strlen("application/octet-stream") +1 = Longest Content type string
|
||||
WebServer->send(code, GetTextIndexed(ct, sizeof(ct), ctype, kContentTypes), content);
|
||||
Webserver->send(code, GetTextIndexed(ct, sizeof(ct), ctype, kContentTypes), content);
|
||||
}
|
||||
|
||||
/**********************************************************************************************
|
||||
|
@ -742,13 +742,13 @@ void WSSend(int code, int ctype, const String& content)
|
|||
|
||||
void WSContentBegin(int code, int ctype)
|
||||
{
|
||||
WebServer->client().flush();
|
||||
Webserver->client().flush();
|
||||
WSHeaderSend();
|
||||
#ifdef ARDUINO_ESP8266_RELEASE_2_3_0
|
||||
WebServer->sendHeader(F("Accept-Ranges"),F("none"));
|
||||
WebServer->sendHeader(F("Transfer-Encoding"),F("chunked"));
|
||||
Webserver->sendHeader(F("Accept-Ranges"),F("none"));
|
||||
Webserver->sendHeader(F("Transfer-Encoding"),F("chunked"));
|
||||
#endif
|
||||
WebServer->setContentLength(CONTENT_LENGTH_UNKNOWN);
|
||||
Webserver->setContentLength(CONTENT_LENGTH_UNKNOWN);
|
||||
WSSend(code, ctype, ""); // Signal start of chunked content
|
||||
Web.chunk_buffer = "";
|
||||
}
|
||||
|
@ -761,9 +761,9 @@ void _WSContentSend(const String& content) // Low level sendContent for a
|
|||
const char * footer = "\r\n";
|
||||
char chunk_size[11];
|
||||
sprintf(chunk_size, "%x\r\n", len);
|
||||
WebServer->sendContent(String() + chunk_size + content + footer);
|
||||
Webserver->sendContent(String() + chunk_size + content + footer);
|
||||
#else
|
||||
WebServer->sendContent(content);
|
||||
Webserver->sendContent(content);
|
||||
#endif
|
||||
|
||||
#ifdef USE_DEBUG_DRIVER
|
||||
|
@ -849,8 +849,8 @@ void WSContentSend_PD(const char* formatP, ...) // Content send snprintf_P ch
|
|||
|
||||
void WSContentStart_P(const char* title, bool auth)
|
||||
{
|
||||
if (auth && strlen(SettingsText(SET_WEBPWD)) && !WebServer->authenticate(WEB_USERNAME, SettingsText(SET_WEBPWD))) {
|
||||
return WebServer->requestAuthentication();
|
||||
if (auth && strlen(SettingsText(SET_WEBPWD)) && !Webserver->authenticate(WEB_USERNAME, SettingsText(SET_WEBPWD))) {
|
||||
return Webserver->requestAuthentication();
|
||||
}
|
||||
|
||||
WSContentBegin(200, CT_HTML);
|
||||
|
@ -961,7 +961,7 @@ void WSContentEnd(void)
|
|||
{
|
||||
WSContentFlush(); // Flush chunk buffer
|
||||
_WSContentSend(""); // Signal end of chunked content
|
||||
WebServer->client().stop();
|
||||
Webserver->client().stop();
|
||||
}
|
||||
|
||||
void WSContentStop(void)
|
||||
|
@ -1043,17 +1043,17 @@ void HandleRoot(void)
|
|||
{
|
||||
if (CaptivePortal()) { return; } // If captive portal redirect instead of displaying the page.
|
||||
|
||||
if (WebServer->hasArg("rst")) {
|
||||
if (Webserver->hasArg("rst")) {
|
||||
WebRestart(0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (WifiIsInManagerMode()) {
|
||||
#ifndef FIRMWARE_MINIMAL
|
||||
if (strlen(SettingsText(SET_WEBPWD)) && !(WebServer->hasArg("USER1")) && !(WebServer->hasArg("PASS1")) && HTTP_MANAGER_RESET_ONLY != Web.state) {
|
||||
if (strlen(SettingsText(SET_WEBPWD)) && !(Webserver->hasArg("USER1")) && !(Webserver->hasArg("PASS1")) && HTTP_MANAGER_RESET_ONLY != Web.state) {
|
||||
HandleWifiLogin();
|
||||
} else {
|
||||
if (!strlen(SettingsText(SET_WEBPWD)) || (((WebServer->arg("USER1") == WEB_USERNAME ) && (WebServer->arg("PASS1") == SettingsText(SET_WEBPWD) )) || HTTP_MANAGER_RESET_ONLY == Web.state)) {
|
||||
if (!strlen(SettingsText(SET_WEBPWD)) || (((Webserver->arg("USER1") == WEB_USERNAME ) && (Webserver->arg("PASS1") == SettingsText(SET_WEBPWD) )) || HTTP_MANAGER_RESET_ONLY == Web.state)) {
|
||||
HandleWifiConfiguration();
|
||||
} else {
|
||||
// wrong user and pass
|
||||
|
@ -1243,11 +1243,11 @@ void HandleRoot(void)
|
|||
bool HandleRootStatusRefresh(void)
|
||||
{
|
||||
if (!WebAuthenticate()) {
|
||||
WebServer->requestAuthentication();
|
||||
Webserver->requestAuthentication();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!WebServer->hasArg("m")) { // Status refresh requested
|
||||
if (!Webserver->hasArg("m")) { // Status refresh requested
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1429,7 +1429,7 @@ void HandleTemplateConfiguration(void)
|
|||
{
|
||||
if (!HttpCheckPriviledgedAccess()) { return; }
|
||||
|
||||
if (WebServer->hasArg("save")) {
|
||||
if (Webserver->hasArg("save")) {
|
||||
TemplateSaveSettings();
|
||||
WebRestart(1);
|
||||
return;
|
||||
|
@ -1437,7 +1437,7 @@ void HandleTemplateConfiguration(void)
|
|||
|
||||
char stemp[30]; // Template number and Sensor name
|
||||
|
||||
if (WebServer->hasArg("m")) {
|
||||
if (Webserver->hasArg("m")) {
|
||||
WSContentBegin(200, CT_PLAIN);
|
||||
for (uint32_t i = 0; i < sizeof(kModuleNiceList); i++) { // "}2'%d'>%s (%d)}3" - "}2'0'>Sonoff Basic (1)}3"
|
||||
uint32_t midx = pgm_read_byte(kModuleNiceList + i);
|
||||
|
@ -1548,7 +1548,7 @@ void TemplateSaveSettings(void)
|
|||
uint32_t flag = atoi(tmp);
|
||||
for (uint32_t i = 0; i < GPIO_FLAG_USED; i++) {
|
||||
snprintf_P(webindex, sizeof(webindex), PSTR("c%d"), i);
|
||||
uint32_t state = WebServer->hasArg(webindex) << i +4; // FLAG
|
||||
uint32_t state = Webserver->hasArg(webindex) << i +4; // FLAG
|
||||
flag += state;
|
||||
}
|
||||
WebGetArg("g99", tmp, sizeof(tmp)); // BASE
|
||||
|
@ -1564,7 +1564,7 @@ void HandleModuleConfiguration(void)
|
|||
{
|
||||
if (!HttpCheckPriviledgedAccess()) { return; }
|
||||
|
||||
if (WebServer->hasArg("save")) {
|
||||
if (Webserver->hasArg("save")) {
|
||||
ModuleSaveSettings();
|
||||
WebRestart(1);
|
||||
return;
|
||||
|
@ -1575,7 +1575,7 @@ void HandleModuleConfiguration(void)
|
|||
myio cmodule;
|
||||
ModuleGpios(&cmodule);
|
||||
|
||||
if (WebServer->hasArg("m")) {
|
||||
if (Webserver->hasArg("m")) {
|
||||
WSContentBegin(200, CT_PLAIN);
|
||||
uint32_t vidx = 0;
|
||||
for (uint32_t i = 0; i <= sizeof(kModuleNiceList); i++) { // "}2'%d'>%s (%d)}3" - "}2'255'>UserTemplate (0)}3" - "}2'0'>Sonoff Basic (1)}3"
|
||||
|
@ -1592,7 +1592,7 @@ void HandleModuleConfiguration(void)
|
|||
return;
|
||||
}
|
||||
|
||||
if (WebServer->hasArg("g")) {
|
||||
if (Webserver->hasArg("g")) {
|
||||
WSContentBegin(200, CT_PLAIN);
|
||||
for (uint32_t j = 0; j < sizeof(kGpioNiceList); j++) {
|
||||
midx = pgm_read_byte(kGpioNiceList + j);
|
||||
|
@ -1605,7 +1605,7 @@ void HandleModuleConfiguration(void)
|
|||
}
|
||||
|
||||
#ifndef USE_ADC_VCC
|
||||
if (WebServer->hasArg("a")) {
|
||||
if (Webserver->hasArg("a")) {
|
||||
WSContentBegin(200, CT_PLAIN);
|
||||
for (uint32_t j = 0; j < ADC0_END; j++) {
|
||||
WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, j, GetTextIndexed(stemp, sizeof(stemp), j, kAdc0Names), j);
|
||||
|
@ -1720,7 +1720,7 @@ void HandleWifiConfiguration(void)
|
|||
|
||||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURE_WIFI);
|
||||
|
||||
if (WebServer->hasArg("save") && HTTP_MANAGER_RESET_ONLY != Web.state) {
|
||||
if (Webserver->hasArg("save") && HTTP_MANAGER_RESET_ONLY != Web.state) {
|
||||
WifiSaveSettings();
|
||||
WebRestart(2);
|
||||
return;
|
||||
|
@ -1731,7 +1731,7 @@ void HandleWifiConfiguration(void)
|
|||
WSContentSendStyle();
|
||||
|
||||
if (HTTP_MANAGER_RESET_ONLY != Web.state) {
|
||||
if (WebServer->hasArg("scan")) {
|
||||
if (Webserver->hasArg("scan")) {
|
||||
#ifdef USE_EMULATION
|
||||
UdpDisconnect();
|
||||
#endif // USE_EMULATION
|
||||
|
@ -1844,7 +1844,7 @@ void HandleLoggingConfiguration(void)
|
|||
|
||||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURE_LOGGING);
|
||||
|
||||
if (WebServer->hasArg("save")) {
|
||||
if (Webserver->hasArg("save")) {
|
||||
LoggingSaveSettings();
|
||||
HandleConfiguration();
|
||||
return;
|
||||
|
@ -1909,7 +1909,7 @@ void HandleOtherConfiguration(void)
|
|||
|
||||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURE_OTHER);
|
||||
|
||||
if (WebServer->hasArg("save")) {
|
||||
if (Webserver->hasArg("save")) {
|
||||
OtherSaveSettings();
|
||||
WebRestart(1);
|
||||
return;
|
||||
|
@ -1973,7 +1973,7 @@ void OtherSaveSettings(void)
|
|||
|
||||
WebGetArg("wp", tmp, sizeof(tmp));
|
||||
SettingsUpdateText(SET_WEBPWD, (!strlen(tmp)) ? "" : (strchr(tmp,'*')) ? SettingsText(SET_WEBPWD) : tmp);
|
||||
Settings.flag.mqtt_enabled = WebServer->hasArg("b1"); // SetOption3 - Enable MQTT
|
||||
Settings.flag.mqtt_enabled = Webserver->hasArg("b1"); // SetOption3 - Enable MQTT
|
||||
#ifdef USE_EMULATION
|
||||
UdpDisconnect();
|
||||
#if defined(USE_EMULATION_WEMO) || defined(USE_EMULATION_HUE)
|
||||
|
@ -1994,7 +1994,7 @@ void OtherSaveSettings(void)
|
|||
|
||||
/*
|
||||
// This sometimes provides intermittent watchdog
|
||||
bool template_activate = WebServer->hasArg("t2"); // Try this to tackle intermittent watchdog after execution of Template command
|
||||
bool template_activate = Webserver->hasArg("t2"); // Try this to tackle intermittent watchdog after execution of Template command
|
||||
WebGetArg("t1", tmp, sizeof(tmp));
|
||||
if (strlen(tmp)) { // {"NAME":"12345678901234","GPIO":[255,255,255,255,255,255,255,255,255,255,255,255,255],"FLAG":255,"BASE":255}
|
||||
char svalue[128];
|
||||
|
@ -2010,7 +2010,7 @@ void OtherSaveSettings(void)
|
|||
*/
|
||||
WebGetArg("t1", tmp, sizeof(tmp));
|
||||
if (strlen(tmp)) { // {"NAME":"12345678901234","GPIO":[255,255,255,255,255,255,255,255,255,255,255,255,255],"FLAG":255,"BASE":255}
|
||||
snprintf_P(message, sizeof(message), PSTR(D_CMND_BACKLOG " " D_CMND_TEMPLATE " %s%s"), tmp, (WebServer->hasArg("t2")) ? "; " D_CMND_MODULE " 0" : "");
|
||||
snprintf_P(message, sizeof(message), PSTR(D_CMND_BACKLOG " " D_CMND_TEMPLATE " %s%s"), tmp, (Webserver->hasArg("t2")) ? "; " D_CMND_MODULE " 0" : "");
|
||||
ExecuteWebCommand(message, SRC_WEBGUI);
|
||||
}
|
||||
}
|
||||
|
@ -2025,8 +2025,8 @@ void HandleBackupConfiguration(void)
|
|||
|
||||
if (!SettingsBufferAlloc()) { return; }
|
||||
|
||||
WiFiClient myClient = WebServer->client();
|
||||
WebServer->setContentLength(sizeof(Settings));
|
||||
WiFiClient myClient = Webserver->client();
|
||||
Webserver->setContentLength(sizeof(Settings));
|
||||
|
||||
char attachment[TOPSZ];
|
||||
|
||||
|
@ -2036,7 +2036,7 @@ void HandleBackupConfiguration(void)
|
|||
char hostname[sizeof(my_hostname)];
|
||||
snprintf_P(attachment, sizeof(attachment), PSTR("attachment; filename=Config_%s_%s.dmp"), NoAlNumToUnderscore(hostname, my_hostname), my_version);
|
||||
|
||||
WebServer->sendHeader(F("Content-Disposition"), attachment);
|
||||
Webserver->sendHeader(F("Content-Disposition"), attachment);
|
||||
|
||||
WSSend(200, CT_STREAM, "");
|
||||
|
||||
|
@ -2336,7 +2336,7 @@ void HandleUploadLoop(void)
|
|||
return;
|
||||
}
|
||||
|
||||
HTTPUpload& upload = WebServer->upload();
|
||||
HTTPUpload& upload = Webserver->upload();
|
||||
|
||||
if (UPLOAD_FILE_START == upload.status) {
|
||||
restart_flag = 60;
|
||||
|
@ -2549,8 +2549,8 @@ void HandleUploadLoop(void)
|
|||
void HandlePreflightRequest(void)
|
||||
{
|
||||
HttpHeaderCors();
|
||||
WebServer->sendHeader(F("Access-Control-Allow-Methods"), F("GET, POST"));
|
||||
WebServer->sendHeader(F("Access-Control-Allow-Headers"), F("authorization"));
|
||||
Webserver->sendHeader(F("Access-Control-Allow-Methods"), F("GET, POST"));
|
||||
Webserver->sendHeader(F("Access-Control-Allow-Headers"), F("authorization"));
|
||||
WSSend(200, CT_HTML, "");
|
||||
}
|
||||
|
||||
|
@ -2562,54 +2562,54 @@ void HandleHttpCommand(void)
|
|||
|
||||
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_COMMAND));
|
||||
|
||||
bool valid = true;
|
||||
if (strlen(SettingsText(SET_WEBPWD))) {
|
||||
char tmp1[33];
|
||||
WebGetArg("user", tmp1, sizeof(tmp1));
|
||||
char tmp2[strlen(SettingsText(SET_WEBPWD)) +1];
|
||||
WebGetArg("password", tmp2, sizeof(tmp2));
|
||||
if (!(!strcmp(tmp1, WEB_USERNAME) && !strcmp(tmp2, SettingsText(SET_WEBPWD)))) { valid = false; }
|
||||
if (!(!strcmp(tmp1, WEB_USERNAME) && !strcmp(tmp2, SettingsText(SET_WEBPWD)))) {
|
||||
WSContentBegin(401, CT_JSON);
|
||||
WSContentSend_P(PSTR("{\"" D_RSLT_WARNING "\":\"" D_NEED_USER_AND_PASSWORD "\"}"));
|
||||
WSContentEnd();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
WSContentBegin(200, CT_JSON);
|
||||
if (valid) {
|
||||
uint32_t curridx = web_log_index;
|
||||
String svalue = WebServer->arg("cmnd");
|
||||
if (svalue.length() && (svalue.length() < MQTT_MAX_PACKET_SIZE)) {
|
||||
ExecuteWebCommand((char*)svalue.c_str(), SRC_WEBCOMMAND);
|
||||
if (web_log_index != curridx) {
|
||||
uint32_t counter = curridx;
|
||||
WSContentSend_P(PSTR("{"));
|
||||
bool cflg = false;
|
||||
do {
|
||||
char* tmp;
|
||||
size_t len;
|
||||
GetLog(counter, &tmp, &len);
|
||||
if (len) {
|
||||
// [14:49:36 MQTT: stat/wemos5/RESULT = {"POWER":"OFF"}] > [{"POWER":"OFF"}]
|
||||
char* JSON = (char*)memchr(tmp, '{', len);
|
||||
if (JSON) { // Is it a JSON message (and not only [15:26:08 MQT: stat/wemos5/POWER = O])
|
||||
size_t JSONlen = len - (JSON - tmp);
|
||||
if (JSONlen > sizeof(mqtt_data)) { JSONlen = sizeof(mqtt_data); }
|
||||
char stemp[JSONlen];
|
||||
strlcpy(stemp, JSON +1, JSONlen -2);
|
||||
WSContentSend_P(PSTR("%s%s"), (cflg) ? "," : "", stemp);
|
||||
cflg = true;
|
||||
}
|
||||
uint32_t curridx = web_log_index;
|
||||
String svalue = Webserver->arg("cmnd");
|
||||
if (svalue.length() && (svalue.length() < MQTT_MAX_PACKET_SIZE)) {
|
||||
ExecuteWebCommand((char*)svalue.c_str(), SRC_WEBCOMMAND);
|
||||
if (web_log_index != curridx) {
|
||||
uint32_t counter = curridx;
|
||||
WSContentSend_P(PSTR("{"));
|
||||
bool cflg = false;
|
||||
do {
|
||||
char* tmp;
|
||||
size_t len;
|
||||
GetLog(counter, &tmp, &len);
|
||||
if (len) {
|
||||
// [14:49:36 MQTT: stat/wemos5/RESULT = {"POWER":"OFF"}] > [{"POWER":"OFF"}]
|
||||
char* JSON = (char*)memchr(tmp, '{', len);
|
||||
if (JSON) { // Is it a JSON message (and not only [15:26:08 MQT: stat/wemos5/POWER = O])
|
||||
size_t JSONlen = len - (JSON - tmp);
|
||||
if (JSONlen > sizeof(mqtt_data)) { JSONlen = sizeof(mqtt_data); }
|
||||
char stemp[JSONlen];
|
||||
strlcpy(stemp, JSON +1, JSONlen -2);
|
||||
WSContentSend_P(PSTR("%s%s"), (cflg) ? "," : "", stemp);
|
||||
cflg = true;
|
||||
}
|
||||
counter++;
|
||||
counter &= 0xFF;
|
||||
if (!counter) counter++; // Skip 0 as it is not allowed
|
||||
} while (counter != web_log_index);
|
||||
WSContentSend_P(PSTR("}"));
|
||||
} else {
|
||||
WSContentSend_P(PSTR("{\"" D_RSLT_WARNING "\":\"" D_ENABLE_WEBLOG_FOR_RESPONSE "\"}"));
|
||||
}
|
||||
}
|
||||
counter++;
|
||||
counter &= 0xFF;
|
||||
if (!counter) counter++; // Skip 0 as it is not allowed
|
||||
} while (counter != web_log_index);
|
||||
WSContentSend_P(PSTR("}"));
|
||||
} else {
|
||||
WSContentSend_P(PSTR("{\"" D_RSLT_WARNING "\":\"" D_ENTER_COMMAND " cmnd=\"}"));
|
||||
WSContentSend_P(PSTR("{\"" D_RSLT_WARNING "\":\"" D_ENABLE_WEBLOG_FOR_RESPONSE "\"}"));
|
||||
}
|
||||
} else {
|
||||
WSContentSend_P(PSTR("{\"" D_RSLT_WARNING "\":\"" D_NEED_USER_AND_PASSWORD "\"}"));
|
||||
WSContentSend_P(PSTR("{\"" D_RSLT_WARNING "\":\"" D_ENTER_COMMAND " cmnd=\"}"));
|
||||
}
|
||||
WSContentEnd();
|
||||
}
|
||||
|
@ -2620,7 +2620,7 @@ void HandleConsole(void)
|
|||
{
|
||||
if (!HttpCheckPriviledgedAccess()) { return; }
|
||||
|
||||
if (WebServer->hasArg("c2")) { // Console refresh requested
|
||||
if (Webserver->hasArg("c2")) { // Console refresh requested
|
||||
HandleConsoleRefresh();
|
||||
return;
|
||||
}
|
||||
|
@ -2640,7 +2640,7 @@ void HandleConsoleRefresh(void)
|
|||
bool cflg = true;
|
||||
uint32_t counter = 0; // Initial start, should never be 0 again
|
||||
|
||||
String svalue = WebServer->arg("c1");
|
||||
String svalue = Webserver->arg("c1");
|
||||
if (svalue.length() && (svalue.length() < MQTT_MAX_PACKET_SIZE)) {
|
||||
AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_COMMAND "%s"), svalue.c_str());
|
||||
ExecuteWebCommand((char*)svalue.c_str(), SRC_WEBCONSOLE);
|
||||
|
@ -2685,13 +2685,13 @@ void HandleConsoleRefresh(void)
|
|||
|
||||
void HandleNotFound(void)
|
||||
{
|
||||
// AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP "Not found (%s)"), WebServer->uri().c_str());
|
||||
// AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP "Not found (%s)"), Webserver->uri().c_str());
|
||||
|
||||
if (CaptivePortal()) { return; } // If captive portal redirect instead of displaying the error page.
|
||||
|
||||
#ifdef USE_EMULATION
|
||||
#ifdef USE_EMULATION_HUE
|
||||
String path = WebServer->uri();
|
||||
String path = Webserver->uri();
|
||||
if ((EMUL_HUE == Settings.flag2.emulation) && (path.startsWith("/api"))) {
|
||||
HandleHueApi(&path);
|
||||
} else
|
||||
|
@ -2699,9 +2699,9 @@ void HandleNotFound(void)
|
|||
#endif // USE_EMULATION
|
||||
{
|
||||
WSContentBegin(404, CT_PLAIN);
|
||||
WSContentSend_P(PSTR(D_FILE_NOT_FOUND "\n\nURI: %s\nMethod: %s\nArguments: %d\n"), WebServer->uri().c_str(), (WebServer->method() == HTTP_GET) ? "GET" : "POST", WebServer->args());
|
||||
for (uint32_t i = 0; i < WebServer->args(); i++) {
|
||||
WSContentSend_P(PSTR(" %s: %s\n"), WebServer->argName(i).c_str(), WebServer->arg(i).c_str());
|
||||
WSContentSend_P(PSTR(D_FILE_NOT_FOUND "\n\nURI: %s\nMethod: %s\nArguments: %d\n"), Webserver->uri().c_str(), (Webserver->method() == HTTP_GET) ? "GET" : "POST", Webserver->args());
|
||||
for (uint32_t i = 0; i < Webserver->args(); i++) {
|
||||
WSContentSend_P(PSTR(" %s: %s\n"), Webserver->argName(i).c_str(), Webserver->arg(i).c_str());
|
||||
}
|
||||
WSContentEnd();
|
||||
}
|
||||
|
@ -2711,12 +2711,12 @@ void HandleNotFound(void)
|
|||
bool CaptivePortal(void)
|
||||
{
|
||||
// Possible hostHeader: connectivitycheck.gstatic.com or 192.168.4.1
|
||||
if ((WifiIsInManagerMode()) && !ValidIpAddress(WebServer->hostHeader().c_str())) {
|
||||
if ((WifiIsInManagerMode()) && !ValidIpAddress(Webserver->hostHeader().c_str())) {
|
||||
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_REDIRECTED));
|
||||
|
||||
WebServer->sendHeader(F("Location"), String("http://") + WebServer->client().localIP().toString(), true);
|
||||
Webserver->sendHeader(F("Location"), String("http://") + Webserver->client().localIP().toString(), true);
|
||||
WSSend(302, CT_PLAIN, ""); // Empty content inhibits Content-length header so we have to close the socket ourselves.
|
||||
WebServer->client().stop(); // Stop is needed because we sent no content length
|
||||
Webserver->client().stop(); // Stop is needed because we sent no content length
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -1252,7 +1252,7 @@ void HandleMqttConfiguration(void)
|
|||
|
||||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURE_MQTT);
|
||||
|
||||
if (WebServer->hasArg("save")) {
|
||||
if (Webserver->hasArg("save")) {
|
||||
MqttSaveSettings();
|
||||
WebRestart(1);
|
||||
return;
|
||||
|
@ -1334,7 +1334,7 @@ bool Xdrv02(uint8_t function)
|
|||
WSContentSend_P(HTTP_BTN_MENU_MQTT);
|
||||
break;
|
||||
case FUNC_WEB_ADD_HANDLER:
|
||||
WebServer->on("/" WEB_HANDLE_MQTT, HandleMqttConfiguration);
|
||||
Webserver->on("/" WEB_HANDLE_MQTT, HandleMqttConfiguration);
|
||||
break;
|
||||
#endif // USE_WEBSERVER
|
||||
case FUNC_COMMAND:
|
||||
|
|
|
@ -559,7 +559,7 @@ void HandleDomoticzConfiguration(void)
|
|||
|
||||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURE_DOMOTICZ);
|
||||
|
||||
if (WebServer->hasArg("save")) {
|
||||
if (Webserver->hasArg("save")) {
|
||||
DomoticzSaveSettings();
|
||||
WebRestart(1);
|
||||
return;
|
||||
|
@ -651,7 +651,7 @@ bool Xdrv07(uint8_t function)
|
|||
WSContentSend_P(HTTP_BTN_MENU_DOMOTICZ);
|
||||
break;
|
||||
case FUNC_WEB_ADD_HANDLER:
|
||||
WebServer->on("/" WEB_HANDLE_DOMOTICZ, HandleDomoticzConfiguration);
|
||||
Webserver->on("/" WEB_HANDLE_DOMOTICZ, HandleDomoticzConfiguration);
|
||||
break;
|
||||
#endif // USE_WEBSERVER
|
||||
case FUNC_MQTT_SUBSCRIBE:
|
||||
|
|
|
@ -702,7 +702,7 @@ void HandleTimerConfiguration(void)
|
|||
|
||||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURE_TIMER);
|
||||
|
||||
if (WebServer->hasArg("save")) {
|
||||
if (Webserver->hasArg("save")) {
|
||||
TimerSaveSettings();
|
||||
HandleConfiguration();
|
||||
return;
|
||||
|
@ -740,7 +740,7 @@ void TimerSaveSettings(void)
|
|||
char message[LOGSZ];
|
||||
Timer timer;
|
||||
|
||||
Settings.flag3.timers_enable = WebServer->hasArg("e0"); // CMND_TIMERS
|
||||
Settings.flag3.timers_enable = Webserver->hasArg("e0"); // CMND_TIMERS
|
||||
WebGetArg("t0", tmp, sizeof(tmp));
|
||||
char *p = tmp;
|
||||
snprintf_P(message, sizeof(message), PSTR(D_LOG_MQTT D_CMND_TIMERS " %d"), Settings.flag3.timers_enable); // CMND_TIMERS
|
||||
|
@ -781,7 +781,7 @@ bool Xdrv09(uint8_t function)
|
|||
#endif // USE_RULES
|
||||
break;
|
||||
case FUNC_WEB_ADD_HANDLER:
|
||||
WebServer->on("/" WEB_HANDLE_TIMER, HandleTimerConfiguration);
|
||||
Webserver->on("/" WEB_HANDLE_TIMER, HandleTimerConfiguration);
|
||||
break;
|
||||
#endif // USE_TIMERS_WEB
|
||||
#endif // USE_WEBSERVER
|
||||
|
|
|
@ -3341,8 +3341,8 @@ void Script_FileUploadConfiguration(void)
|
|||
|
||||
if (!HttpCheckPriviledgedAccess()) { return; }
|
||||
|
||||
if (WebServer->hasArg("download")) {
|
||||
String stmp = WebServer->arg("download");
|
||||
if (Webserver->hasArg("download")) {
|
||||
String stmp = Webserver->arg("download");
|
||||
char *cp=(char*)stmp.c_str();
|
||||
if (DownloadFile(cp)) {
|
||||
// is directory
|
||||
|
@ -3386,7 +3386,7 @@ void script_upload(void) {
|
|||
|
||||
//AddLog_P(LOG_LEVEL_INFO, PSTR("HTP: file upload"));
|
||||
|
||||
HTTPUpload& upload = WebServer->upload();
|
||||
HTTPUpload& upload = Webserver->upload();
|
||||
if (upload.status == UPLOAD_FILE_START) {
|
||||
char npath[48];
|
||||
sprintf(npath,"%s/%s",path,upload.filename.c_str());
|
||||
|
@ -3402,7 +3402,7 @@ void script_upload(void) {
|
|||
}
|
||||
} else {
|
||||
Web.upload_error=1;
|
||||
WebServer->send(500, "text/plain", "500: couldn't create file");
|
||||
Webserver->send(500, "text/plain", "500: couldn't create file");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3428,8 +3428,8 @@ uint8_t DownloadFile(char *file) {
|
|||
|
||||
uint32_t flen=download_file.size();
|
||||
|
||||
download_Client = WebServer->client();
|
||||
WebServer->setContentLength(flen);
|
||||
download_Client = Webserver->client();
|
||||
Webserver->setContentLength(flen);
|
||||
|
||||
char attachment[100];
|
||||
char *cp;
|
||||
|
@ -3440,7 +3440,7 @@ uint8_t DownloadFile(char *file) {
|
|||
}
|
||||
}
|
||||
snprintf_P(attachment, sizeof(attachment), PSTR("attachment; filename=%s"),cp);
|
||||
WebServer->sendHeader(F("Content-Disposition"), attachment);
|
||||
Webserver->sendHeader(F("Content-Disposition"), attachment);
|
||||
WSSend(200, CT_STREAM, "");
|
||||
|
||||
uint8_t buff[512];
|
||||
|
@ -3472,7 +3472,7 @@ uint8_t DownloadFile(char *file) {
|
|||
void HandleScriptTextareaConfiguration(void) {
|
||||
if (!HttpCheckPriviledgedAccess()) { return; }
|
||||
|
||||
if (WebServer->hasArg("save")) {
|
||||
if (Webserver->hasArg("save")) {
|
||||
ScriptSaveSettings();
|
||||
HandleConfiguration();
|
||||
return;
|
||||
|
@ -3486,13 +3486,13 @@ void HandleScriptConfiguration(void) {
|
|||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURE_SCRIPT);
|
||||
|
||||
#ifdef USE_SCRIPT_FATFS
|
||||
if (WebServer->hasArg("d1")) {
|
||||
if (Webserver->hasArg("d1")) {
|
||||
DownloadFile(glob_script_mem.flink[0]);
|
||||
}
|
||||
if (WebServer->hasArg("d2")) {
|
||||
if (Webserver->hasArg("d2")) {
|
||||
DownloadFile(glob_script_mem.flink[1]);
|
||||
}
|
||||
if (WebServer->hasArg("upl")) {
|
||||
if (Webserver->hasArg("upl")) {
|
||||
Script_FileUploadConfiguration();
|
||||
}
|
||||
#endif
|
||||
|
@ -3532,14 +3532,14 @@ void HandleScriptConfiguration(void) {
|
|||
|
||||
void ScriptSaveSettings(void) {
|
||||
|
||||
if (WebServer->hasArg("c1")) {
|
||||
if (Webserver->hasArg("c1")) {
|
||||
bitWrite(Settings.rule_enabled,0,1);
|
||||
} else {
|
||||
bitWrite(Settings.rule_enabled,0,0);
|
||||
}
|
||||
|
||||
|
||||
String str = WebServer->arg("t1");
|
||||
String str = Webserver->arg("t1");
|
||||
|
||||
if (*str.c_str()) {
|
||||
|
||||
|
@ -3990,11 +3990,11 @@ void Script_Handle_Hue(String *path) {
|
|||
uint8_t device = DecodeLightId(atoi(path->c_str()));
|
||||
uint8_t index = device-devices_present-1;
|
||||
|
||||
if (WebServer->args()) {
|
||||
if (Webserver->args()) {
|
||||
response = "[";
|
||||
|
||||
StaticJsonBuffer<400> jsonBuffer;
|
||||
JsonObject &hue_json = jsonBuffer.parseObject(WebServer->arg((WebServer->args())-1));
|
||||
JsonObject &hue_json = jsonBuffer.parseObject(Webserver->arg((Webserver->args())-1));
|
||||
if (hue_json.containsKey("on")) {
|
||||
|
||||
response += FPSTR(sHUE_LIGHT_RESPONSE_JSON);
|
||||
|
@ -4436,8 +4436,8 @@ void Script_Check_HTML_Setvars(void) {
|
|||
|
||||
if (!HttpCheckPriviledgedAccess()) { return; }
|
||||
|
||||
if (WebServer->hasArg("sv")) {
|
||||
String stmp = WebServer->arg("sv");
|
||||
if (Webserver->hasArg("sv")) {
|
||||
String stmp = Webserver->arg("sv");
|
||||
char cmdbuf[64];
|
||||
memset(cmdbuf,0,sizeof(cmdbuf));
|
||||
char *cp=cmdbuf;
|
||||
|
@ -4932,13 +4932,13 @@ bool Xdrv10(uint8_t function)
|
|||
WSContentSend_P(HTTP_BTN_MENU_RULES);
|
||||
break;
|
||||
case FUNC_WEB_ADD_HANDLER:
|
||||
WebServer->on("/" WEB_HANDLE_SCRIPT, HandleScriptConfiguration);
|
||||
WebServer->on("/ta",HTTP_POST, HandleScriptTextareaConfiguration);
|
||||
Webserver->on("/" WEB_HANDLE_SCRIPT, HandleScriptConfiguration);
|
||||
Webserver->on("/ta",HTTP_POST, HandleScriptTextareaConfiguration);
|
||||
|
||||
#ifdef USE_SCRIPT_FATFS
|
||||
WebServer->on("/u3", HTTP_POST,[]() { WebServer->sendHeader("Location","/u3");WebServer->send(303);},script_upload);
|
||||
WebServer->on("/u3", HTTP_GET,ScriptFileUploadSuccess);
|
||||
WebServer->on("/upl", HTTP_GET,Script_FileUploadConfiguration);
|
||||
Webserver->on("/u3", HTTP_POST,[]() { Webserver->sendHeader("Location","/u3");Webserver->send(303);},script_upload);
|
||||
Webserver->on("/u3", HTTP_GET,ScriptFileUploadSuccess);
|
||||
Webserver->on("/upl", HTTP_GET,Script_FileUploadConfiguration);
|
||||
#endif
|
||||
break;
|
||||
#endif // USE_WEBSERVER
|
||||
|
|
|
@ -809,22 +809,22 @@ void HandleKNXConfiguration(void)
|
|||
char tmp[100];
|
||||
String stmp;
|
||||
|
||||
if ( WebServer->hasArg("save") ) {
|
||||
if ( Webserver->hasArg("save") ) {
|
||||
KNX_Save_Settings();
|
||||
HandleConfiguration();
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( WebServer->hasArg("btn_add") ) {
|
||||
if ( WebServer->arg("btn_add") == "1" ) {
|
||||
if ( Webserver->hasArg("btn_add") ) {
|
||||
if ( Webserver->arg("btn_add") == "1" ) {
|
||||
|
||||
stmp = WebServer->arg("GAop"); //option selected
|
||||
stmp = Webserver->arg("GAop"); //option selected
|
||||
uint8_t GAop = stmp.toInt();
|
||||
stmp = WebServer->arg("GA_FNUM");
|
||||
stmp = Webserver->arg("GA_FNUM");
|
||||
uint8_t GA_FNUM = stmp.toInt();
|
||||
stmp = WebServer->arg("GA_AREA");
|
||||
stmp = Webserver->arg("GA_AREA");
|
||||
uint8_t GA_AREA = stmp.toInt();
|
||||
stmp = WebServer->arg("GA_FDEF");
|
||||
stmp = Webserver->arg("GA_FDEF");
|
||||
uint8_t GA_FDEF = stmp.toInt();
|
||||
|
||||
if (GAop) {
|
||||
|
@ -834,13 +834,13 @@ void HandleKNXConfiguration(void)
|
|||
else
|
||||
{
|
||||
|
||||
stmp = WebServer->arg("CBop"); //option selected
|
||||
stmp = Webserver->arg("CBop"); //option selected
|
||||
uint8_t CBop = stmp.toInt();
|
||||
stmp = WebServer->arg("CB_FNUM");
|
||||
stmp = Webserver->arg("CB_FNUM");
|
||||
uint8_t CB_FNUM = stmp.toInt();
|
||||
stmp = WebServer->arg("CB_AREA");
|
||||
stmp = Webserver->arg("CB_AREA");
|
||||
uint8_t CB_AREA = stmp.toInt();
|
||||
stmp = WebServer->arg("CB_FDEF");
|
||||
stmp = Webserver->arg("CB_FDEF");
|
||||
uint8_t CB_FDEF = stmp.toInt();
|
||||
|
||||
if (CBop) {
|
||||
|
@ -848,19 +848,19 @@ void HandleKNXConfiguration(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
else if ( WebServer->hasArg("btn_del_ga") )
|
||||
else if ( Webserver->hasArg("btn_del_ga") )
|
||||
{
|
||||
|
||||
stmp = WebServer->arg("btn_del_ga");
|
||||
stmp = Webserver->arg("btn_del_ga");
|
||||
uint8_t GA_NUM = stmp.toInt();
|
||||
|
||||
KNX_DEL_GA(GA_NUM);
|
||||
|
||||
}
|
||||
else if ( WebServer->hasArg("btn_del_cb") )
|
||||
else if ( Webserver->hasArg("btn_del_cb") )
|
||||
{
|
||||
|
||||
stmp = WebServer->arg("btn_del_cb");
|
||||
stmp = Webserver->arg("btn_del_cb");
|
||||
uint8_t CB_NUM = stmp.toInt();
|
||||
|
||||
KNX_DEL_CB(CB_NUM);
|
||||
|
@ -954,16 +954,16 @@ void KNX_Save_Settings(void)
|
|||
String stmp;
|
||||
address_t KNX_addr;
|
||||
|
||||
Settings.flag.knx_enabled = WebServer->hasArg("b1");
|
||||
Settings.flag.knx_enable_enhancement = WebServer->hasArg("b2");
|
||||
Settings.flag.knx_enabled = Webserver->hasArg("b1");
|
||||
Settings.flag.knx_enable_enhancement = Webserver->hasArg("b2");
|
||||
AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_KNX D_ENABLED ": %d, " D_KNX_ENHANCEMENT ": %d"),
|
||||
Settings.flag.knx_enabled, Settings.flag.knx_enable_enhancement );
|
||||
|
||||
stmp = WebServer->arg("area");
|
||||
stmp = Webserver->arg("area");
|
||||
KNX_addr.pa.area = stmp.toInt();
|
||||
stmp = WebServer->arg("line");
|
||||
stmp = Webserver->arg("line");
|
||||
KNX_addr.pa.line = stmp.toInt();
|
||||
stmp = WebServer->arg("member");
|
||||
stmp = Webserver->arg("member");
|
||||
KNX_addr.pa.member = stmp.toInt();
|
||||
Settings.knx_physsical_addr = KNX_addr.value;
|
||||
knx.physical_address_set( KNX_addr ); // Set Physical KNX Address of the device
|
||||
|
@ -1224,7 +1224,7 @@ bool Xdrv11(uint8_t function)
|
|||
WSContentSend_P(HTTP_BTN_MENU_KNX);
|
||||
break;
|
||||
case FUNC_WEB_ADD_HANDLER:
|
||||
WebServer->on("/kn", HandleKNXConfiguration);
|
||||
Webserver->on("/kn", HandleKNXConfiguration);
|
||||
break;
|
||||
#endif // USE_KNX_WEB_MENU
|
||||
#endif // USE_WEBSERVER
|
||||
|
|
|
@ -448,7 +448,7 @@ static const char * FIRST_GEN_UA[] = { // list of User-Agents signature
|
|||
// Check if the Echo device is of 1st generation, which triggers different results
|
||||
uint32_t findEchoGeneration(void) {
|
||||
// result is 1 for 1st gen, 2 for 2nd gen and further
|
||||
String user_agent = WebServer->header("User-Agent");
|
||||
String user_agent = Webserver->header("User-Agent");
|
||||
uint32_t gen = 2;
|
||||
|
||||
for (uint32_t i = 0; i < sizeof(FIRST_GEN_UA)/sizeof(char*); i++) {
|
||||
|
@ -521,11 +521,11 @@ void HueLightsCommand(uint8_t device, uint32_t device_id, String &response) {
|
|||
const size_t buf_size = 100;
|
||||
char * buf = (char*) malloc(buf_size);
|
||||
|
||||
if (WebServer->args()) {
|
||||
if (Webserver->args()) {
|
||||
response = "[";
|
||||
|
||||
StaticJsonBuffer<300> jsonBuffer;
|
||||
JsonObject &hue_json = jsonBuffer.parseObject(WebServer->arg((WebServer->args())-1));
|
||||
JsonObject &hue_json = jsonBuffer.parseObject(Webserver->arg((Webserver->args())-1));
|
||||
if (hue_json.containsKey("on")) {
|
||||
on = hue_json["on"];
|
||||
snprintf_P(buf, buf_size,
|
||||
|
@ -827,8 +827,8 @@ void HandleHueApi(String *path)
|
|||
path->remove(0, 4); // remove /api
|
||||
uint16_t apilen = path->length();
|
||||
AddLog_P2(LOG_LEVEL_DEBUG_MORE, PSTR(D_LOG_HTTP D_HUE_API " (%s)"), path->c_str()); // HTP: Hue API (//lights/1/state
|
||||
for (args = 0; args < WebServer->args(); args++) {
|
||||
String json = WebServer->arg(args);
|
||||
for (args = 0; args < Webserver->args(); args++) {
|
||||
String json = Webserver->arg(args);
|
||||
AddLog_P2(LOG_LEVEL_DEBUG_MORE, PSTR(D_LOG_HTTP D_HUE_POST_ARGS " (%s)"), json.c_str()); // HTP: Hue POST args ({"on":false})
|
||||
}
|
||||
|
||||
|
@ -861,7 +861,7 @@ bool Xdrv20(uint8_t function)
|
|||
#endif
|
||||
switch (function) {
|
||||
case FUNC_WEB_ADD_HANDLER:
|
||||
WebServer->on(F("/description.xml"), HandleUpnpSetupHue);
|
||||
Webserver->on(F("/description.xml"), HandleUpnpSetupHue);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -198,7 +198,7 @@ void HandleUpnpEvent(void)
|
|||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, PSTR(D_WEMO_BASIC_EVENT));
|
||||
|
||||
char event[500];
|
||||
strlcpy(event, WebServer->arg(0).c_str(), sizeof(event));
|
||||
strlcpy(event, Webserver->arg(0).c_str(), sizeof(event));
|
||||
|
||||
// AddLog_P2(LOG_LEVEL_DEBUG_MORE, PSTR("\n%s"), event);
|
||||
|
||||
|
@ -259,10 +259,10 @@ bool Xdrv21(uint8_t function)
|
|||
if (devices_present && (EMUL_WEMO == Settings.flag2.emulation)) {
|
||||
switch (function) {
|
||||
case FUNC_WEB_ADD_HANDLER:
|
||||
WebServer->on("/upnp/control/basicevent1", HTTP_POST, HandleUpnpEvent);
|
||||
WebServer->on("/eventservice.xml", HandleUpnpService);
|
||||
WebServer->on("/metainfoservice.xml", HandleUpnpMetaService);
|
||||
WebServer->on("/setup.xml", HandleUpnpSetupWemo);
|
||||
Webserver->on("/upnp/control/basicevent1", HTTP_POST, HandleUpnpEvent);
|
||||
Webserver->on("/eventservice.xml", HandleUpnpService);
|
||||
Webserver->on("/metainfoservice.xml", HandleUpnpMetaService);
|
||||
Webserver->on("/setup.xml", HandleUpnpSetupWemo);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -190,11 +190,11 @@ void ZigbeeHandleHue(uint16_t shortaddr, uint32_t device_id, String &response) {
|
|||
const size_t buf_size = 100;
|
||||
char * buf = (char*) malloc(buf_size);
|
||||
|
||||
if (WebServer->args()) {
|
||||
if (Webserver->args()) {
|
||||
response = "[";
|
||||
|
||||
StaticJsonBuffer<300> jsonBuffer;
|
||||
JsonObject &hue_json = jsonBuffer.parseObject(WebServer->arg((WebServer->args())-1));
|
||||
JsonObject &hue_json = jsonBuffer.parseObject(Webserver->arg((Webserver->args())-1));
|
||||
if (hue_json.containsKey("on")) {
|
||||
on = hue_json["on"];
|
||||
snprintf_P(buf, buf_size,
|
||||
|
|
|
@ -160,7 +160,7 @@ void HandlePcf8574(void)
|
|||
|
||||
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_CONFIGURE_PCF8574));
|
||||
|
||||
if (WebServer->hasArg("save")) {
|
||||
if (Webserver->hasArg("save")) {
|
||||
Pcf8574SaveSettings();
|
||||
WebRestart(1);
|
||||
return;
|
||||
|
@ -193,9 +193,9 @@ void Pcf8574SaveSettings(void)
|
|||
char stemp[7];
|
||||
char tmp[100];
|
||||
|
||||
//AddLog_P(LOG_LEVEL_DEBUG, PSTR("PCF: Start working on Save arguements: inverted:%d")), WebServer->hasArg("b1");
|
||||
//AddLog_P(LOG_LEVEL_DEBUG, PSTR("PCF: Start working on Save arguements: inverted:%d")), Webserver->hasArg("b1");
|
||||
|
||||
Settings.flag3.pcf8574_ports_inverted = WebServer->hasArg("b1"); // SetOption81 - Invert all ports on PCF8574 devices
|
||||
Settings.flag3.pcf8574_ports_inverted = Webserver->hasArg("b1"); // SetOption81 - Invert all ports on PCF8574 devices
|
||||
for (byte idx = 0; idx < Pcf8574.max_devices; idx++) {
|
||||
byte count=0;
|
||||
byte n = Settings.pcf8574_config[idx];
|
||||
|
@ -248,7 +248,7 @@ bool Xdrv28(uint8_t function)
|
|||
WSContentSend_P(HTTP_BTN_MENU_PCF8574);
|
||||
break;
|
||||
case FUNC_WEB_ADD_HANDLER:
|
||||
WebServer->on("/" WEB_HANDLE_PCF8574, HandlePcf8574);
|
||||
Webserver->on("/" WEB_HANDLE_PCF8574, HandlePcf8574);
|
||||
break;
|
||||
#endif // USE_WEBSERVER
|
||||
}
|
||||
|
|
|
@ -494,7 +494,7 @@ void HandleHxAction(void)
|
|||
|
||||
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_CONFIGURE_HX711);
|
||||
|
||||
if (WebServer->hasArg("save")) {
|
||||
if (Webserver->hasArg("save")) {
|
||||
HxSaveSettings();
|
||||
HandleConfiguration();
|
||||
return;
|
||||
|
@ -502,7 +502,7 @@ void HandleHxAction(void)
|
|||
|
||||
char stemp1[20];
|
||||
|
||||
if (WebServer->hasArg("reset")) {
|
||||
if (Webserver->hasArg("reset")) {
|
||||
snprintf_P(stemp1, sizeof(stemp1), PSTR("Sensor34 1")); // Reset
|
||||
ExecuteWebCommand(stemp1, SRC_WEBGUI);
|
||||
|
||||
|
@ -510,7 +510,7 @@ void HandleHxAction(void)
|
|||
return;
|
||||
}
|
||||
|
||||
if (WebServer->hasArg("calibrate")) {
|
||||
if (Webserver->hasArg("calibrate")) {
|
||||
WebGetArg("p1", stemp1, sizeof(stemp1));
|
||||
Settings.weight_reference = (!strlen(stemp1)) ? 0 : (unsigned long)(CharToFloat(stemp1) * 1000);
|
||||
|
||||
|
@ -593,7 +593,7 @@ bool Xsns34(uint8_t function)
|
|||
WSContentSend_P(HTTP_BTN_MENU_HX711);
|
||||
break;
|
||||
case FUNC_WEB_ADD_HANDLER:
|
||||
WebServer->on("/" WEB_HANDLE_HX711, HandleHxAction);
|
||||
Webserver->on("/" WEB_HANDLE_HX711, HandleHxAction);
|
||||
break;
|
||||
#endif // USE_HX711_GUI
|
||||
#endif // USE_WEBSERVER
|
||||
|
|
|
@ -98,7 +98,7 @@ The serial pins are GPS_RX and GPS_TX, no further installation steps needed. To
|
|||
set latitude and longitude in settings
|
||||
|
||||
+ sensor60 14
|
||||
open virtual serial port over TCP, usable for u-center
|
||||
open virtual serial port over TCP, usable for u-center
|
||||
|
||||
+ sensor60 15
|
||||
pause virtual serial port over TCP
|
||||
|
@ -137,7 +137,7 @@ const char kUBXTypes[] PROGMEM = "UBX";
|
|||
|
||||
#define UBX_SERIAL_BUFFER_SIZE 256
|
||||
#define UBX_TCP_PORT 1234
|
||||
#define NTP_MILLIS_OFFSET 50 // estimated latency in milliseconds
|
||||
#define NTP_MILLIS_OFFSET 50 // estimated latency in milliseconds
|
||||
|
||||
/********************************************************************************************\
|
||||
| *globals
|
||||
|
@ -504,8 +504,8 @@ uint32_t UBXprocessGPS()
|
|||
#ifdef USE_FLOG
|
||||
void UBXsendHeader(void)
|
||||
{
|
||||
WebServer->setContentLength(CONTENT_LENGTH_UNKNOWN);
|
||||
WebServer->sendHeader(F("Content-Disposition"), F("attachment; filename=TASMOTA.gpx"));
|
||||
Webserver->setContentLength(CONTENT_LENGTH_UNKNOWN);
|
||||
Webserver->sendHeader(F("Content-Disposition"), F("attachment; filename=TASMOTA.gpx"));
|
||||
WSSend(200, CT_STREAM, F(
|
||||
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\" ?>\r\n"
|
||||
"<GPX version=\"1.1\" creator=\"TASMOTA\" xmlns=\"http://www.topografix.com/GPX/1/1\" \r\n"
|
||||
|
@ -526,13 +526,13 @@ void UBXsendRecord(uint8_t *buf)
|
|||
dtostrfd((double)entry->lon/10000000.0f,7,lon);
|
||||
snprintf_P(record, sizeof(record),PSTR("<trkpt\n\t lat=\"%s\" lon=\"%s\">\n\t<time>%s</time>\n</trkpt>\n"),lat ,lon, stime);
|
||||
// DEBUG_SENSOR_LOG(PSTR("FLOG: DL %u %u"), Flog->sector.dword_buffer[k+j],Flog->sector.dword_buffer[k+j+1]);
|
||||
WebServer->sendContent_P(record);
|
||||
Webserver->sendContent_P(record);
|
||||
}
|
||||
|
||||
void UBXsendFooter(void)
|
||||
{
|
||||
WebServer->sendContent(F("</trkseg>\n</trk>\n</gpx>"));
|
||||
WebServer->sendContent("");
|
||||
Webserver->sendContent(F("</trkseg>\n</trk>\n</gpx>"));
|
||||
Webserver->sendContent("");
|
||||
Rtc.user_time_entry = false; // we have blocked the main loop and want a new valid time
|
||||
}
|
||||
|
||||
|
@ -707,7 +707,7 @@ void UBXHandleTIME()
|
|||
if (UBX.mode.forceUTCupdate || Rtc.user_time_entry == false){
|
||||
AddLog_P(LOG_LEVEL_INFO, PSTR("UBX: UTC-Time is valid, set system time"));
|
||||
Rtc.utc_time = UBX.rec_buffer.values.time;
|
||||
}
|
||||
}
|
||||
Rtc.user_time_entry = true;
|
||||
}
|
||||
}
|
||||
|
@ -928,7 +928,7 @@ bool Xsns60(uint8_t function)
|
|||
break;
|
||||
#ifdef USE_FLOG
|
||||
case FUNC_WEB_ADD_HANDLER:
|
||||
WebServer->on("/UBX", UBXsendFile);
|
||||
Webserver->on("/UBX", UBXsendFile);
|
||||
break;
|
||||
#endif //USE_FLOG
|
||||
case FUNC_JSON_APPEND:
|
||||
|
|
|
@ -90,7 +90,7 @@ bool Xsns91(uint8_t function)
|
|||
|
||||
switch (function) {
|
||||
case FUNC_WEB_ADD_HANDLER:
|
||||
WebServer->on("/metrics", HandleMetrics);
|
||||
Webserver->on("/metrics", HandleMetrics);
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
|
|
Loading…
Reference in New Issue