mirror of https://github.com/arendst/Tasmota.git
Add command ``SspmEnergyTotal<relay>``
Add command ``SspmEnergyTotal<relay>`` to (p)reset Sonoff SPM total energy without today's energy
This commit is contained in:
parent
d7664c02a7
commit
62458e3676
|
@ -12,12 +12,13 @@ All notable changes to this project will be documented in this file.
|
|||
- Command ``Json {<Tasmota commands>}`` to enable input of any command as JSON tokens (#14568)
|
||||
- Rule variable %color% (#14572)
|
||||
- Command ``SspmDisplay 1`` to display Sonoff SPM energy data in GUI for relays powered on only
|
||||
- Command ``SspmHistory<relay>`` to retrieve daily energy of last six month (as defined by ARM firmware)
|
||||
- Command ``SspmEnergyTotal<relay>`` to (p)reset Sonoff SPM total energy without today's energy
|
||||
- Command ``SspmHistory<relay>`` to retrieve Sonoff SPM daily energy up to last six month (as defined by ARM firmware)
|
||||
- Command ``SspmIAmHere<relay>`` to (faintly) blink Sonoff SPM-4Relay module error light of requested relay
|
||||
- Command ``SspmLog<relay> [x]`` to retrieve relay power state change and cause logging
|
||||
- Command ``SspmLog<relay> [x]`` to retrieve Sonoff SPM relay power state change and cause logging
|
||||
- Command ``SspmScan`` to rescan Sonoff SPM modbus
|
||||
- Support for MQ analog sensor for air quality by Francesco Adriani (#14581)
|
||||
- PWM auto-phasing for lights by default (new behavior) unless ``SetOption134 1``
|
||||
- Command ``SetOption134 1`` to disable PWM auto-phasing for lights by default (new behavior) (#14590)
|
||||
|
||||
### Changed
|
||||
- BME68x-Sensor-API library from v3.5.9 to v4.4.7
|
||||
|
|
|
@ -102,16 +102,18 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo
|
|||
|
||||
## Changelog v2022.01.3
|
||||
### Added
|
||||
- Command ``Json {<Tasmota commands>}`` to enable input of any command as JSON tokens [#14568](https://github.com/arendst/Tasmota/issues/14568)
|
||||
- Command ``SetOption44 1..100`` to set base tolerance percentage for matching incoming IR messages (default 25, max 100) [#14555](https://github.com/arendst/Tasmota/issues/14555)
|
||||
- Command ``SetOption134 1`` to disable PWM auto-phasing for lights by default (new behavior) [#14590](https://github.com/arendst/Tasmota/issues/14590)
|
||||
- Command ``SSerialConfig <serialconfig>`` to change Serial Bridge configuration
|
||||
- Command ``WebTime <start_pos>,<end_pos>`` to show part of date and/or time in web gui based on "2017-03-07T11:08:02-07:00"
|
||||
- Command ``SspmDisplay 1`` to display Sonoff SPM energy data in GUI for relays powered on only
|
||||
- Command ``SspmHistory<relay>`` to retrieve daily energy of last six month (as defined by ARM firmware)
|
||||
- Command ``SspmEnergyTotal<relay>`` to (p)reset Sonoff SPM total energy without today's energy
|
||||
- Command ``SspmHistory<relay>`` to retrieve Sonoff SPM daily energy up to last six month (as defined by ARM firmware)
|
||||
- Command ``SspmIAmHere<relay>`` to (faintly) blink Sonoff SPM-4Relay module error light of requested relay
|
||||
- Command ``SspmLog<relay> [x]`` to retrieve relay power state change and cause logging
|
||||
- Command ``SspmLog<relay> [x]`` to retrieve Sonoff SPM relay power state change and cause logging
|
||||
- Command ``SspmMap 2,1,..`` to map Sonoff SPM scanned module to physical module [#14281](https://github.com/arendst/Tasmota/issues/14281)
|
||||
- Command ``SspmScan`` to rescan Sonoff SPM modbus
|
||||
- Command ``SetOption44 1..100`` to set base tolerance percentage for matching incoming IR messages (default 25, max 100) [#14555](https://github.com/arendst/Tasmota/issues/14555)
|
||||
- Command ``Json {<Tasmota commands>}`` to enable input of any command as JSON tokens [#14568](https://github.com/arendst/Tasmota/issues/14568)
|
||||
- Command ``WebTime <start_pos>,<end_pos>`` to show part of date and/or time in web gui based on "2017-03-07T11:08:02-07:00"
|
||||
- Commands for ESP32 ethernet configuration ``EthIpAddress``, ``EthGateway``, ``EthSubnetmask``, ``EthDnsServer1`` and ``EthDnsServer2`` [#14385](https://github.com/arendst/Tasmota/issues/14385)
|
||||
- Support for Eastron SDM230 modBus energy meter [#13443](https://github.com/arendst/Tasmota/issues/13443)
|
||||
- PWM Dimmer two button support [#13993](https://github.com/arendst/Tasmota/issues/13993)
|
||||
|
|
|
@ -102,8 +102,12 @@
|
|||
* relay = 0 to 127 Relays
|
||||
\*********************************************************************************************/
|
||||
|
||||
#ifndef SSPM_JSON_ENERGY_TODAY
|
||||
#define SSPM_JSON_ENERGY_TODAY // Show JSON energy today
|
||||
#endif
|
||||
#ifndef SSPM_JSON_ENERGY_YESTERDAY
|
||||
#define SSPM_JSON_ENERGY_YESTERDAY // Show JSON energy yesterday
|
||||
#endif
|
||||
|
||||
/*********************************************************************************************\
|
||||
* Fixed defines - Do not change
|
||||
|
@ -146,9 +150,9 @@
|
|||
|
||||
/*********************************************************************************************/
|
||||
|
||||
#define SSPM_FINAL_MAX_MODULES 32 // Max number of SPM-4RELAY units for a total of 128 relays
|
||||
#define SSPM_TOTAL_MODULES 32 // Max number of SPM-4RELAY units for a total of 128 relays
|
||||
|
||||
const uint32_t SSPM_VERSION = 0x01010101; // Latest driver version (See settings deltas below)
|
||||
const uint32_t SSPM_VERSION = 0x01010103; // Latest driver version (See settings deltas below)
|
||||
|
||||
enum SspmMachineStates { SPM_NONE, // Do nothing
|
||||
SPM_WAIT, // Wait 100ms
|
||||
|
@ -172,7 +176,8 @@ TasmotaSerial *SspmSerial;
|
|||
typedef struct {
|
||||
uint32_t crc32; // To detect file changes
|
||||
uint32_t version; // To detect driver function changes
|
||||
uint16_t module_map[SSPM_FINAL_MAX_MODULES]; // Max possible SPM relay modules
|
||||
uint16_t module_map[SSPM_TOTAL_MODULES]; // Max possible SPM relay modules
|
||||
float energy_total[SSPM_TOTAL_MODULES][4]; // Total energy in hecto kWh (30.12 kwH is stored as 3012)
|
||||
} tSspmSettings;
|
||||
|
||||
typedef struct {
|
||||
|
@ -275,7 +280,6 @@ void SSPMSettingsLoad(void) {
|
|||
|
||||
void SSPMSettingsSave(void) {
|
||||
// Called from FUNC_SAVE_SETTINGS every SaveData second and at restart
|
||||
|
||||
if (SSPMSettingsCrc32() != Sspm->Settings.crc32) {
|
||||
// Try to save file /.drvset086
|
||||
Sspm->Settings.crc32 = SSPMSettingsCrc32();
|
||||
|
@ -870,26 +874,30 @@ void SSPMHandleReceivedData(void) {
|
|||
}
|
||||
}
|
||||
|
||||
float energy_today = 0;
|
||||
float energy_yesterday = 0;
|
||||
float last_energy_today = Sspm->energy_yesterday[module][channel];
|
||||
float energy_total = 0;
|
||||
|
||||
for (uint32_t i = 0; i <= entries; i++) {
|
||||
float today_energy = SspmBuffer[41 + (i*2)] + (float)SspmBuffer[42 + (i*2)] / 100; // x.xxkWh
|
||||
if (112.30 == today_energy) { today_energy = 0; } // Unknown why sometimes 0x701E (=112.30kWh) pops up
|
||||
float energy = SspmBuffer[41 + (i*2)] + (float)SspmBuffer[42 + (i*2)] / 100; // x.xxkWh
|
||||
if (112.30 == energy) { energy = 0; } // Unknown why sometimes 0x701E (=112.30kWh) pops up
|
||||
|
||||
if (Sspm->history_relay < 255) {
|
||||
ResponseAppend_P(PSTR("%s%*_f"), (i)?",":"", Settings->flag2.energy_resolution, &today_energy);
|
||||
ResponseAppend_P(PSTR("%s%*_f"), (i)?",":"", Settings->flag2.energy_resolution, &energy);
|
||||
}
|
||||
|
||||
if (0 == i) { energy_today = today_energy; }
|
||||
if (1 == i) { energy_yesterday = today_energy; }
|
||||
energy_total += today_energy;
|
||||
if (0 == i) {
|
||||
Sspm->energy_today[module][channel] = energy;
|
||||
} else {
|
||||
if (1 == i) { Sspm->energy_yesterday[module][channel] = energy; }
|
||||
energy_total += energy;
|
||||
}
|
||||
}
|
||||
|
||||
Sspm->energy_today[module][channel] = energy_today;
|
||||
Sspm->energy_yesterday[module][channel] = energy_yesterday;
|
||||
Sspm->energy_total[module][channel] = energy_total; // x.xxkWh
|
||||
if (0 == Sspm->Settings.energy_total[module][channel]) { // Initial save
|
||||
Sspm->Settings.energy_total[module][channel] = energy_total;
|
||||
}
|
||||
if (Sspm->energy_today[module][channel] < last_energy_today) { // Daily incremental save
|
||||
Sspm->Settings.energy_total[module][channel] += last_energy_today;
|
||||
}
|
||||
Sspm->energy_total[module][channel] = Sspm->Settings.energy_total[module][channel] + Sspm->energy_today[module][channel];
|
||||
|
||||
if (Sspm->history_relay < 255) {
|
||||
ResponseAppend_P(PSTR("]}"));
|
||||
|
@ -1522,10 +1530,25 @@ void SSPMEnergyShow(bool json) {
|
|||
\*********************************************************************************************/
|
||||
|
||||
const char kSSPMCommands[] PROGMEM = "SSPM|" // Prefix
|
||||
"Log|Energy|History|Scan|IamHere|Display|Reset|Map" ;
|
||||
"Log|Energy|History|Scan|IamHere|Display|Reset|Map|" D_CMND_ENERGYTOTAL;
|
||||
|
||||
void (* const SSPMCommand[])(void) PROGMEM = {
|
||||
&CmndSSPMLog, &CmndSSPMEnergy, &CmndSSPMHistory, &CmndSSPMScan, &CmndSSPMIamHere, &CmndSSPMDisplay, &CmndSSPMReset, &CmndSSPMMap };
|
||||
&CmndSSPMLog, &CmndSSPMEnergy, &CmndSSPMHistory, &CmndSSPMScan, &CmndSSPMIamHere,
|
||||
&CmndSSPMDisplay, &CmndSSPMReset, &CmndSSPMMap, &CmndSpmEnergyTotal };
|
||||
|
||||
void CmndSpmEnergyTotal(void) {
|
||||
// Reset Energy Total
|
||||
// SspmEnergyTotal<relay> 0 - Set total energy from midnight with sum of last month history
|
||||
// SspmEnergyTotal<relay> 4.23 - Set total energy from midnight (without today's energy)
|
||||
uint32_t relay = XdrvMailbox.index -1;
|
||||
uint32_t module = relay >> 2;
|
||||
uint32_t channel = relay & 0x03;
|
||||
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= TasmotaGlobal.devices_present) && XdrvMailbox.data_len) {
|
||||
Sspm->Settings.energy_total[module][channel] = CharToFloat(XdrvMailbox.data);
|
||||
Sspm->energy_total[module][channel] = Sspm->Settings.energy_total[module][channel] + Sspm->energy_today[module][channel];
|
||||
}
|
||||
ResponseCmndFloat(Sspm->energy_total[module][channel], Settings->flag2.energy_resolution);
|
||||
}
|
||||
|
||||
void CmndSSPMLog(void) {
|
||||
// SspmLog<relay> - Report from up to 29 latest log entries
|
||||
|
|
Loading…
Reference in New Issue