Tariff command variant to force tariff - take 2 (#18112)

* tariff command variant to force tariff

* move to Settings + add esp8266

* added tariff-forced to changelog
This commit is contained in:
Barbudor 2023-03-04 21:58:03 +01:00 committed by GitHub
parent 66b523ec2f
commit 0dc39e0470
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 40 additions and 31 deletions

View File

@ -7,6 +7,7 @@ All notable changes to this project will be documented in this file.
### Added ### Added
- Support for multiple MCP23008 as switch/button/relay - Support for multiple MCP23008 as switch/button/relay
- Support for multiple PCF8574 as switch/button/relay - Support for multiple PCF8574 as switch/button/relay
- Extended Tariff command for forced tariff (#18080)
### Breaking Changed ### Breaking Changed
- Shelly Pro 4PM using standard MCP23xxx driver and needs one time Auto-Configuration - Shelly Pro 4PM using standard MCP23xxx driver and needs one time Auto-Configuration

View File

@ -266,8 +266,7 @@ typedef union {
uint32_t spare23 : 1; // bit 23 uint32_t spare23 : 1; // bit 23
uint32_t spare24 : 1; // bit 24 uint32_t spare24 : 1; // bit 24
uint32_t spare25 : 1; // bit 25 uint32_t spare25 : 1; // bit 25
uint32_t spare26 : 1; // bit 26 uint32_t tariff_forced : 2; // bit 26..27 (v12.4.0.2) - Energy forced tariff : 0=tariff change on time, 1|2=tariff forced
uint32_t spare27 : 1; // bit 27
uint32_t sunrise_dawn_angle : 2; // bits 28/29 (v12.1.1.4) - uint32_t sunrise_dawn_angle : 2; // bits 28/29 (v12.1.1.4) -
uint32_t temperature_set_res : 2; // bits 30/31 (v9.3.1.4) - (Tuya) uint32_t temperature_set_res : 2; // bits 30/31 (v9.3.1.4) - (Tuya)
}; };

View File

@ -225,6 +225,9 @@ char* WebEnergyFormat(char* result, float* input, uint32_t resolution, uint32_t
/********************************************************************************************/ /********************************************************************************************/
bool EnergyTariff1Active() { // Off-Peak hours bool EnergyTariff1Active() { // Off-Peak hours
if (Settings->mbflag2.tariff_forced) {
return 1 == Settings->mbflag2.tariff_forced;
}
uint8_t dst = 0; uint8_t dst = 0;
if (IsDst() && (Settings->tariff[0][1] != Settings->tariff[1][1])) { if (IsDst() && (Settings->tariff[0][1] != Settings->tariff[1][1])) {
dst = 1; dst = 1;
@ -825,6 +828,11 @@ void CmndTariff(void) {
uint32_t tariff = XdrvMailbox.index -1; uint32_t tariff = XdrvMailbox.index -1;
uint32_t time_type = 0; uint32_t time_type = 0;
char *p; char *p;
if (POWER_OFF == XdrvMailbox.payload)
Settings->mbflag2.tariff_forced = 0;
else if (POWER_ON == XdrvMailbox.payload)
Settings->mbflag2.tariff_forced = tariff + 1;
else {
char *str = strtok_r(XdrvMailbox.data, ", ", &p); // 23:15, 22:30 char *str = strtok_r(XdrvMailbox.data, ", ", &p); // 23:15, 22:30
while ((str != nullptr) && (time_type < 2)) { while ((str != nullptr) && (time_type < 2)) {
char *q; char *q;
@ -848,14 +856,16 @@ void CmndTariff(void) {
time_type++; time_type++;
} }
} }
}
else if (XdrvMailbox.index == 9) { else if (XdrvMailbox.index == 9) {
Settings->flag3.energy_weekend = XdrvMailbox.payload & 1; // CMND_TARIFF Settings->flag3.energy_weekend = XdrvMailbox.payload & 1; // CMND_TARIFF
} }
Response_P(PSTR("{\"%s\":{\"Off-Peak\":{\"STD\":\"%s\",\"DST\":\"%s\"},\"Standard\":{\"STD\":\"%s\",\"DST\":\"%s\"},\"Weekend\":\"%s\"}}"), Response_P(PSTR("{\"%s\":{\"Off-Peak\":{\"STD\":\"%s\",\"DST\":\"%s\"},\"Standard\":{\"STD\":\"%s\",\"DST\":\"%s\"},\"Weekend\":\"%s\",\"Forced\":\"%d\"}}"),
XdrvMailbox.command, XdrvMailbox.command,
GetMinuteTime(Settings->tariff[0][0]).c_str(),GetMinuteTime(Settings->tariff[0][1]).c_str(), GetMinuteTime(Settings->tariff[0][0]).c_str(),GetMinuteTime(Settings->tariff[0][1]).c_str(),
GetMinuteTime(Settings->tariff[1][0]).c_str(),GetMinuteTime(Settings->tariff[1][1]).c_str(), GetMinuteTime(Settings->tariff[1][0]).c_str(),GetMinuteTime(Settings->tariff[1][1]).c_str(),
GetStateText(Settings->flag3.energy_weekend)); // CMND_TARIFF GetStateText(Settings->flag3.energy_weekend), // Tariff9
Settings->mbflag2.tariff_forced); // Tariff<x> ON|OFF
} }
uint32_t EnergyGetCalibration(uint32_t cal_type, uint32_t chan = 0) { uint32_t EnergyGetCalibration(uint32_t cal_type, uint32_t chan = 0) {
@ -1238,7 +1248,7 @@ void EnergyShow(bool json) {
bool energy_tariff = false; bool energy_tariff = false;
float energy_usage[2]; float energy_usage[2];
float energy_return[2]; float energy_return[2];
if (Settings->tariff[0][0] != Settings->tariff[1][0]) { if (Settings->mbflag2.tariff_forced || (Settings->tariff[0][0] != Settings->tariff[1][0])) {
energy_usage[0] = (float)RtcSettings.energy_usage.usage1_kWhtotal / 1000; // Tariff1 energy_usage[0] = (float)RtcSettings.energy_usage.usage1_kWhtotal / 1000; // Tariff1
energy_usage[1] = (float)RtcSettings.energy_usage.usage2_kWhtotal / 1000; // Tariff2 energy_usage[1] = (float)RtcSettings.energy_usage.usage2_kWhtotal / 1000; // Tariff2
energy_return[0] = (float)RtcSettings.energy_usage.return1_kWhtotal / 1000; // Tariff1 energy_return[0] = (float)RtcSettings.energy_usage.return1_kWhtotal / 1000; // Tariff1

View File

@ -181,7 +181,6 @@ typedef struct {
uint8_t gui_rotate; uint8_t gui_rotate;
uint8_t gui_count; uint8_t gui_count;
uint8_t gui_offset; uint8_t gui_offset;
uint8_t tariff_forced; // 0: tariff change on time, 1|2: tariff forced
bool voltage_common; // Use common voltage bool voltage_common; // Use common voltage
bool frequency_common; // Use common frequency bool frequency_common; // Use common frequency
@ -449,8 +448,8 @@ char* WebEnergyFormat(char* result, float* input, uint32_t resolution, uint32_t
/********************************************************************************************/ /********************************************************************************************/
bool EnergyTariff1Active() { // Off-Peak hours bool EnergyTariff1Active() { // Off-Peak hours
if (Energy->tariff_forced) { if (Settings->mbflag2.tariff_forced) {
return 1 == Energy->tariff_forced; return 1 == Settings->mbflag2.tariff_forced;
} }
uint8_t dst = 0; uint8_t dst = 0;
if (IsDst() && (Energy->Settings.tariff[0][1] != Energy->Settings.tariff[1][1])) { if (IsDst() && (Energy->Settings.tariff[0][1] != Energy->Settings.tariff[1][1])) {
@ -1058,9 +1057,9 @@ void CmndTariff(void) {
uint32_t time_type = 0; uint32_t time_type = 0;
char *p; char *p;
if (POWER_OFF == XdrvMailbox.payload) if (POWER_OFF == XdrvMailbox.payload)
Energy->tariff_forced = 0; Settings->mbflag2.tariff_forced = 0;
else if (POWER_ON == XdrvMailbox.payload) else if (POWER_ON == XdrvMailbox.payload)
Energy->tariff_forced = tariff + 1; Settings->mbflag2.tariff_forced = tariff + 1;
else { else {
char *str = strtok_r(XdrvMailbox.data, ", ", &p); // 23:15, 22:30 char *str = strtok_r(XdrvMailbox.data, ", ", &p); // 23:15, 22:30
while ((str != nullptr) && (time_type < 2)) { while ((str != nullptr) && (time_type < 2)) {
@ -1093,8 +1092,8 @@ void CmndTariff(void) {
XdrvMailbox.command, XdrvMailbox.command,
GetMinuteTime(Energy->Settings.tariff[0][0]).c_str(),GetMinuteTime(Energy->Settings.tariff[0][1]).c_str(), GetMinuteTime(Energy->Settings.tariff[0][0]).c_str(),GetMinuteTime(Energy->Settings.tariff[0][1]).c_str(),
GetMinuteTime(Energy->Settings.tariff[1][0]).c_str(),GetMinuteTime(Energy->Settings.tariff[1][1]).c_str(), GetMinuteTime(Energy->Settings.tariff[1][0]).c_str(),GetMinuteTime(Energy->Settings.tariff[1][1]).c_str(),
GetStateText(Settings->flag3.energy_weekend), GetStateText(Settings->flag3.energy_weekend), // Tariff9
Energy->tariff_forced); // CMND_TARIFF Settings->mbflag2.tariff_forced); // Tariff<x> ON|OFF
} }
uint32_t EnergyGetCalibration(uint32_t cal_type, uint32_t chan = 0) { uint32_t EnergyGetCalibration(uint32_t cal_type, uint32_t chan = 0) {
@ -1479,7 +1478,7 @@ void EnergyShow(bool json) {
bool energy_tariff = false; bool energy_tariff = false;
float energy_usage_kWh[2]; float energy_usage_kWh[2];
float energy_return_kWh[2]; float energy_return_kWh[2];
if (Energy->tariff_forced || (Energy->Settings.tariff[0][0] != Energy->Settings.tariff[1][0])) { if (Settings->mbflag2.tariff_forced || (Energy->Settings.tariff[0][0] != Energy->Settings.tariff[1][0])) {
energy_usage_kWh[0] = RtcEnergySettings.energy_usage.usage_total_kWh[0]; // Tariff1 energy_usage_kWh[0] = RtcEnergySettings.energy_usage.usage_total_kWh[0]; // Tariff1
energy_usage_kWh[1] = RtcEnergySettings.energy_usage.usage_total_kWh[1]; // Tariff2 energy_usage_kWh[1] = RtcEnergySettings.energy_usage.usage_total_kWh[1]; // Tariff2
energy_return_kWh[0] = RtcEnergySettings.energy_usage.return_total_kWh[0]; // Tariff1 energy_return_kWh[0] = RtcEnergySettings.energy_usage.return_total_kWh[0]; // Tariff1