Add non-teleperiod data to influxdb

This commit is contained in:
Theo Arends 2022-04-05 21:55:05 +02:00
parent 345d011dd1
commit 8b98839729
4 changed files with 22 additions and 6 deletions

View File

@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file.
## [11.0.0.5] ## [11.0.0.5]
### Added ### Added
- Support for improv as used by esp-web-tools - Support for improv as used by esp-web-tools
- Non-teleperiod data to influxdb
### Changed ### Changed
- Remove support for Internet Explorer by allowing ECMAScript6 syntax using less JavaScript code bytes (#15280) - Remove support for Internet Explorer by allowing ECMAScript6 syntax using less JavaScript code bytes (#15280)

View File

@ -120,6 +120,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo
- Support for PCF85363 RTC as used in Shelly 3EM [#13515](https://github.com/arendst/Tasmota/issues/13515) - Support for PCF85363 RTC as used in Shelly 3EM [#13515](https://github.com/arendst/Tasmota/issues/13515)
- Full RTC chip integration and synchronisation when using UBX (=GPS), NTP or manual time - Full RTC chip integration and synchronisation when using UBX (=GPS), NTP or manual time
- NeoPool JSON modules, power module, cell info, chlorine, conductivity and ionization - NeoPool JSON modules, power module, cell info, chlorine, conductivity and ionization
- Non-teleperiod data to influxdb
- ESP32 Berry always enable rules - ESP32 Berry always enable rules
- ESP32 Berry bootloop protection - ESP32 Berry bootloop protection
- ESP32 support for BLE Mi scale V1 [#13517](https://github.com/arendst/Tasmota/issues/13517) - ESP32 support for BLE Mi scale V1 [#13517](https://github.com/arendst/Tasmota/issues/13517)

View File

@ -257,15 +257,19 @@ char* InfluxDbNumber(char* alternative, JsonParserToken value) {
return nullptr; return nullptr;
} }
void InfluxDbProcessJson(void) { void InfluxDbProcessJson(bool use_copy = false) {
if (!IFDB.init) { return; } if (!IFDB.init) { return; }
AddLog(IFDB.log_level, PSTR("IFX: Process %s"), ResponseData()); char *json_data = ResponseData();
if (use_copy) {
json_data = (char*)malloc(ResponseSize()+2);
if (!json_data) { return; }
strlcpy(json_data, ResponseData(), ResponseSize());
}
// String jsonStr = ResponseData(); // Make a copy before use AddLog(IFDB.log_level, PSTR("IFX: Process %s"), json_data);
// JsonParser parser((char *)jsonStr.c_str());
JsonParser parser((char *)ResponseData()); // Destroys ResponseData but saves heap space
JsonParser parser(json_data); // Destroys json_data
JsonParserObject root = parser.getRootObject(); JsonParserObject root = parser.getRootObject();
if (root) { if (root) {
char number[12]; // '1' to '255' char number[12]; // '1' to '255'
@ -355,6 +359,10 @@ void InfluxDbProcessJson(void) {
InfluxDbPostData(data.c_str()); InfluxDbPostData(data.c_str());
} }
} }
if (use_copy) {
free(json_data);
}
} }
void InfluxDbPublishPowerState(uint32_t device) { void InfluxDbPublishPowerState(uint32_t device) {

View File

@ -1093,8 +1093,14 @@ bool XdrvRulesProcess(bool teleperiod, const char* event) {
} }
bool XdrvRulesProcess(bool teleperiod) { bool XdrvRulesProcess(bool teleperiod) {
#ifdef USE_INFLUXDB
if (!teleperiod) { // Only process ad-hoc data here
InfluxDbProcessJson(1); // Use a copy
}
#endif
bool result = XdrvRulesProcess(teleperiod, ResponseData()); bool result = XdrvRulesProcess(teleperiod, ResponseData());
ResponseClear(); // Free heap space ResponseClear(); // Free heap space
return result; return result;
} }