Prep ESP32 energy expansion

This commit is contained in:
Theo Arends 2023-01-27 16:41:55 +01:00
parent 5b977bf4e4
commit 0b81236110
2 changed files with 33 additions and 25 deletions

View File

@ -17,11 +17,17 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifdef ESP8266
//#ifdef ESP8266
#ifdef USE_ENERGY_SENSOR
#define USE_ENERGY_SENSOR_LEGACY
#endif // USE_ENERGY_SENSOR
//#endif // ESP8266
#ifdef USE_ENERGY_SENSOR_LEGACY
/*********************************************************************************************\
* Energy for ESP8266
* Energy for ESP8266 and legacy ESP32 with max three phases/channels using Settings from flash
\*********************************************************************************************/
//#warning **** USE_ENERGY_SENSOR_LEGACY ****
#define XDRV_03 3
#define XSNS_03 3
@ -1509,5 +1515,4 @@ bool Xsns03(uint32_t function)
return result;
}
#endif // USE_ENERGY_SENSOR
#endif // ESP8266
#endif // USE_ENERGY_SENSOR_V1

View File

@ -1,7 +1,7 @@
/*
xdrv_03_esp32_energy.ino - Energy sensor support for Tasmota
Copyright (C) 2021 Theo Arends
Copyright (C) 2023 Theo Arends
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -19,9 +19,15 @@
#ifdef ESP32
#ifdef USE_ENERGY_SENSOR
//#define USE_ENERGY_SENSOR_ESP32
#endif // USE_ENERGY_SENSOR
#endif // ESP32
#ifdef USE_ENERGY_SENSOR_ESP32
/*********************************************************************************************\
* Energy for ESP32
* Energy for ESP32 with max eight phases/channels using more RAM and Settings from filesystem
\*********************************************************************************************/
//#warning **** USE_ENERGY_SENSOR_ESP32 ****
#define XDRV_03 3
#define XSNS_03 3
@ -30,9 +36,7 @@
#define ENERGY_WATCHDOG 4 // Allow up to 4 seconds before deciding no valid data present
#undef ENERGY_MAX_PHASES
#define ENERGY_MAX_PHASES 4
#define ENERGY_MAX_PHASES_FUTURE 8
#define ENERGY_MAX_PHASES 8 // Support max eight phases/channels
#include <Ticker.h>
@ -88,17 +92,17 @@ typedef struct {
uint32_t spare4;
uint32_t spare5;
uint32_t power_calibration[ENERGY_MAX_PHASES_FUTURE];
uint32_t voltage_calibration[ENERGY_MAX_PHASES_FUTURE];
uint32_t current_calibration[ENERGY_MAX_PHASES_FUTURE];
uint32_t frequency_calibration[ENERGY_MAX_PHASES_FUTURE];
uint32_t power_calibration[ENERGY_MAX_PHASES];
uint32_t voltage_calibration[ENERGY_MAX_PHASES];
uint32_t current_calibration[ENERGY_MAX_PHASES];
uint32_t frequency_calibration[ENERGY_MAX_PHASES];
float energy_today_kWh[ENERGY_MAX_PHASES_FUTURE]; // Energy today in kWh - float allows up to 262143.99 kWh
float energy_yesterday_kWh[ENERGY_MAX_PHASES_FUTURE]; // Energy yesterday in kWh - float allows up to 262143.99 kWh
float energy_total_kWh[ENERGY_MAX_PHASES_FUTURE]; // Total energy in kWh - float allows up to 262143.99 kWh
float energy_export_kWh[ENERGY_MAX_PHASES_FUTURE]; // Export energy in kWh - float allows up to 262143.99 kWh
float energy_today_kWh[ENERGY_MAX_PHASES]; // Energy today in kWh - float allows up to 262143.99 kWh
float energy_yesterday_kWh[ENERGY_MAX_PHASES]; // Energy yesterday in kWh - float allows up to 262143.99 kWh
float energy_total_kWh[ENERGY_MAX_PHASES]; // Total energy in kWh - float allows up to 262143.99 kWh
float energy_export_kWh[ENERGY_MAX_PHASES]; // Export energy in kWh - float allows up to 262143.99 kWh
uint16_t power_delta[ENERGY_MAX_PHASES_FUTURE]; // PowerDelta
uint16_t power_delta[ENERGY_MAX_PHASES]; // PowerDelta
uint16_t tariff[4][2];
tEnergyUsage energy_usage;
@ -178,9 +182,9 @@ const uint16_t RTC_ENERGY_MEM_VALID = 0xA55A;
typedef struct {
uint16_t valid;
tEnergyUsage energy_usage;
float energy_today_kWh[ENERGY_MAX_PHASES_FUTURE];
float energy_total_kWh[ENERGY_MAX_PHASES_FUTURE];
float energy_export_kWh[ENERGY_MAX_PHASES_FUTURE];
float energy_today_kWh[ENERGY_MAX_PHASES];
float energy_total_kWh[ENERGY_MAX_PHASES];
float energy_export_kWh[ENERGY_MAX_PHASES];
} tRtcEnergySettings;
tRtcEnergySettings RtcEnergySettings;
static RTC_NOINIT_ATTR tRtcEnergySettings RtcDataEnergySettings;
@ -204,7 +208,7 @@ void EnergyRtcSettingsSave(void) {
memset(&RtcEnergySettings, 0, sizeof(RtcEnergySettings));
RtcEnergySettings.valid = RTC_ENERGY_MEM_VALID;
RtcEnergySettings.energy_usage = Energy->Settings.energy_usage;
for (uint32_t i = 0; i < ENERGY_MAX_PHASES_FUTURE; i++) {
for (uint32_t i = 0; i < ENERGY_MAX_PHASES; i++) {
RtcEnergySettings.energy_today_kWh[i] = Energy->Settings.energy_today_kWh[i];
RtcEnergySettings.energy_total_kWh[i] = Energy->Settings.energy_total_kWh[i];
RtcEnergySettings.energy_export_kWh[i] = Energy->Settings.energy_export_kWh[i];
@ -243,7 +247,7 @@ void EnergySettingsLoad(void) {
memset(&Energy->Settings, 0x00, sizeof(tEnergySettings));
Energy->Settings.version = XDRV_03_VERSION;
// Init any other parameter in struct
for (uint32_t i = 0; i < ENERGY_MAX_PHASES_FUTURE; i++) {
for (uint32_t i = 0; i < ENERGY_MAX_PHASES; i++) {
Energy->Settings.power_calibration[i] = Settings->energy_power_calibration;
Energy->Settings.voltage_calibration[i] = Settings->energy_voltage_calibration;;
Energy->Settings.current_calibration[i] = Settings->energy_current_calibration;;
@ -1658,5 +1662,4 @@ bool Xsns03(uint32_t function)
return result;
}
#endif // USE_ENERGY_SENSOR
#endif // ESP32
#endif // USE_ENERGY_SENSOR_ESP32