Add relay power control emulation

Add relay power control emulation (#10640)
This commit is contained in:
Theo Arends 2021-04-06 11:09:12 +02:00
parent aa2b6043ee
commit db4399d89b

View File

@ -20,7 +20,7 @@
#ifdef USE_ENERGY_SENSOR #ifdef USE_ENERGY_SENSOR
#ifdef USE_ENERGY_DUMMY #ifdef USE_ENERGY_DUMMY
/*********************************************************************************************\ /*********************************************************************************************\
* Provides dummy energy monitoring * Provides dummy energy monitoring for up to three channels based on relay count
* *
* User is supposed to enter valid data for Voltage, Current and Power * User is supposed to enter valid data for Voltage, Current and Power
* Active Power is adjusted to calculated Apparent Power (=U*I) if the latter is smaller than the first * Active Power is adjusted to calculated Apparent Power (=U*I) if the latter is smaller than the first
@ -30,7 +30,6 @@
#define XNRG_20 20 #define XNRG_20 20
#define NRG_DUMMY_PHASES 1 // 1 to 3 channels as x phases
#define NRG_DUMMY_U_COMMON true // Phase voltage = false, Common voltage = true #define NRG_DUMMY_U_COMMON true // Phase voltage = false, Common voltage = true
#define NRG_DUMMY_F_COMMON true // Phase frequency = false, Common frequency = true #define NRG_DUMMY_F_COMMON true // Phase frequency = false, Common frequency = true
#define NRG_DUMMY_DC false // AC = false, DC = true; #define NRG_DUMMY_DC false // AC = false, DC = true;
@ -45,17 +44,18 @@
void NrgDummyEverySecond(void) { void NrgDummyEverySecond(void) {
if (Energy.power_on) { // Powered on if (Energy.power_on) { // Powered on
float energy = 0; float energy = 0;
uint32_t max_channel = (NRG_DUMMY_PHASES < 4) ? NRG_DUMMY_PHASES : 3; for (uint32_t channel = 0; channel < Energy.phase_count; channel++) {
for (uint32_t channel = 0; channel < max_channel; channel++) {
Energy.data_valid[channel] = 0;
Energy.voltage[channel] = ((float)Settings.energy_voltage_calibration / 100); // V Energy.voltage[channel] = ((float)Settings.energy_voltage_calibration / 100); // V
Energy.frequency[channel] = ((float)Settings.energy_frequency_calibration / 100); // Hz Energy.frequency[channel] = ((float)Settings.energy_frequency_calibration / 100); // Hz
Energy.active_power[channel] = ((float)Settings.energy_power_calibration / 100); // W if (bitRead(TasmotaGlobal.power, channel)) { // Emulate power read only if device is powered on
if (0 == Energy.active_power[channel]) { Energy.active_power[channel] = ((float)Settings.energy_power_calibration / 100); // W
Energy.current[channel] = 0; if (0 == Energy.active_power[channel]) {
} else { Energy.current[channel] = 0;
Energy.current[channel] = ((float)Settings.energy_current_calibration / 100000); // A } else {
energy += Energy.active_power[channel]; Energy.current[channel] = ((float)Settings.energy_current_calibration / 100000); // A
energy += Energy.active_power[channel];
}
Energy.data_valid[channel] = 0;
} }
} }
@ -113,10 +113,10 @@ void NrgDummyDrvInit(void) {
Settings.energy_power_calibration = NRG_DUMMY_PREF; Settings.energy_power_calibration = NRG_DUMMY_PREF;
} }
Energy.type_dc = NRG_DUMMY_DC; // AC = false, DC = true; Energy.phase_count = (TasmotaGlobal.devices_present < 3) ? TasmotaGlobal.devices_present : 3;
Energy.phase_count = NRG_DUMMY_PHASES; // 1 to 3 channels as x phases
Energy.voltage_common = NRG_DUMMY_U_COMMON; // Phase voltage = false, Common voltage = true Energy.voltage_common = NRG_DUMMY_U_COMMON; // Phase voltage = false, Common voltage = true
Energy.frequency_common = NRG_DUMMY_F_COMMON; // Phase frequency = false, Common frequency = true Energy.frequency_common = NRG_DUMMY_F_COMMON; // Phase frequency = false, Common frequency = true
Energy.type_dc = NRG_DUMMY_DC; // AC = false, DC = true;
TasmotaGlobal.energy_driver = XNRG_20; TasmotaGlobal.energy_driver = XNRG_20;
} }