Add command `IfxSensor 1` to send non-teleperiod data to influxdb

This commit is contained in:
Theo Arends 2022-04-05 23:14:41 +02:00
parent eacecb2339
commit c84f5fe607
5 changed files with 21 additions and 6 deletions

View File

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

View File

@ -110,6 +110,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo
- Command ``SspmMap 0`` to reset Sonoff SPM default mapping
- Command ``TcpConnect <port><ip_address>`` to add client connection mode [#14874](https://github.com/arendst/Tasmota/issues/14874)
- Command ``RfTimeout 100..60000`` to disable duplicate RfReceive. Default 1000 [#15061](https://github.com/arendst/Tasmota/issues/15061)
- Command ``IfxSensor 1`` to send non-teleperiod data to influxdb
- Commands ``Sensor12 D0 .. D5, S0 .. S5`` allowing differential or single-ended modes [#15001](https://github.com/arendst/Tasmota/issues/15001)
- NeoPool commands ``NPpHMin``, ``NPpHMax``, ``NPpH``, ``NPRedox``, ``NPHydrolysis``, ``NPIonization``, ``NPChlorine`` and ``NPControl`` [#15015](https://github.com/arendst/Tasmota/issues/15015)
- NeoPool system voltages display
@ -120,7 +121,6 @@ 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)
- 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
- Non-teleperiod data to influxdb
- ESP32 Berry always enable rules
- ESP32 Berry bootloop protection
- ESP32 support for BLE Mi scale V1 [#13517](https://github.com/arendst/Tasmota/issues/13517)

View File

@ -252,7 +252,7 @@ typedef union {
uint32_t influxdb_state : 1; // bit 7 (v9.5.0.5) - CMND_IFX - Enable influxdb support
uint32_t sspm_display : 1; // bit 8 (v10.0.0.4) - CMND_SSPMDISPLAY - Enable gui display of powered on relays only
uint32_t local_ntp_server : 1; // bit 9 (v11.0.0.4) - CMND_RTCNTPSERVER - Enable local NTP server
uint32_t spare10 : 1; // bit 10
uint32_t influxdb_sensor : 1; // bit 10 (v11.0.0.5) - CMND_IFXSENSOR - Enable sensor support in addition to teleperiod support
uint32_t spare11 : 1; // bit 11
uint32_t spare12 : 1; // bit 12
uint32_t spare13 : 1; // bit 13

View File

@ -38,6 +38,7 @@
* IfxOrg - Set Influxdb v2 and organization
* IfxToken - Set Influxdb v2 and token
* IfxPeriod - Set Influxdb period. If not set (or 0), use Teleperiod
* IfxSensor - Set Influxdb sensor logging off (0) or on (1)
*
* Set influxdb update interval with command teleperiod
*
@ -365,6 +366,12 @@ void InfluxDbProcessJson(bool use_copy = false) {
}
}
void InfluxDbProcess(bool use_copy = false) {
if (Settings->sbflag1.influxdb_sensor) {
InfluxDbProcessJson(use_copy);
}
}
void InfluxDbPublishPowerState(uint32_t device) {
Response_P(PSTR("{\"power%d\":\"%d\"}"), device, bitRead(TasmotaGlobal.power, device -1));
InfluxDbProcessJson();
@ -419,6 +426,7 @@ void InfluxDbLoop(void) {
#define D_CMND_INFLUXDBDATABASE "Database"
#define D_CMND_INFLUXDBBUCKET "Bucket"
#define D_CMND_INFLUXDBPERIOD "Period"
#define D_CMND_INFLUXDBSENSOR "Sensor"
const char kInfluxDbCommands[] PROGMEM = D_PRFX_INFLUXDB "|" // Prefix
"|" D_CMND_INFLUXDBLOG "|"
@ -426,7 +434,7 @@ const char kInfluxDbCommands[] PROGMEM = D_PRFX_INFLUXDB "|" // Prefix
D_CMND_INFLUXDBUSER "|" D_CMND_INFLUXDBORG "|"
D_CMND_INFLUXDBPASSWORD "|" D_CMND_INFLUXDBTOKEN "|"
D_CMND_INFLUXDBDATABASE "|" D_CMND_INFLUXDBBUCKET "|"
D_CMND_INFLUXDBPERIOD;
D_CMND_INFLUXDBPERIOD "|" D_CMND_INFLUXDBSENSOR;
void (* const InfluxCommand[])(void) PROGMEM = {
&CmndInfluxDbState, &CmndInfluxDbLog,
@ -434,7 +442,7 @@ void (* const InfluxCommand[])(void) PROGMEM = {
&CmndInfluxDbUser, &CmndInfluxDbUser,
&CmndInfluxDbPassword, &CmndInfluxDbPassword,
&CmndInfluxDbDatabase, &CmndInfluxDbDatabase,
&CmndInfluxDbPeriod };
&CmndInfluxDbPeriod, &CmndInfluxDbSensor };
void InfluxDbReinit(void) {
IFDB.init = false;
@ -459,6 +467,13 @@ void CmndInfluxDbState(void) {
}
}
void CmndInfluxDbSensor(void) {
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 1)) {
Settings->sbflag1.influxdb_sensor = XdrvMailbox.payload;
}
ResponseCmndStateText(Settings->sbflag1.influxdb_sensor);
}
void CmndInfluxDbLog(void) {
if ((XdrvMailbox.payload >= LOG_LEVEL_NONE) && (XdrvMailbox.payload <= LOG_LEVEL_DEBUG_MORE)) {
IFDB.log_level = XdrvMailbox.payload;

View File

@ -1095,7 +1095,7 @@ bool XdrvRulesProcess(bool teleperiod, const char* event) {
bool XdrvRulesProcess(bool teleperiod) {
#ifdef USE_INFLUXDB
if (!teleperiod) { // Only process ad-hoc data here
InfluxDbProcessJson(1); // Use a copy
InfluxDbProcess(1); // Use a copy
}
#endif