diff --git a/src/cmnds/cmd_tasmota.c b/src/cmnds/cmd_tasmota.c index 265179b92..20cfbd6bb 100644 --- a/src/cmnds/cmd_tasmota.c +++ b/src/cmnds/cmd_tasmota.c @@ -13,7 +13,7 @@ int parsePowerArgument(const char *s) { if(!stricmp(s,"ON")) - return 255; + return 1; if(!stricmp(s,"OFF")) return 0; return atoi(s); @@ -29,6 +29,10 @@ static int power(const void *context, const char *cmd, const char *args, int cmd if (strlen(cmd) > 5) { channel = atoi(cmd+5); + + if (PIN_CountPinsWithRoleOrRole(IOR_PWM, IOR_PWM_n) > 0) { + channel = SPECIAL_CHANNEL_LEDPOWER; + } } else { // if new LED driver active if(PIN_CountPinsWithRoleOrRole(IOR_PWM, IOR_PWM_n) > 0) { diff --git a/src/httpserver/http_fns.c b/src/httpserver/http_fns.c index 1b8b47a36..471ce0b49 100644 --- a/src/httpserver/http_fns.c +++ b/src/httpserver/http_fns.c @@ -1603,6 +1603,16 @@ int http_tasmota_json_power(http_request_t* request) { int numPWMs; int i; int lastRelayState; + bool bRelayIndexingStartsWithZero; + int relayIndexingOffset; + + bRelayIndexingStartsWithZero = CHANNEL_HasChannelPinWithRoleOrRole(0, IOR_Relay, IOR_Relay_n); + if (bRelayIndexingStartsWithZero) { + relayIndexingOffset = 0; + } + else { + relayIndexingOffset = 1; + } // try to return status numPWMs = PIN_CountPinsWithRoleOrRole(IOR_PWM, IOR_PWM_n); @@ -1610,11 +1620,16 @@ int http_tasmota_json_power(http_request_t* request) { // LED driver (if has PWMs) if (numPWMs > 0) { + int dimmer = LED_GetDimmer(); + hprintf255(request, "\"Dimmer\":%i,", dimmer); + hprintf255(request, "\"Fade\":\"OFF\","); + hprintf255(request, "\"Speed\":1,"); + hprintf255(request, "\"LedTable\":\"ON\","); if (LED_GetEnableAll() == 0) { - poststr(request, "{\"POWER\":\"OFF\"}"); + poststr(request, "\"POWER\":\"OFF\""); } else { - poststr(request, "{\"POWER\":\"ON\"}"); + poststr(request, "\"POWER\":\"ON\""); } } else { @@ -1627,22 +1642,35 @@ int http_tasmota_json_power(http_request_t* request) { } if (numRelays == 1) { if (lastRelayState) { - poststr(request, "{\"POWER\":\"ON\"}"); + poststr(request, "\"POWER\":\"ON\""); } else { - poststr(request, "{\"POWER\":\"OFF\"}"); + poststr(request, "\"POWER\":\"OFF\""); } } else { + int c_posted = 0; for (i = 0; i < CHANNEL_MAX; i++) { if (h_isChannelRelay(i) || CHANNEL_GetType(i) == ChType_Toggle) { - lastRelayState = CHANNEL_Get(i); - if (lastRelayState) { - hprintf255(request, "{\"POWER%i\":\"ON\"}", i); + int indexStartingFrom1; + + if (bRelayIndexingStartsWithZero) { + indexStartingFrom1 = i + 1; } else { - hprintf255(request, "{\"POWER%i\":\"OFF\"}", i); + indexStartingFrom1 = i; } + lastRelayState = CHANNEL_Get(i); + if (c_posted) { + hprintf255(request, ","); + } + if (lastRelayState) { + hprintf255(request, "\"POWER%i\":\"ON\"", indexStartingFrom1); + } + else { + hprintf255(request, "\"POWER%i\":\"OFF\"", indexStartingFrom1); + } + c_posted++; } } } @@ -1654,33 +1682,38 @@ int http_tasmota_json_power(http_request_t* request) { {"StatusSNS":{"Time":"2022-07-30T10:11:26","ENERGY":{"TotalStartTime":"2022-05-12T10:56:31","Total":0.003,"Yesterday":0.003,"Today":0.000,"Power": 0,"ApparentPower": 0,"ReactivePower": 0,"Factor":0.00,"Voltage":236,"Current":0.000}}} */ int http_tasmota_json_status_SNS(http_request_t* request) { - float power, factor, voltage, current; - float energy, energy_hour; + + hprintf255(request, "{\"StatusSNS\":{"); #ifndef OBK_DISABLE_ALL_DRIVERS - factor = 0; // TODO - voltage = DRV_GetReading(OBK_VOLTAGE); - current = DRV_GetReading(OBK_CURRENT); - power = DRV_GetReading(OBK_POWER); - energy = DRV_GetReading(OBK_CONSUMPTION_TOTAL); - energy_hour = DRV_GetReading(OBK_CONSUMPTION_LAST_HOUR); + if (DRV_IsMeasuringPower()) { -#else - factor = 0; - voltage = 0; - current = 0; - power = 0; - energy = 0; - energy_hour = 0; + float power, factor, voltage, current; + float energy, energy_hour; + + factor = 0; // TODO + voltage = DRV_GetReading(OBK_VOLTAGE); + current = DRV_GetReading(OBK_CURRENT); + power = DRV_GetReading(OBK_POWER); + energy = DRV_GetReading(OBK_CONSUMPTION_TOTAL); + energy_hour = DRV_GetReading(OBK_CONSUMPTION_LAST_HOUR); + + + // begin ENERGY block + hprintf255(request, "\"ENERGY\":{"); + hprintf255(request, "\"Power\": %f,", power); + hprintf255(request, "\"ApparentPower\": 0,\"ReactivePower\": 0,\"Factor\":%f,", factor); + hprintf255(request, "\"Voltage\":%f,", voltage); + hprintf255(request, "\"Current\":%f,", current); + hprintf255(request, "\"ConsumptionTotal\":%f,", energy); + hprintf255(request, "\"ConsumptionLastHour\":%f", energy_hour); + // close ENERGY block + hprintf255(request, "}"); + } #endif - hprintf255(request, "{\"StatusSNS\":{\"ENERGY\":{"); - hprintf255(request, "\"Power\": %f,", power); - hprintf255(request, "\"ApparentPower\": 0,\"ReactivePower\": 0,\"Factor\":%f,", factor); - hprintf255(request, "\"Voltage\":%f,", voltage); - hprintf255(request, "\"Current\":%f,", current); - hprintf255(request, "\"ConsumptionTotal\":%f,", energy); - hprintf255(request, "\"ConsumptionLastHour\":%f}}}", energy_hour); + hprintf255(request, "}"); + hprintf255(request, "}"); return 0; } @@ -1691,19 +1724,284 @@ int http_tasmota_json_status_generic(http_request_t* request) { const char* deviceName; const char* friendlyName; const char* clientId; + int powerCode; + int relayCount, pwmCount, i; + bool bRelayIndexingStartsWithZero; deviceName = CFG_GetShortDeviceName(); friendlyName = CFG_GetDeviceName(); clientId = CFG_GetMQTTClientId(); - hprintf255(request, "{\"Status\":{\"Module\":0,\"DeviceName\":\"%s\"", deviceName); - hprintf255(request, ",\"FriendlyName\":[\"%s\"]", friendlyName); + //deviceName = "Tasmota"; + //friendlyName - "Tasmota"; + +#if 0 + const char *dbg = "{\"Status\":{\"Module\":0,\"DeviceName\":\"Tasmota\",\"FriendlyName\":[\"Tasmota\"],\"Topic\":\"tasmota_D79E2C\",\"ButtonTopic\":\"0\",\"Power\":1,\"PowerOnState\":3,\"LedState\":1,\"LedMask\":\"FFFF\",\"SaveData\":1,\"SaveState\":1,\"SwitchTopic\":\"0\",\"SwitchMode\":[0,0,0,0,0,0,0,0],\"ButtonRetain\":0,\"SwitchRetain\":0,\"SensorRetain\":0,\"PowerRetain\":0,\"InfoRetain\":0,\"StateRetain\":0},\"StatusPRM\":{\"Baudrate\":115200,\"SerialConfig\":\"8N1\",\"GroupTopic\":\"tasmotas\",\"OtaUrl\":\"http://ota.tasmota.com/tasmota/release/tasmota.bin.gz\",\"RestartReason\":\"Hardware Watchdog\",\"Uptime\":\"30T03:43:17\",\"StartupUTC\":\"2022-10-10T16:09:41\",\"Sleep\":50,\"CfgHolder\":4617,\"BootCount\":22,\"BCResetTime\":\"2022-01-27T16:10:56\",\"SaveCount\":1235,\"SaveAddress\":\"F9000\"},\"StatusFWR\":{\"Version\":\"10.1.0(tasmota)\",\"BuildDateTime\":\"2021-12-08T14:47:33\",\"Boot\":7,\"Core\":\"2_7_4_9\",\"SDK\":\"2.2.2-dev(38a443e)\",\"CpuFrequency\":80,\"Hardware\":\"ESP8266EX\",\"CR\":\"465/699\"},\"StatusLOG\":{\"SerialLog\":2,\"WebLog\":2,\"MqttLog\":0,\"SysLog\":0,\"LogHost\":\"\",\"LogPort\":514,\"SSId\":[\"DLINK_FastNet\",\"\"],\"TelePeriod\":300,\"Resolution\":\"558180C0\",\"SetOption\":[\"000A8009\",\"2805C80001000600003C5A0A000000000000\",\"00000280\",\"00006008\",\"00004000\"]},\"StatusMEM\":{\"ProgramSize\":616,\"Free\":384,\"Heap\":25,\"ProgramFlashSize\":1024,\"FlashSize\":2048,\"FlashChipId\":\"1540A1\",\"FlashFrequency\":40,\"FlashMode\":3,\"Features\":[\"00000809\",\"8FDAC787\",\"04368001\",\"000000CF\",\"010013C0\",\"C000F981\",\"00004004\",\"00001000\",\"00000020\"],\"Drivers\":\"1,2,3,4,5,6,7,8,9,10,12,16,18,19,20,21,22,24,26,27,29,30,35,37,45\",\"Sensors\":\"1,2,3,4,5,6\"},\"StatusNET\":{\"Hostname\":\"tasmota-D79E2C-7724\",\"IPAddress\":\"192.168.0.104\",\"Gateway\":\"192.168.0.1\",\"Subnetmask\":\"255.255.255.0\",\"DNSServer1\":\"192.168.0.1\",\"DNSServer2\":\"0.0.0.0\",\"Mac\":\"10:52:1C:D7:9E:2C\",\"Webserver\":2,\"HTTP_API\":1,\"WifiConfig\":4,\"WifiPower\":17.0},\"StatusMQT\":{\"MqttHost\":\"192.168.0.113\",\"MqttPort\":1883,\"MqttClientMask\":\"core-mosquitto\",\"MqttClient\":\"core-mosquitto\",\"MqttUser\":\"homeassistant\",\"MqttCount\":23,\"MAX_PACKET_SIZE\":1200,\"KEEPALIVE\":30,\"SOCKET_TIMEOUT\":4},\"StatusTIM\":{\"UTC\":\"2022-11-09T19:52:58\",\"Local\":\"2022-11-09T20:52:58\",\"StartDST\":\"2022-03-27T02:00:00\",\"EndDST\":\"2022-10-30T03:00:00\",\"Timezone\":\"+01:00\",\"Sunrise\":\"07:50\",\"Sunset\":\"17:17\"},\"StatusSNS\":{\"Time\":\"2022-11-09T20:52:58\"},\"StatusSTS\":{\"Time\":\"2022-11-09T20:52:58\",\"Uptime\":\"30T03:43:17\",\"UptimeSec\":2605397,\"Heap\":25,\"SleepMode\":\"Dynamic\",\"Sleep\":10,\"LoadAvg\":99,\"MqttCount\":23,\"POWER\":\"ON\",\"Dimmer\":99,\"Fade\":\"OFF\",\"Speed\":1,\"LedTable\":\"ON\",\"Wifi\":{\"AP\":1,\"SSId\":\"DLINK_FastNet\",\"BSSId\":\"30:B5:C2:5D:70:72\",\"Channel\":11,\"Mode\":\"11n\",\"RSSI\":80,\"Signal\":-60,\"LinkCount\":21,\"Downtime\":\"0T06:13:34\"}}}"; + poststr(request,dbg); + return; + +#endif + + bRelayIndexingStartsWithZero = CHANNEL_HasChannelPinWithRoleOrRole(0, IOR_Relay, IOR_Relay_n); + + get_Relay_PWM_Count(&relayCount, &pwmCount); + + if (pwmCount > 0) { + powerCode = LED_GetEnableAll(); + } + else { + powerCode = 0; + for (i = 0; i < CHANNEL_MAX; i++) { + bool bRelay; + int useIdx; + int iValue; + if (bRelayIndexingStartsWithZero) { + useIdx = i; + } + else { + useIdx = i + 1; + } + bRelay = CHANNEL_HasChannelPinWithRoleOrRole(useIdx, IOR_Relay, IOR_Relay_n); + if (bRelay) { + iValue = CHANNEL_Get(useIdx); + if (iValue) + BIT_SET(powerCode, i); + else + BIT_CLEAR(powerCode, i); + } + } + } + + hprintf255(request, "{"); + // Status section + hprintf255(request, "\"Status\":{\"Module\":0,\"DeviceName\":\"%s\"", deviceName); + hprintf255(request, ",\"FriendlyName\":["); + if (relayCount == 0) { + hprintf255(request, "\"%s\"", deviceName); + } + else { + int c_printed = 0; + for (i = 0; i < CHANNEL_MAX; i++) { + bool bRelay; + bRelay = CHANNEL_HasChannelPinWithRoleOrRole(i, IOR_Relay, IOR_Relay_n); + if (bRelay) { + int useIdx; + if (bRelayIndexingStartsWithZero) { + useIdx = i + 1; + } + else { + useIdx = i; + } + if (c_printed) { + hprintf255(request, ","); + } + hprintf255(request, "\"%s_%i\"", deviceName, useIdx); + c_printed++; + } + } + } + hprintf255(request, "]"); hprintf255(request, ",\"Topic\":\"%s\",\"ButtonTopic\":\"0\"", clientId); - hprintf255(request, ",\"Power\":1,\"PowerOnState\":3,\"LedState\":1"); + hprintf255(request, ",\"Power\":%i,\"PowerOnState\":3,\"LedState\":1", powerCode); hprintf255(request, ",\"LedMask\":\"FFFF\",\"SaveData\":1,\"SaveState\":1"); hprintf255(request, ",\"SwitchTopic\":\"0\",\"SwitchMode\":[0,0,0,0,0,0,0,0]"); hprintf255(request, ",\"ButtonRetain\":0,\"SwitchRetain\":0,\"SensorRetain\":0"); - hprintf255(request, ",\"PowerRetain\":0,\"InfoRetain\":0,\"StateRetain\":0}}"); + hprintf255(request, ",\"PowerRetain\":0,\"InfoRetain\":0,\"StateRetain\":0"); + hprintf255(request, "}"); + + hprintf255(request, ","); + + + hprintf255(request, "\"StatusPRM\":{"); + hprintf255(request, "\"Baudrate\":115200,"); + hprintf255(request, "\"SerialConfig\":\"8N1\","); + hprintf255(request, "\"GroupTopic\":\"tasmotas\","); + hprintf255(request, "\"OtaUrl\":\"http://ota.tasmota.com/tasmota/release/tasmota.bin.gz\","); + hprintf255(request, "\"RestartReason\":\"HardwareWatchdog\","); + hprintf255(request, "\"Uptime\":\"30T02:59:30\","); + hprintf255(request, "\"StartupUTC\":\"2022-10-10T16:09:41\","); + hprintf255(request, "\"Sleep\":50,"); + hprintf255(request, "\"CfgHolder\":4617,"); + hprintf255(request, "\"BootCount\":22,"); + hprintf255(request, "\"BCResetTime\":\"2022-01-27T16:10:56\","); + hprintf255(request, "\"SaveCount\":1235,"); + hprintf255(request, "\"SaveAddress\":\"F9000\""); + hprintf255(request, "}"); + + hprintf255(request, ","); + + hprintf255(request, "\"StatusFWR\":{"); + hprintf255(request, "\"Version\":\"%s\",", DEVICENAME_PREFIX_FULL"_"USER_SW_VER); + hprintf255(request, "\"BuildDateTime\":\"%s\",", __DATE__ " " __TIME__); + hprintf255(request, "\"Boot\":7,"); + hprintf255(request, "\"Core\":\"%s\",","0.0"); + hprintf255(request, "\"SDK\":\"\",","obk"); + hprintf255(request, "\"CpuFrequency\":80,"); + hprintf255(request, "\"Hardware\":\"%s\",", PLATFORM_MCU_NAME); + hprintf255(request, "\"CR\":\"465/699\""); + hprintf255(request, "}"); + + hprintf255(request, ","); + + + + hprintf255(request, "\"StatusLOG\":{"); + hprintf255(request, "\"SerialLog\":2,"); + hprintf255(request, "\"WebLog\":2,"); + hprintf255(request, "\"MqttLog\":0,"); + hprintf255(request, "\"SysLog\":0,"); + hprintf255(request, "\"LogHost\":\"\","); + hprintf255(request, "\"LogPort\":514,"); + hprintf255(request, "\"SSId\":["); + hprintf255(request, "\"DLINK_FastNet\","); + hprintf255(request, "\"\""); + hprintf255(request, "],"); + hprintf255(request, "\"TelePeriod\":300,"); + hprintf255(request, "\"Resolution\":\"558180C0\","); + hprintf255(request, "\"SetOption\":["); + hprintf255(request, "\"000A8009\","); + hprintf255(request, "\"2805C80001000600003C5A0A000000000000\","); + hprintf255(request, "\"00000280\","); + hprintf255(request, "\"00006008\","); + hprintf255(request, "\"00004000\""); + hprintf255(request, "]"); + hprintf255(request, "}"); + + hprintf255(request, ","); + + + + hprintf255(request, "\"StatusMEM\":{"); + hprintf255(request, "\"ProgramSize\":616,"); + hprintf255(request, "\"Free\":384,"); + hprintf255(request, "\"Heap\":25,"); + hprintf255(request, "\"ProgramFlashSize\":1024,"); + hprintf255(request, "\"FlashSize\":2048,"); + hprintf255(request, "\"FlashChipId\":\"1540A1\","); + hprintf255(request, "\"FlashFrequency\":40,"); + hprintf255(request, "\"FlashMode\":3,"); + hprintf255(request, "\"Features\":["); + hprintf255(request, "\"00000809\","); + hprintf255(request, "\"8FDAC787\","); + hprintf255(request, "\"04368001\","); + hprintf255(request, "\"000000CF\","); + hprintf255(request, "\"010013C0\","); + hprintf255(request, "\"C000F981\","); + hprintf255(request, "\"00004004\","); + hprintf255(request, "\"00001000\","); + hprintf255(request, "\"00000020\""); + hprintf255(request, "],"); + hprintf255(request, "\"Drivers\":\"1,2,3,4,5,6,7,8,9,10,12,16,18,19,20,21,22,24,26,27,29,30,35,37,45\","); + hprintf255(request, "\"Sensors\":\"1,2,3,4,5,6\""); + hprintf255(request, "}"); + + hprintf255(request, ","); + + + hprintf255(request, "\"StatusNET\":{"); + hprintf255(request, "\"Hostname\":\"tasmota-D79E2C-7724\","); + hprintf255(request, "\"IPAddress\":\"192.168.0.104\","); + hprintf255(request, "\"Gateway\":\"192.168.0.1\","); + hprintf255(request, "\"Subnetmask\":\"255.255.255.0\","); + hprintf255(request, "\"DNSServer1\":\"192.168.0.1\","); + hprintf255(request, "\"DNSServer2\":\"0.0.0.0\","); + hprintf255(request, "\"Mac\":\"10:52:1C:D7:9E:2C\","); + hprintf255(request, "\"Webserver\":2,"); + hprintf255(request, "\"HTTP_API\":1,"); + hprintf255(request, "\"WifiConfig\":4,"); + hprintf255(request, "\"WifiPower\":17.0"); + hprintf255(request, "}"); + hprintf255(request, ","); + + + + + hprintf255(request, "\"StatusMQT\":{"); + hprintf255(request, "\"MqttHost\":\"192.168.0.113\","); + hprintf255(request, "\"MqttPort\":1883,"); + hprintf255(request, "\"MqttClientMask\":\"core-mosquitto\","); + hprintf255(request, "\"MqttClient\":\"core-mosquitto\","); + hprintf255(request, "\"MqttUser\":\"homeassistant\","); + hprintf255(request, "\"MqttCount\":23,"); + hprintf255(request, "\"MAX_PACKET_SIZE\":1200,"); + hprintf255(request, "\"KEEPALIVE\":30,"); + hprintf255(request, "\"SOCKET_TIMEOUT\":4"); + hprintf255(request, "}"); + + hprintf255(request, ","); + hprintf255(request, "\"StatusTIM\":{"); + hprintf255(request, "\"UTC\":\"2022-11-09T19:09:11\","); + hprintf255(request, "\"Local\":\"2022-11-09T20:09:11\","); + hprintf255(request, "\"StartDST\":\"2022-03-27T02:00:00\","); + hprintf255(request, "\"EndDST\":\"2022-10-30T03:00:00\","); + hprintf255(request, "\"Timezone\":\"+01:00\","); + hprintf255(request, "\"Sunrise\":\"07:50\","); + hprintf255(request, "\"Sunset\":\"17:17\""); + hprintf255(request, "}"); + + hprintf255(request, ","); + + hprintf255(request, "\"StatusSNS\":{"); + hprintf255(request, "\"Time\":\"2022-11-09T19:09:11\""); + hprintf255(request, "}"); + + hprintf255(request, ","); + + hprintf255(request, "\"StatusSTS\":{"); + + hprintf255(request, "\"Time\":\"2022-11-09T20:09:11\","); + hprintf255(request, "\"Uptime\":\"30T02:59:30\","); + hprintf255(request, "\"UptimeSec\":2602770,"); + hprintf255(request, "\"Heap\":25,"); + hprintf255(request, "\"SleepMode\":\"Dynamic\","); + hprintf255(request, "\"Sleep\":10,"); + hprintf255(request, "\"LoadAvg\":99,"); + hprintf255(request, "\"MqttCount\":23,"); + + http_tasmota_json_power(request); + hprintf255(request, ","); + //if(0) + //{ + // hprintf255(request, "\"POWER\":\"ON\","); + // hprintf255(request, "\"Dimmer\":99,"); + // hprintf255(request, "\"Fade\":\"OFF\","); + // hprintf255(request, "\"Speed\":1,"); + // hprintf255(request, "\"LedTable\":\"ON\","); + //} + //else + //{ + // for (i = 0; i < CHANNEL_MAX; i++) { + // bool bRelay; + // int iValue; + // bRelay = CHANNEL_HasChannelPinWithRoleOrRole(i, IOR_Relay, IOR_Relay_n); + // iValue = CHANNEL_Get(i); + // if (bRelay) { + // hprintf255(request, "\"POWER%i\":\"%s\",",i, iValue == 0 ? "OFF" : "ON"); + // } + + // } + //} + hprintf255(request, "\"Wifi\":{"); + hprintf255(request, "\"AP\":1,"); + hprintf255(request, "\"SSId\":\"SSIIIIIIIIIIIID\","); + hprintf255(request, "\"BSSId\":\"30:B5:C2:5D:70:72\","); + hprintf255(request, "\"Channel\":11,"); + hprintf255(request, "\"Mode\":\"11n\","); + hprintf255(request, "\"RSSI\":78,"); + hprintf255(request, "\"Signal\":-61,"); + hprintf255(request, "\"LinkCount\":21,"); + hprintf255(request, "\"Downtime\":\"0T06:13:34\""); + hprintf255(request, "}"); + hprintf255(request, "}"); + + + + + + + + // end + hprintf255(request, "}"); @@ -1718,9 +2016,12 @@ int http_fn_cm(http_request_t* request) { CMD_ExecuteCommand(tmpA, COMMAND_FLAG_SOURCE_HTTP); if (!wal_strnicmp(tmpA, "POWER", 5)) { + + poststr(request, "{"); http_tasmota_json_power(request); + poststr(request, "}"); } - else if (!wal_strnicmp(tmpA, "STATUS 8", 8)) { + else if (!wal_strnicmp(tmpA, "STATUS 8", 8) || !wal_strnicmp(tmpA, "STATUS 10", 10)) { http_tasmota_json_status_SNS(request); } else { diff --git a/src/httpserver/new_http.c b/src/httpserver/new_http.c index bac7621c9..0ba1c264e 100644 --- a/src/httpserver/new_http.c +++ b/src/httpserver/new_http.c @@ -48,28 +48,6 @@ const char htmlFooterInfo[] = "Support project
"; -// make sure that USER_SW_VER is set on all platforms -// Automatic Github builds are setting it externally, -// but it may not be set while doing a test build on developer PC -#ifndef USER_SW_VER -#ifdef WINDOWS -#define USER_SW_VER "Win_Test" -#elif PLATFORM_XR809 -#define USER_SW_VER "XR809_Test" -#elif defined(PLATFORM_BK7231N) -#define USER_SW_VER "BK7231N_Test" -#elif defined(PLATFORM_BK7231T) -#define USER_SW_VER "BK7231T_Test" -#elif defined(PLATFORM_BL602) -#define USER_SW_VER "BL602_Test" -#elif defined(PLATFORM_W600) -#define USER_SW_VER "W600_Test" -#elif defined(PLATFORM_W800) -#define USER_SW_VER "W800_Test" -#else -#define USER_SW_VER "unknown" -#endif -#endif const char* g_build_str = "Build on " __DATE__ " " __TIME__ " version " USER_SW_VER; // Show GIT version at Build line; const char httpCorsHeaders[] = "Access-Control-Allow-Origin: *\r\nAccess-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept"; // TEXT MIME type @@ -168,6 +146,21 @@ void http_setup(http_request_t* request, const char* type) { hprintf255(request, httpHeader, request->responseCode, type); poststr(request, "\r\n"); // next header poststr(request, httpCorsHeaders); +#if 0 + poststr(request, "Server: Tasmota/10.1.0 (ESP8266EX)"); + poststr(request, "\r\n"); + poststr(request, "Cache-Control: no-cache, no-store, must-revalidate"); + poststr(request, "\r\n"); + poststr(request, "Pragma: no-cache"); + poststr(request, "\r\n"); + poststr(request, "Expires: -1"); + poststr(request, "\r\n"); + poststr(request, "Accept-Ranges: none"); + poststr(request, "\r\n"); + poststr(request, "Transfer-Encoding: chunked"); + poststr(request, "\r\n"); + poststr(request, "Connection: close"); +#endif poststr(request, "\r\n"); // end headers with double CRLF poststr(request, "\r\n"); } @@ -485,13 +478,15 @@ int HTTP_ProcessPacket(http_request_t* request) { // chop URL at space p = strchr(urlStr, ' '); - if (*p) { - *p = '\0'; - p++; // past space - } - else { - ADDLOGF_ERROR("invalid request\n"); - return 0; + if (p != 0) { + if (*p) { + *p = '\0'; + p++; // past space + } + else { + ADDLOGF_ERROR("invalid request\n"); + return 0; + } } request->url = urlStr; @@ -499,51 +494,61 @@ int HTTP_ProcessPacket(http_request_t* request) { // protocol is next, termed by \r\n protocol = p; p = strchr(protocol, '\r'); - if (*p) { - *p = '\0'; - p++; // past \r - p++; // past \n - } - else { - ADDLOGF_ERROR("invalid request\n"); - return 0; + if (p != 0) { + if (*p) { + *p = '\0'; + p++; // past \r + p++; // past \n + } + else { + ADDLOGF_ERROR("invalid request\n"); + return 0; + } } // i.e. not received request->contentLength = -1; headers = p; - do { - p = strchr(headers, '\r'); - if (p != headers) { - if (p) { - if (request->numheaders < 16) { - request->headers[request->numheaders] = headers; - request->numheaders++; - } - // pick out contentLength - if (!my_strnicmp(headers, "Content-Length:", 15)) { - request->contentLength = atoi(headers + 15); - } + if (headers != 0) { + do { + p = strchr(headers, '\r'); + if (p != headers) { + if (p) { + if (request->numheaders < 16) { + request->headers[request->numheaders] = headers; + request->numheaders++; + } + // pick out contentLength + if (!my_strnicmp(headers, "Content-Length:", 15)) { + request->contentLength = atoi(headers + 15); + } - *p = 0; - p++; // past \r - p++; // past \n - headers = p; + *p = 0; + p++; // past \r + p++; // past \n + headers = p; + } + else { + break; + } } - else { + if (*p == '\r') { + // end of headers + *p = 0; + p++; + p++; break; } - } - if (*p == '\r') { - // end of headers - *p = 0; - p++; - p++; - break; - } - } while (1); + } while (1); + } - request->bodystart = p; - request->bodylen = request->receivedLen - (p - request->received); + if (p == 0) { + request->bodystart = 0; + request->bodylen = 0; + } + else { + request->bodystart = p; + request->bodylen = request->receivedLen - (p - request->received); + } #if 0 postany(request, "test", 4); return 0; diff --git a/src/littlefs/lfs.h b/src/littlefs/lfs.h index eb0365250..e3bcb65ec 100644 --- a/src/littlefs/lfs.h +++ b/src/littlefs/lfs.h @@ -8,7 +8,9 @@ #define LFS_H #include "../logging/logging.h" +#ifdef WINDOWS #include "../new_common.h" +#endif #define LFS_ERROR(y, ...) addLogAdv(LOG_ERROR, LOG_FEATURE_LFS, y, ##__VA_ARGS__) diff --git a/src/new_common.h b/src/new_common.h index 4b1041e56..4fd87e310 100644 --- a/src/new_common.h +++ b/src/new_common.h @@ -70,6 +70,28 @@ typedef long BaseType_t; This platform is not supported, error! #endif +// make sure that USER_SW_VER is set on all platforms +// Automatic Github builds are setting it externally, +// but it may not be set while doing a test build on developer PC +#ifndef USER_SW_VER +#ifdef WINDOWS +#define USER_SW_VER "Win_Test" +#elif PLATFORM_XR809 +#define USER_SW_VER "XR809_Test" +#elif defined(PLATFORM_BK7231N) +#define USER_SW_VER "BK7231N_Test" +#elif defined(PLATFORM_BK7231T) +#define USER_SW_VER "BK7231T_Test" +#elif defined(PLATFORM_BL602) +#define USER_SW_VER "BL602_Test" +#elif defined(PLATFORM_W600) +#define USER_SW_VER "W600_Test" +#elif defined(PLATFORM_W800) +#define USER_SW_VER "W800_Test" +#else +#define USER_SW_VER "unknown" +#endif +#endif #define BIT_SET(PIN,N) (PIN |= (1<