mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-23 10:46:31 +00:00
Prep virtual mqtt_data prt2
This commit is contained in:
parent
408ae6a4ef
commit
77760dc2cc
@ -1169,6 +1169,10 @@ char* ResponseGetTime(uint32_t format, char* time_str)
|
||||
return time_str;
|
||||
}
|
||||
|
||||
uint32_t ResponseSize(void) {
|
||||
return sizeof(TasmotaGlobal.mqtt_data);
|
||||
}
|
||||
|
||||
uint32_t ResponseLength(void) {
|
||||
return strlen(TasmotaGlobal.mqtt_data);
|
||||
}
|
||||
@ -1186,7 +1190,7 @@ int Response_P(const char* format, ...) // Content send snprintf_P char d
|
||||
// This uses char strings. Be aware of sending %% if % is needed
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
int len = ext_vsnprintf_P(TasmotaGlobal.mqtt_data, sizeof(TasmotaGlobal.mqtt_data), format, args);
|
||||
int len = ext_vsnprintf_P(TasmotaGlobal.mqtt_data, ResponseSize(), format, args);
|
||||
va_end(args);
|
||||
return len;
|
||||
}
|
||||
@ -1200,7 +1204,7 @@ int ResponseTime_P(const char* format, ...) // Content send snprintf_P char d
|
||||
ResponseGetTime(Settings.flag2.time_format, TasmotaGlobal.mqtt_data);
|
||||
|
||||
int mlen = ResponseLength();
|
||||
int len = ext_vsnprintf_P(TasmotaGlobal.mqtt_data + mlen, sizeof(TasmotaGlobal.mqtt_data) - mlen, format, args);
|
||||
int len = ext_vsnprintf_P(TasmotaGlobal.mqtt_data + mlen, ResponseSize() - mlen, format, args);
|
||||
va_end(args);
|
||||
return len + mlen;
|
||||
}
|
||||
@ -1211,7 +1215,7 @@ int ResponseAppend_P(const char* format, ...) // Content send snprintf_P char d
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
int mlen = ResponseLength();
|
||||
int len = ext_vsnprintf_P(TasmotaGlobal.mqtt_data + mlen, sizeof(TasmotaGlobal.mqtt_data) - mlen, format, args);
|
||||
int len = ext_vsnprintf_P(TasmotaGlobal.mqtt_data + mlen, ResponseSize() - mlen, format, args);
|
||||
va_end(args);
|
||||
return len + mlen;
|
||||
}
|
||||
@ -1246,6 +1250,10 @@ int ResponseJsonEndEnd(void)
|
||||
return ResponseAppend_P(PSTR("}}"));
|
||||
}
|
||||
|
||||
bool ResponseContains_P(const char* needle) {
|
||||
return (strstr_P(TasmotaGlobal.mqtt_data, needle) != nullptr);
|
||||
}
|
||||
|
||||
/*********************************************************************************************\
|
||||
* GPIO Module and Template management
|
||||
\*********************************************************************************************/
|
||||
@ -2025,9 +2033,8 @@ int8_t I2cWriteBuffer(uint8_t addr, uint8_t reg, uint8_t *reg_data, uint16_t len
|
||||
return 0;
|
||||
}
|
||||
|
||||
void I2cScan(char *devs, unsigned int devs_len, uint32_t bus = 0);
|
||||
void I2cScan(char *devs, unsigned int devs_len, uint32_t bus)
|
||||
{
|
||||
void I2cScan(uint32_t bus = 0);
|
||||
void I2cScan(uint32_t bus) {
|
||||
// Return error codes defined in twi.h and core_esp8266_si2c.c
|
||||
// I2C_OK 0
|
||||
// I2C_SCL_HELD_LOW 1 = SCL held low by another device, no procedure available to recover
|
||||
@ -2039,7 +2046,7 @@ void I2cScan(char *devs, unsigned int devs_len, uint32_t bus)
|
||||
uint8_t address = 0;
|
||||
uint8_t any = 0;
|
||||
|
||||
snprintf_P(devs, devs_len, PSTR("{\"" D_CMND_I2CSCAN "\":\"" D_JSON_I2CSCAN_DEVICES_FOUND_AT));
|
||||
Response_P(PSTR("{\"" D_CMND_I2CSCAN "\":\"" D_JSON_I2CSCAN_DEVICES_FOUND_AT));
|
||||
for (address = 1; address <= 127; address++) {
|
||||
#ifdef ESP32
|
||||
TwoWire & myWire = (bus == 0) ? Wire : Wire1;
|
||||
@ -2050,19 +2057,19 @@ void I2cScan(char *devs, unsigned int devs_len, uint32_t bus)
|
||||
error = myWire.endTransmission();
|
||||
if (0 == error) {
|
||||
any = 1;
|
||||
snprintf_P(devs, devs_len, PSTR("%s 0x%02x"), devs, address);
|
||||
ResponseAppend_P(PSTR(" 0x%02x"), address);
|
||||
}
|
||||
else if (error != 2) { // Seems to happen anyway using this scan
|
||||
any = 2;
|
||||
snprintf_P(devs, devs_len, PSTR("{\"" D_CMND_I2CSCAN "\":\"Error %d at 0x%02x"), error, address);
|
||||
Response_P(PSTR("{\"" D_CMND_I2CSCAN "\":\"Error %d at 0x%02x"), error, address);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (any) {
|
||||
strncat(devs, "\"}", devs_len - strlen(devs) -1);
|
||||
ResponseAppend_P(PSTR("\"}"));
|
||||
}
|
||||
else {
|
||||
snprintf_P(devs, devs_len, PSTR("{\"" D_CMND_I2CSCAN "\":\"" D_JSON_I2CSCAN_NO_DEVICES_FOUND "\"}"));
|
||||
Response_P(PSTR("{\"" D_CMND_I2CSCAN "\":\"" D_JSON_I2CSCAN_NO_DEVICES_FOUND "\"}"));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -311,8 +311,8 @@ void CommandHandler(char* topicBuf, char* dataBuf, uint32_t data_len)
|
||||
char json_command[TOPSZ];
|
||||
snprintf_P(json_command, sizeof(json_command), PSTR("{\"" D_JSON_COMMAND "\":\"%s\","), type);
|
||||
uint32_t jc_len = strlen(json_command);
|
||||
uint32_t mq_len = strlen(TasmotaGlobal.mqtt_data) +1;
|
||||
if (mq_len < sizeof(TasmotaGlobal.mqtt_data) - jc_len) {
|
||||
uint32_t mq_len = ResponseLength() +1;
|
||||
if (mq_len < ResponseSize() - jc_len) {
|
||||
memmove(TasmotaGlobal.mqtt_data +jc_len -1, TasmotaGlobal.mqtt_data, mq_len);
|
||||
memmove(TasmotaGlobal.mqtt_data, json_command, jc_len);
|
||||
}
|
||||
@ -2141,11 +2141,11 @@ void CmndWifi(void)
|
||||
void CmndI2cScan(void)
|
||||
{
|
||||
if ((1 == XdrvMailbox.index) && (TasmotaGlobal.i2c_enabled)) {
|
||||
I2cScan(TasmotaGlobal.mqtt_data, sizeof(TasmotaGlobal.mqtt_data));
|
||||
I2cScan();
|
||||
}
|
||||
#ifdef ESP32
|
||||
if ((2 == XdrvMailbox.index) && (TasmotaGlobal.i2c_enabled_2)) {
|
||||
I2cScan(TasmotaGlobal.mqtt_data, sizeof(TasmotaGlobal.mqtt_data), 1);
|
||||
I2cScan(1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -2212,13 +2212,11 @@ void CmndDevGroupTie(void)
|
||||
if (XdrvMailbox.data_len > 0) {
|
||||
Settings.device_group_tie[XdrvMailbox.index - 1] = XdrvMailbox.payload;
|
||||
}
|
||||
char * ptr = TasmotaGlobal.mqtt_data;
|
||||
*ptr++ = '{';
|
||||
Response_P(PSTR("{"));
|
||||
for (uint32_t i = 0; i < MAX_DEV_GROUP_NAMES; i++) {
|
||||
ptr += sprintf(ptr, PSTR("\"%s%u\":%u,"), D_CMND_DEVGROUP_TIE, i + 1, Settings.device_group_tie[i]);
|
||||
ResponseAppend_P(PSTR("%s\"%s%u\":%u"), (i)?",":"", D_CMND_DEVGROUP_TIE, i + 1, Settings.device_group_tie[i]);
|
||||
}
|
||||
*(ptr - 1) = '}';
|
||||
*ptr = 0;
|
||||
ResponseJsonEnd();
|
||||
}
|
||||
}
|
||||
#endif // USE_DEVICE_GROUPS
|
||||
|
@ -837,13 +837,13 @@ bool MqttShowSensor(void)
|
||||
XdrvCall(FUNC_JSON_APPEND);
|
||||
|
||||
bool json_data_available = (ResponseLength() - json_data_start);
|
||||
if (strstr_P(TasmotaGlobal.mqtt_data, PSTR(D_JSON_PRESSURE)) != nullptr) {
|
||||
if (ResponseContains_P(PSTR(D_JSON_PRESSURE))) {
|
||||
ResponseAppend_P(PSTR(",\"" D_JSON_PRESSURE_UNIT "\":\"%s\""), PressureUnit().c_str());
|
||||
}
|
||||
if (strstr_P(TasmotaGlobal.mqtt_data, PSTR(D_JSON_TEMPERATURE)) != nullptr) {
|
||||
if (ResponseContains_P(PSTR(D_JSON_TEMPERATURE))) {
|
||||
ResponseAppend_P(PSTR(",\"" D_JSON_TEMPERATURE_UNIT "\":\"%c\""), TempUnit());
|
||||
}
|
||||
if ((strstr_P(TasmotaGlobal.mqtt_data, PSTR(D_JSON_SPEED)) != nullptr) && Settings.flag2.speed_conversion) {
|
||||
if (ResponseContains_P(PSTR(D_JSON_SPEED)) && Settings.flag2.speed_conversion) {
|
||||
ResponseAppend_P(PSTR(",\"" D_JSON_SPEED_UNIT "\":\"%s\""), SpeedUnit().c_str());
|
||||
}
|
||||
ResponseJsonEnd();
|
||||
@ -1109,10 +1109,11 @@ void Every250mSeconds(void)
|
||||
#endif // USE_ARILUX_RF
|
||||
TasmotaGlobal.ota_state_flag = 92;
|
||||
ota_result = 0;
|
||||
char full_ota_url[200];
|
||||
ota_retry_counter--;
|
||||
if (ota_retry_counter) {
|
||||
char ota_url[TOPSZ];
|
||||
strlcpy(TasmotaGlobal.mqtt_data, GetOtaUrl(ota_url, sizeof(ota_url)), sizeof(TasmotaGlobal.mqtt_data));
|
||||
strlcpy(full_ota_url, GetOtaUrl(ota_url, sizeof(ota_url)), sizeof(full_ota_url));
|
||||
#ifdef ESP8266
|
||||
#ifndef FIRMWARE_MINIMAL
|
||||
if (RtcSettings.ota_loader) {
|
||||
@ -1132,10 +1133,10 @@ void Every250mSeconds(void)
|
||||
// Replace http://192.168.2.17:80/api/arduino/tasmota.bin with http://192.168.2.17:80/api/arduino/tasmota-minimal.bin
|
||||
// Replace http://192.168.2.17/api/arduino/tasmota.bin.gz with http://192.168.2.17/api/arduino/tasmota-minimal.bin.gz
|
||||
|
||||
char *bch = strrchr(TasmotaGlobal.mqtt_data, '/'); // Only consider filename after last backslash prevent change of urls having "-" in it
|
||||
if (bch == nullptr) { bch = TasmotaGlobal.mqtt_data; } // No path found so use filename only
|
||||
char *bch = strrchr(full_ota_url, '/'); // Only consider filename after last backslash prevent change of urls having "-" in it
|
||||
if (bch == nullptr) { bch = full_ota_url; } // No path found so use filename only
|
||||
char *ech = strchr(bch, '.'); // Find file type in filename (none, .ino.bin, .ino.bin.gz, .bin, .bin.gz or .gz)
|
||||
if (ech == nullptr) { ech = TasmotaGlobal.mqtt_data + strlen(TasmotaGlobal.mqtt_data); } // Point to '/0' at end of mqtt_data becoming an empty string
|
||||
if (ech == nullptr) { ech = full_ota_url + strlen(full_ota_url); } // Point to '/0' at end of mqtt_data becoming an empty string
|
||||
|
||||
//AddLog(LOG_LEVEL_DEBUG, PSTR("OTA: File type [%s]"), ech);
|
||||
|
||||
@ -1145,22 +1146,22 @@ void Every250mSeconds(void)
|
||||
char *pch = strrchr(bch, '-'); // Find last dash (-) and ignore remainder - handles tasmota-DE
|
||||
if (pch == nullptr) { pch = ech; } // No dash so ignore filetype
|
||||
*pch = '\0'; // mqtt_data = http://domus1:80/api/arduino/tasmota
|
||||
snprintf_P(TasmotaGlobal.mqtt_data, sizeof(TasmotaGlobal.mqtt_data), PSTR("%s-" D_JSON_MINIMAL "%s"), TasmotaGlobal.mqtt_data, ota_url_type); // Minimal filename must be filename-minimal
|
||||
snprintf_P(full_ota_url, sizeof(full_ota_url), PSTR("%s-" D_JSON_MINIMAL "%s"), full_ota_url, ota_url_type); // Minimal filename must be filename-minimal
|
||||
}
|
||||
#endif // FIRMWARE_MINIMAL
|
||||
if (ota_retry_counter < OTA_ATTEMPTS / 2) {
|
||||
if (StrCaseStr_P(TasmotaGlobal.mqtt_data, PSTR(".gz"))) {
|
||||
if (StrCaseStr_P(full_ota_url, PSTR(".gz"))) {
|
||||
ota_retry_counter = 1;
|
||||
} else {
|
||||
strcat_P(TasmotaGlobal.mqtt_data, PSTR(".gz"));
|
||||
strcat_P(full_ota_url, PSTR(".gz"));
|
||||
}
|
||||
}
|
||||
#endif // ESP8266
|
||||
char version[50];
|
||||
snprintf_P(version, sizeof(version), PSTR("%s%s"), TasmotaGlobal.version, TasmotaGlobal.image_name);
|
||||
AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_UPLOAD "%s %s"), TasmotaGlobal.mqtt_data, version);
|
||||
AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_UPLOAD "%s %s"), full_ota_url, version);
|
||||
WiFiClient OTAclient;
|
||||
ota_result = (HTTP_UPDATE_FAILED != ESPhttpUpdate.update(OTAclient, TasmotaGlobal.mqtt_data, version));
|
||||
ota_result = (HTTP_UPDATE_FAILED != ESPhttpUpdate.update(OTAclient, full_ota_url, version));
|
||||
if (!ota_result) {
|
||||
#ifndef FIRMWARE_MINIMAL
|
||||
int ota_error = ESPhttpUpdate.getLastError();
|
||||
|
@ -342,6 +342,8 @@ void setup(void) {
|
||||
}
|
||||
}
|
||||
|
||||
memcpy_P(TasmotaGlobal.version, VERSION_MARKER, 1); // Dummy for compiler saving VERSION_MARKER
|
||||
|
||||
snprintf_P(TasmotaGlobal.version, sizeof(TasmotaGlobal.version), PSTR("%d.%d.%d"), VERSION >> 24 & 0xff, VERSION >> 16 & 0xff, VERSION >> 8 & 0xff); // Release version 6.3.0
|
||||
if (VERSION & 0xff) { // Development or patched version 6.3.0.10
|
||||
snprintf_P(TasmotaGlobal.version, sizeof(TasmotaGlobal.version), PSTR("%s.%d"), TasmotaGlobal.version, VERSION & 0xff);
|
||||
@ -378,8 +380,6 @@ void setup(void) {
|
||||
AddLog(LOG_LEVEL_INFO, PSTR(D_WARNING_MINIMAL_VERSION));
|
||||
#endif // FIRMWARE_MINIMAL
|
||||
|
||||
memcpy_P(TasmotaGlobal.mqtt_data, VERSION_MARKER, 1); // Dummy for compiler saving VERSION_MARKER
|
||||
|
||||
#ifdef USE_ARDUINO_OTA
|
||||
ArduinoOTAInit();
|
||||
#endif // USE_ARDUINO_OTA
|
||||
|
@ -3029,16 +3029,15 @@ int WebSend(char *buffer)
|
||||
#ifdef USE_WEBSEND_RESPONSE
|
||||
// Return received data to the user - Adds 900+ bytes to the code
|
||||
const char* read = http.getString().c_str(); // File found at server - may need lot of ram or trigger out of memory!
|
||||
uint32_t j = 0;
|
||||
char text = '.';
|
||||
while (text != '\0') {
|
||||
text = *read++;
|
||||
if (text > 31) { // Remove control characters like linefeed
|
||||
TasmotaGlobal.mqtt_data[j++] = text;
|
||||
if (j == sizeof(TasmotaGlobal.mqtt_data) -2) { break; }
|
||||
ResponseClear();
|
||||
char text[2] = { 0 };
|
||||
text[0] = '.';
|
||||
while (text[0] != '\0') {
|
||||
text[0] = *read++;
|
||||
if (text[0] > 31) { // Remove control characters like linefeed
|
||||
if (ResponseAppend_P(text) == ResponseSize()) { break; };
|
||||
}
|
||||
}
|
||||
TasmotaGlobal.mqtt_data[j] = '\0';
|
||||
#ifdef USE_SCRIPT
|
||||
extern uint8_t tasm_cmd_activ;
|
||||
// recursive call must be possible in this case
|
||||
|
@ -1289,12 +1289,11 @@ void CmndPublish(void) {
|
||||
strlcpy(stemp1, mqtt_part, sizeof(stemp1));
|
||||
ReplaceChar(stemp1, '#', ' ');
|
||||
if ((payload_part != nullptr) && strlen(payload_part)) {
|
||||
strlcpy(TasmotaGlobal.mqtt_data, payload_part, sizeof(TasmotaGlobal.mqtt_data));
|
||||
Response_P(payload_part);
|
||||
} else {
|
||||
ResponseClear();
|
||||
}
|
||||
MqttPublish(stemp1, (XdrvMailbox.index == 2));
|
||||
// ResponseCmndDone();
|
||||
ResponseClear();
|
||||
}
|
||||
}
|
||||
|
@ -278,7 +278,7 @@ void IrReceiveCheck(void)
|
||||
prev_number = true;
|
||||
}
|
||||
ir_high = !ir_high;
|
||||
if (strlen(TasmotaGlobal.mqtt_data) > sizeof(TasmotaGlobal.mqtt_data) - 40) { break; } // Quit if char string becomes too long
|
||||
if (ResponseLength() > ResponseSize()) - 40) { break; } // Quit if char string becomes too long
|
||||
}
|
||||
uint16_t extended_length = getCorrectedRawLength(&results);
|
||||
ResponseAppend_P(PSTR("\",\"" D_JSON_IR_RAWDATA "Info\":[%d,%d,%d]"), extended_length, i -1, results.overflow);
|
||||
|
@ -307,7 +307,7 @@ void IrReceiveCheck(void)
|
||||
prev_number = true;
|
||||
}
|
||||
ir_high = !ir_high;
|
||||
if (strlen(TasmotaGlobal.mqtt_data) > sizeof(TasmotaGlobal.mqtt_data) - 40) { break; } // Quit if char string becomes too long
|
||||
if (ResponseLength() > ResponseSize()) - 40) { break; } // Quit if char string becomes too long
|
||||
}
|
||||
uint16_t extended_length = getCorrectedRawLength(&results);
|
||||
ResponseAppend_P(PSTR("\",\"" D_JSON_IR_RAWDATA "Info\":[%d,%d,%d]"), extended_length, i -1, results.overflow);
|
||||
|
@ -2139,10 +2139,7 @@ void CmndRule(void)
|
||||
rule = rule.substring(0, MAX_RULE_SIZE);
|
||||
rule += F("...");
|
||||
}
|
||||
// snprintf_P (TasmotaGlobal.mqtt_data, sizeof(TasmotaGlobal.mqtt_data), PSTR("{\"%s%d\":{\"State\":\"%s\",\"Once\":\"%s\",\"StopOnError\":\"%s\",\"Free\":%d,\"Rules\":\"%s\"}}"),
|
||||
// XdrvMailbox.command, index, GetStateText(bitRead(Settings.rule_enabled, index -1)), GetStateText(bitRead(Settings.rule_once, index -1)),
|
||||
// GetStateText(bitRead(Settings.rule_stop, index -1)), sizeof(Settings.rules[index -1]) - strlen(Settings.rules[index -1]) -1, Settings.rules[index -1]);
|
||||
snprintf_P (TasmotaGlobal.mqtt_data, sizeof(TasmotaGlobal.mqtt_data), PSTR("{\"%s%d\":{\"State\":\"%s\",\"Once\":\"%s\",\"StopOnError\":\"%s\",\"Length\":%d,\"Free\":%d,\"Rules\":\"%s\"}}"),
|
||||
Response_P(PSTR("{\"%s%d\":{\"State\":\"%s\",\"Once\":\"%s\",\"StopOnError\":\"%s\",\"Length\":%d,\"Free\":%d,\"Rules\":\"%s\"}}"),
|
||||
XdrvMailbox.command, index, GetStateText(bitRead(Settings.rule_enabled, index -1)), GetStateText(bitRead(Settings.rule_once, index -1)),
|
||||
GetStateText(bitRead(Settings.rule_stop, index -1)),
|
||||
rule_len, MAX_RULE_SIZE - GetRuleLenStorage(index - 1),
|
||||
|
@ -6040,7 +6040,7 @@ bool ScriptCommand(void) {
|
||||
} else {
|
||||
if ('>' == XdrvMailbox.data[0]) {
|
||||
// execute script
|
||||
snprintf_P (TasmotaGlobal.mqtt_data, sizeof(TasmotaGlobal.mqtt_data), PSTR("{\"%s\":\"%s\"}"), command,XdrvMailbox.data);
|
||||
Response_P(PSTR("{\"%s\":\"%s\"}"), command, XdrvMailbox.data);
|
||||
if (bitRead(Settings.rule_enabled, 0)) {
|
||||
for (uint8_t count = 0; count<XdrvMailbox.data_len; count++) {
|
||||
if (XdrvMailbox.data[count]==';') XdrvMailbox.data[count] = '\n';
|
||||
@ -6059,15 +6059,15 @@ bool ScriptCommand(void) {
|
||||
if (glob_script_mem.glob_error==1) {
|
||||
// was string, not number
|
||||
GetStringArgument(lp, OPER_EQU, str, 0);
|
||||
snprintf_P (TasmotaGlobal.mqtt_data, sizeof(TasmotaGlobal.mqtt_data), PSTR("{\"script\":{\"%s\":\"%s\"}}"), lp, str);
|
||||
Response_P(PSTR("{\"script\":{\"%s\":\"%s\"}}"), lp, str);
|
||||
} else {
|
||||
dtostrfd(fvar, 6, str);
|
||||
snprintf_P (TasmotaGlobal.mqtt_data, sizeof(TasmotaGlobal.mqtt_data), PSTR("{\"script\":{\"%s\":%s}}"), lp, str);
|
||||
Response_P(PSTR("{\"script\":{\"%s\":%s}}"), lp, str);
|
||||
}
|
||||
}
|
||||
return serviced;
|
||||
}
|
||||
snprintf_P (TasmotaGlobal.mqtt_data, sizeof(TasmotaGlobal.mqtt_data), PSTR("{\"%s\":\"%s\",\"Free\":%d}"),command, GetStateText(bitRead(Settings.rule_enabled, 0)), glob_script_mem.script_size - strlen(glob_script_mem.script_ram));
|
||||
Response_P(PSTR("{\"%s\":\"%s\",\"Free\":%d}"), command, GetStateText(bitRead(Settings.rule_enabled, 0)), glob_script_mem.script_size - strlen(glob_script_mem.script_ram));
|
||||
#ifdef SUPPORT_MQTT_EVENT
|
||||
} else if (CMND_SUBSCRIBE == command_code) { //MQTT Subscribe command. Subscribe <Event>, <Topic> [, <Key>]
|
||||
String result = ScriptSubscribe(XdrvMailbox.data, XdrvMailbox.data_len);
|
||||
|
@ -362,8 +362,8 @@ void TryResponseAppend_P(const char *format, ...)
|
||||
char dummy[2];
|
||||
int dlen = vsnprintf_P(dummy, 1, format, args);
|
||||
|
||||
int mlen = strlen(TasmotaGlobal.mqtt_data);
|
||||
int slen = sizeof(TasmotaGlobal.mqtt_data) - 1 - mlen;
|
||||
int mlen = ResponseLength();
|
||||
int slen = ResponseSize() - 1 - mlen;
|
||||
if (dlen >= slen)
|
||||
{
|
||||
AddLog_P(LOG_LEVEL_ERROR, PSTR("%s (%u/%u):"), kHAssError1, dlen, slen);
|
||||
|
@ -299,7 +299,7 @@ String TelegramExecuteCommand(const char *svalue) {
|
||||
char* JSON = (char*)memchr(line, '{', len);
|
||||
if (JSON) { // Is it a JSON message (and not only [15:26:08 MQT: stat/wemos5/POWER = O])
|
||||
size_t JSONlen = len - (JSON - line);
|
||||
if (JSONlen > sizeof(TasmotaGlobal.mqtt_data)) { JSONlen = sizeof(TasmotaGlobal.mqtt_data); }
|
||||
if (JSONlen > ResponseSize()) { JSONlen = ResponseSize(); }
|
||||
char stemp[JSONlen];
|
||||
strlcpy(stemp, JSON +1, JSONlen -2);
|
||||
if (cflg) { response += F(","); }
|
||||
@ -401,8 +401,11 @@ void CmndTmState(void) {
|
||||
}
|
||||
}
|
||||
}
|
||||
snprintf_P (TasmotaGlobal.mqtt_data, sizeof(TasmotaGlobal.mqtt_data), PSTR("{\"%s\":{\"Send\":\"%s\",\"Receive\":\"%s\",\"Echo\":\"%s\"}}"),
|
||||
XdrvMailbox.command, GetStateText(Settings.sbflag1.telegram_send_enable), GetStateText(Settings.sbflag1.telegram_recv_enable), GetStateText(Settings.sbflag1.telegram_echo_enable));
|
||||
Response_P(PSTR("{\"%s\":{\"Send\":\"%s\",\"Receive\":\"%s\",\"Echo\":\"%s\"}}"),
|
||||
XdrvMailbox.command,
|
||||
GetStateText(Settings.sbflag1.telegram_send_enable),
|
||||
GetStateText(Settings.sbflag1.telegram_recv_enable),
|
||||
GetStateText(Settings.sbflag1.telegram_echo_enable));
|
||||
}
|
||||
|
||||
void CmndTmPoll(void) {
|
||||
|
@ -208,8 +208,7 @@ bool TimepropCommand()
|
||||
if (XdrvMailbox.index >=0 && XdrvMailbox.index < TIMEPROP_NUM_OUTPUTS) {
|
||||
timeprops[XdrvMailbox.index].setPower( atof(XdrvMailbox.data), Tprop.current_time_secs );
|
||||
}
|
||||
snprintf_P(TasmotaGlobal.mqtt_data, sizeof(TasmotaGlobal.mqtt_data), PSTR("{\"" D_CMND_TIMEPROP D_CMND_TIMEPROP_SETPOWER "%d\":\"%s\"}"),
|
||||
XdrvMailbox.index, XdrvMailbox.data);
|
||||
Response_P(PSTR("{\"" D_CMND_TIMEPROP D_CMND_TIMEPROP_SETPOWER "%d\":\"%s\"}"), XdrvMailbox.index, XdrvMailbox.data);
|
||||
}
|
||||
else {
|
||||
serviced = false;
|
||||
|
@ -60,7 +60,7 @@ extern "C" {
|
||||
if (top == 4) {
|
||||
retain = be_tobool(vm, 4);
|
||||
}
|
||||
strlcpy(TasmotaGlobal.mqtt_data, payload, sizeof(TasmotaGlobal.mqtt_data));
|
||||
Response_P(payload);
|
||||
MqttPublish(topic, retain);
|
||||
be_return(vm); // Return
|
||||
}
|
||||
|
@ -206,10 +206,7 @@ void ADPSCallback(uint8_t phase, char * label)
|
||||
phase = 1;
|
||||
}
|
||||
|
||||
Response_P(PSTR("{"));
|
||||
ResponseAppend_P(TasmotaGlobal.mqtt_data, sizeof(TasmotaGlobal.mqtt_data), PSTR("\"TIC\":{\"%s\":%i}"), label, phase );
|
||||
ResponseJsonEnd();
|
||||
|
||||
Response_P(PSTR("{\"TIC\":{\"%s\":%i}}"), label, phase );
|
||||
// Publish adding ADCO serial number into the topic
|
||||
MqttPublishPrefixTopicRulesProcess_P(TELE, PSTR(D_RSLT_SENSOR), false);
|
||||
|
||||
|
@ -2691,10 +2691,10 @@ void MI32ShowSomeSensors(){
|
||||
p = &MIBLEsensors[MI32.mqttCurrentSlot];
|
||||
|
||||
MI32GetOneSensorJson(MI32.mqttCurrentSlot, (maxcnt == 1));
|
||||
int mlen = strlen(TasmotaGlobal.mqtt_data);
|
||||
int mlen = ResponseLength();
|
||||
|
||||
// if we ran out of room, leave here.
|
||||
if (sizeof(TasmotaGlobal.mqtt_data) - mlen < 100){
|
||||
if (ResponseSize() - mlen < 100){
|
||||
MI32.mqttCurrentSlot++;
|
||||
break;
|
||||
}
|
||||
@ -3055,10 +3055,10 @@ void MI32ShowTriggeredSensors(){
|
||||
ResponseAppend_P(PSTR(","));
|
||||
// hide sensor name if HASS or option6
|
||||
MI32GetOneSensorJson(sensor, (maxcnt == 1));
|
||||
int mlen = strlen(TasmotaGlobal.mqtt_data);
|
||||
int mlen = ResponseLength();
|
||||
|
||||
// if we ran out of room, leave here.
|
||||
if (sizeof(TasmotaGlobal.mqtt_data) - mlen < 100){
|
||||
if (ResponseSize() - mlen < 100){
|
||||
sensor++;
|
||||
break;
|
||||
}
|
||||
|
@ -518,11 +518,7 @@ void sns_opentherm_flags_cmd(void)
|
||||
int mode = Settings.ot_flags & (uint8_t)mask;
|
||||
if (mode > 0)
|
||||
{
|
||||
if (addComma)
|
||||
{
|
||||
snprintf_P(TasmotaGlobal.mqtt_data, sizeof(TasmotaGlobal.mqtt_data), PSTR("%s,"), TasmotaGlobal.mqtt_data);
|
||||
}
|
||||
snprintf_P(TasmotaGlobal.mqtt_data, sizeof(TasmotaGlobal.mqtt_data), PSTR("%s%s"), TasmotaGlobal.mqtt_data, sns_opentherm_flag_text(mode));
|
||||
ResponseAppend_P(PSTR("%s%s"), (addComma)?",":"", sns_opentherm_flag_text(mode));
|
||||
addComma = true;
|
||||
}
|
||||
}
|
||||
|
@ -65,7 +65,7 @@ void Esp32SensorShow(bool json) {
|
||||
#endif // CONFIG_IDF_TARGET_ESP32
|
||||
|
||||
if (json) {
|
||||
bool temperature_present = (strstr_P(TasmotaGlobal.mqtt_data, PSTR(D_JSON_TEMPERATURE)) != nullptr);
|
||||
bool temperature_present = (ResponseContains_P(PSTR(D_JSON_TEMPERATURE)));
|
||||
ResponseAppend_P(PSTR(",\"ESP32\":{\"" D_JSON_TEMPERATURE "\":%*_f"), Settings.flag2.temperature_resolution, &t);
|
||||
|
||||
#if CONFIG_IDF_TARGET_ESP32
|
||||
|
Loading…
x
Reference in New Issue
Block a user