mirror of
https://github.com/esphome/esphome.git
synced 2026-10-14 02:02:51 +00:00
[pzem6l24] Use SUB_SENSOR and explicit sub_sensors calls for the sensors (#20609)
This commit is contained in:
@@ -172,52 +172,52 @@ void PZEM6L24::publish_(const uint8_t *data) {
|
||||
// every sensor from flash.
|
||||
static constexpr SensorEntry SENSORS[] PROGMEM = {
|
||||
// Voltages (×0.1 V)
|
||||
{&PZEM6L24::voltage_a_, 0, REG_U16, SCALE_DECI},
|
||||
{&PZEM6L24::voltage_b_, 2, REG_U16, SCALE_DECI},
|
||||
{&PZEM6L24::voltage_c_, 4, REG_U16, SCALE_DECI},
|
||||
{&PZEM6L24::voltage_a_sensor_, 0, REG_U16, SCALE_DECI},
|
||||
{&PZEM6L24::voltage_b_sensor_, 2, REG_U16, SCALE_DECI},
|
||||
{&PZEM6L24::voltage_c_sensor_, 4, REG_U16, SCALE_DECI},
|
||||
// Currents (×0.01 A)
|
||||
{&PZEM6L24::current_a_, 6, REG_U16, SCALE_CENTI},
|
||||
{&PZEM6L24::current_b_, 8, REG_U16, SCALE_CENTI},
|
||||
{&PZEM6L24::current_c_, 10, REG_U16, SCALE_CENTI},
|
||||
{&PZEM6L24::current_a_sensor_, 6, REG_U16, SCALE_CENTI},
|
||||
{&PZEM6L24::current_b_sensor_, 8, REG_U16, SCALE_CENTI},
|
||||
{&PZEM6L24::current_c_sensor_, 10, REG_U16, SCALE_CENTI},
|
||||
// Frequency (×0.01 Hz)
|
||||
{&PZEM6L24::frequency_, 12, REG_U16, SCALE_CENTI},
|
||||
{&PZEM6L24::frequency_sensor_, 12, REG_U16, SCALE_CENTI},
|
||||
// Active powers (×0.1 W, signed)
|
||||
{&PZEM6L24::active_power_a_, 28, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::active_power_b_, 32, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::active_power_c_, 36, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::total_active_power_, 64, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::active_power_a_sensor_, 28, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::active_power_b_sensor_, 32, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::active_power_c_sensor_, 36, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::total_active_power_sensor_, 64, REG_I32, SCALE_DECI},
|
||||
// Reactive powers (×0.1 var, signed)
|
||||
{&PZEM6L24::reactive_power_a_, 40, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::reactive_power_b_, 44, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::reactive_power_c_, 48, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::total_reactive_power_, 68, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::reactive_power_a_sensor_, 40, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::reactive_power_b_sensor_, 44, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::reactive_power_c_sensor_, 48, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::total_reactive_power_sensor_, 68, REG_I32, SCALE_DECI},
|
||||
// Apparent powers (×0.1 VA, signed)
|
||||
{&PZEM6L24::apparent_power_a_, 52, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::apparent_power_b_, 56, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::apparent_power_c_, 60, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::total_apparent_power_, 72, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::apparent_power_a_sensor_, 52, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::apparent_power_b_sensor_, 56, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::apparent_power_c_sensor_, 60, REG_I32, SCALE_DECI},
|
||||
{&PZEM6L24::total_apparent_power_sensor_, 72, REG_I32, SCALE_DECI},
|
||||
// Power factors (×0.01), packed two per register:
|
||||
// register 0x0026 (bytes 76/77): lo-byte = phase B, hi-byte = phase A
|
||||
// register 0x0027 (bytes 78/79): lo-byte = combined, hi-byte = phase C
|
||||
{&PZEM6L24::power_factor_a_, 77, REG_U8, SCALE_CENTI},
|
||||
{&PZEM6L24::power_factor_b_, 76, REG_U8, SCALE_CENTI},
|
||||
{&PZEM6L24::power_factor_c_, 79, REG_U8, SCALE_CENTI},
|
||||
{&PZEM6L24::total_power_factor_, 78, REG_U8, SCALE_CENTI},
|
||||
{&PZEM6L24::power_factor_a_sensor_, 77, REG_U8, SCALE_CENTI},
|
||||
{&PZEM6L24::power_factor_b_sensor_, 76, REG_U8, SCALE_CENTI},
|
||||
{&PZEM6L24::power_factor_c_sensor_, 79, REG_U8, SCALE_CENTI},
|
||||
{&PZEM6L24::total_power_factor_sensor_, 78, REG_U8, SCALE_CENTI},
|
||||
// Active energies (×0.1 kWh, unsigned)
|
||||
{&PZEM6L24::active_energy_a_, 80, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::active_energy_b_, 84, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::active_energy_c_, 88, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::total_active_energy_, 116, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::active_energy_a_sensor_, 80, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::active_energy_b_sensor_, 84, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::active_energy_c_sensor_, 88, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::total_active_energy_sensor_, 116, REG_U32, SCALE_DECI},
|
||||
// Reactive energies (×0.1 kvarh, unsigned)
|
||||
{&PZEM6L24::reactive_energy_a_, 92, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::reactive_energy_b_, 96, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::reactive_energy_c_, 100, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::total_reactive_energy_, 120, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::reactive_energy_a_sensor_, 92, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::reactive_energy_b_sensor_, 96, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::reactive_energy_c_sensor_, 100, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::total_reactive_energy_sensor_, 120, REG_U32, SCALE_DECI},
|
||||
// Apparent energies (×0.1 kVAh, unsigned)
|
||||
{&PZEM6L24::apparent_energy_a_, 104, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::apparent_energy_b_, 108, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::apparent_energy_c_, 112, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::total_apparent_energy_, 124, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::apparent_energy_a_sensor_, 104, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::apparent_energy_b_sensor_, 108, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::apparent_energy_c_sensor_, 112, REG_U32, SCALE_DECI},
|
||||
{&PZEM6L24::total_apparent_energy_sensor_, 124, REG_U32, SCALE_DECI},
|
||||
};
|
||||
|
||||
for (const SensorEntry &flash_entry : SENSORS) {
|
||||
@@ -268,41 +268,41 @@ void PZEM6L24::dump_config() {
|
||||
" Address: 0x%02X",
|
||||
this->address_);
|
||||
LOG_UPDATE_INTERVAL(this);
|
||||
LOG_SENSOR(" ", "Voltage A", this->voltage_a_);
|
||||
LOG_SENSOR(" ", "Voltage B", this->voltage_b_);
|
||||
LOG_SENSOR(" ", "Voltage C", this->voltage_c_);
|
||||
LOG_SENSOR(" ", "Current A", this->current_a_);
|
||||
LOG_SENSOR(" ", "Current B", this->current_b_);
|
||||
LOG_SENSOR(" ", "Current C", this->current_c_);
|
||||
LOG_SENSOR(" ", "Active Power A", this->active_power_a_);
|
||||
LOG_SENSOR(" ", "Active Power B", this->active_power_b_);
|
||||
LOG_SENSOR(" ", "Active Power C", this->active_power_c_);
|
||||
LOG_SENSOR(" ", "Reactive Power A", this->reactive_power_a_);
|
||||
LOG_SENSOR(" ", "Reactive Power B", this->reactive_power_b_);
|
||||
LOG_SENSOR(" ", "Reactive Power C", this->reactive_power_c_);
|
||||
LOG_SENSOR(" ", "Apparent Power A", this->apparent_power_a_);
|
||||
LOG_SENSOR(" ", "Apparent Power B", this->apparent_power_b_);
|
||||
LOG_SENSOR(" ", "Apparent Power C", this->apparent_power_c_);
|
||||
LOG_SENSOR(" ", "Power Factor A", this->power_factor_a_);
|
||||
LOG_SENSOR(" ", "Power Factor B", this->power_factor_b_);
|
||||
LOG_SENSOR(" ", "Power Factor C", this->power_factor_c_);
|
||||
LOG_SENSOR(" ", "Active Energy A", this->active_energy_a_);
|
||||
LOG_SENSOR(" ", "Active Energy B", this->active_energy_b_);
|
||||
LOG_SENSOR(" ", "Active Energy C", this->active_energy_c_);
|
||||
LOG_SENSOR(" ", "Reactive Energy A", this->reactive_energy_a_);
|
||||
LOG_SENSOR(" ", "Reactive Energy B", this->reactive_energy_b_);
|
||||
LOG_SENSOR(" ", "Reactive Energy C", this->reactive_energy_c_);
|
||||
LOG_SENSOR(" ", "Apparent Energy A", this->apparent_energy_a_);
|
||||
LOG_SENSOR(" ", "Apparent Energy B", this->apparent_energy_b_);
|
||||
LOG_SENSOR(" ", "Apparent Energy C", this->apparent_energy_c_);
|
||||
LOG_SENSOR(" ", "Frequency", this->frequency_);
|
||||
LOG_SENSOR(" ", "Total Active Power", this->total_active_power_);
|
||||
LOG_SENSOR(" ", "Total Reactive Power", this->total_reactive_power_);
|
||||
LOG_SENSOR(" ", "Total Apparent Power", this->total_apparent_power_);
|
||||
LOG_SENSOR(" ", "Total Power Factor", this->total_power_factor_);
|
||||
LOG_SENSOR(" ", "Total Active Energy", this->total_active_energy_);
|
||||
LOG_SENSOR(" ", "Total Reactive Energy", this->total_reactive_energy_);
|
||||
LOG_SENSOR(" ", "Total Apparent Energy", this->total_apparent_energy_);
|
||||
LOG_SENSOR(" ", "Voltage A", this->voltage_a_sensor_);
|
||||
LOG_SENSOR(" ", "Voltage B", this->voltage_b_sensor_);
|
||||
LOG_SENSOR(" ", "Voltage C", this->voltage_c_sensor_);
|
||||
LOG_SENSOR(" ", "Current A", this->current_a_sensor_);
|
||||
LOG_SENSOR(" ", "Current B", this->current_b_sensor_);
|
||||
LOG_SENSOR(" ", "Current C", this->current_c_sensor_);
|
||||
LOG_SENSOR(" ", "Active Power A", this->active_power_a_sensor_);
|
||||
LOG_SENSOR(" ", "Active Power B", this->active_power_b_sensor_);
|
||||
LOG_SENSOR(" ", "Active Power C", this->active_power_c_sensor_);
|
||||
LOG_SENSOR(" ", "Reactive Power A", this->reactive_power_a_sensor_);
|
||||
LOG_SENSOR(" ", "Reactive Power B", this->reactive_power_b_sensor_);
|
||||
LOG_SENSOR(" ", "Reactive Power C", this->reactive_power_c_sensor_);
|
||||
LOG_SENSOR(" ", "Apparent Power A", this->apparent_power_a_sensor_);
|
||||
LOG_SENSOR(" ", "Apparent Power B", this->apparent_power_b_sensor_);
|
||||
LOG_SENSOR(" ", "Apparent Power C", this->apparent_power_c_sensor_);
|
||||
LOG_SENSOR(" ", "Power Factor A", this->power_factor_a_sensor_);
|
||||
LOG_SENSOR(" ", "Power Factor B", this->power_factor_b_sensor_);
|
||||
LOG_SENSOR(" ", "Power Factor C", this->power_factor_c_sensor_);
|
||||
LOG_SENSOR(" ", "Active Energy A", this->active_energy_a_sensor_);
|
||||
LOG_SENSOR(" ", "Active Energy B", this->active_energy_b_sensor_);
|
||||
LOG_SENSOR(" ", "Active Energy C", this->active_energy_c_sensor_);
|
||||
LOG_SENSOR(" ", "Reactive Energy A", this->reactive_energy_a_sensor_);
|
||||
LOG_SENSOR(" ", "Reactive Energy B", this->reactive_energy_b_sensor_);
|
||||
LOG_SENSOR(" ", "Reactive Energy C", this->reactive_energy_c_sensor_);
|
||||
LOG_SENSOR(" ", "Apparent Energy A", this->apparent_energy_a_sensor_);
|
||||
LOG_SENSOR(" ", "Apparent Energy B", this->apparent_energy_b_sensor_);
|
||||
LOG_SENSOR(" ", "Apparent Energy C", this->apparent_energy_c_sensor_);
|
||||
LOG_SENSOR(" ", "Frequency", this->frequency_sensor_);
|
||||
LOG_SENSOR(" ", "Total Active Power", this->total_active_power_sensor_);
|
||||
LOG_SENSOR(" ", "Total Reactive Power", this->total_reactive_power_sensor_);
|
||||
LOG_SENSOR(" ", "Total Apparent Power", this->total_apparent_power_sensor_);
|
||||
LOG_SENSOR(" ", "Total Power Factor", this->total_power_factor_sensor_);
|
||||
LOG_SENSOR(" ", "Total Active Energy", this->total_active_energy_sensor_);
|
||||
LOG_SENSOR(" ", "Total Reactive Energy", this->total_reactive_energy_sensor_);
|
||||
LOG_SENSOR(" ", "Total Apparent Energy", this->total_apparent_energy_sensor_);
|
||||
}
|
||||
|
||||
// Blank after MAX_CONSECUTIVE_READ_FAILURES; stays blanked until a poll succeeds.
|
||||
|
||||
@@ -36,54 +36,51 @@ constexpr std::array<uint8_t, 3> build_reset_pdu(ResetPhase phase) {
|
||||
}
|
||||
|
||||
class PZEM6L24 final : public PollingComponent, public modbus::ModbusClientDevice {
|
||||
protected:
|
||||
// Ahead of the sensor pointers so the two bytes share the base class's tail padding.
|
||||
// Register reads accepted by the hub but not yet resolved by a terminal callback.
|
||||
uint8_t reads_outstanding_{0};
|
||||
// Failed polls since the last good one; stops counting at MAX_CONSECUTIVE_READ_FAILURES.
|
||||
uint8_t consecutive_failures_{0};
|
||||
|
||||
public:
|
||||
// Per-phase sensors; each setter is named after its config key
|
||||
void set_voltage_a_sensor(sensor::Sensor *sensor) { this->voltage_a_ = sensor; }
|
||||
void set_voltage_b_sensor(sensor::Sensor *sensor) { this->voltage_b_ = sensor; }
|
||||
void set_voltage_c_sensor(sensor::Sensor *sensor) { this->voltage_c_ = sensor; }
|
||||
|
||||
void set_current_a_sensor(sensor::Sensor *sensor) { this->current_a_ = sensor; }
|
||||
void set_current_b_sensor(sensor::Sensor *sensor) { this->current_b_ = sensor; }
|
||||
void set_current_c_sensor(sensor::Sensor *sensor) { this->current_c_ = sensor; }
|
||||
|
||||
void set_active_power_a_sensor(sensor::Sensor *sensor) { this->active_power_a_ = sensor; }
|
||||
void set_active_power_b_sensor(sensor::Sensor *sensor) { this->active_power_b_ = sensor; }
|
||||
void set_active_power_c_sensor(sensor::Sensor *sensor) { this->active_power_c_ = sensor; }
|
||||
|
||||
void set_reactive_power_a_sensor(sensor::Sensor *sensor) { this->reactive_power_a_ = sensor; }
|
||||
void set_reactive_power_b_sensor(sensor::Sensor *sensor) { this->reactive_power_b_ = sensor; }
|
||||
void set_reactive_power_c_sensor(sensor::Sensor *sensor) { this->reactive_power_c_ = sensor; }
|
||||
|
||||
void set_apparent_power_a_sensor(sensor::Sensor *sensor) { this->apparent_power_a_ = sensor; }
|
||||
void set_apparent_power_b_sensor(sensor::Sensor *sensor) { this->apparent_power_b_ = sensor; }
|
||||
void set_apparent_power_c_sensor(sensor::Sensor *sensor) { this->apparent_power_c_ = sensor; }
|
||||
|
||||
void set_power_factor_a_sensor(sensor::Sensor *sensor) { this->power_factor_a_ = sensor; }
|
||||
void set_power_factor_b_sensor(sensor::Sensor *sensor) { this->power_factor_b_ = sensor; }
|
||||
void set_power_factor_c_sensor(sensor::Sensor *sensor) { this->power_factor_c_ = sensor; }
|
||||
|
||||
void set_active_energy_a_sensor(sensor::Sensor *sensor) { this->active_energy_a_ = sensor; }
|
||||
void set_active_energy_b_sensor(sensor::Sensor *sensor) { this->active_energy_b_ = sensor; }
|
||||
void set_active_energy_c_sensor(sensor::Sensor *sensor) { this->active_energy_c_ = sensor; }
|
||||
|
||||
void set_reactive_energy_a_sensor(sensor::Sensor *sensor) { this->reactive_energy_a_ = sensor; }
|
||||
void set_reactive_energy_b_sensor(sensor::Sensor *sensor) { this->reactive_energy_b_ = sensor; }
|
||||
void set_reactive_energy_c_sensor(sensor::Sensor *sensor) { this->reactive_energy_c_ = sensor; }
|
||||
|
||||
void set_apparent_energy_a_sensor(sensor::Sensor *sensor) { this->apparent_energy_a_ = sensor; }
|
||||
void set_apparent_energy_b_sensor(sensor::Sensor *sensor) { this->apparent_energy_b_ = sensor; }
|
||||
void set_apparent_energy_c_sensor(sensor::Sensor *sensor) { this->apparent_energy_c_ = sensor; }
|
||||
|
||||
// Combined sensors
|
||||
void set_frequency_sensor(sensor::Sensor *sensor) { this->frequency_ = sensor; }
|
||||
void set_total_active_power_sensor(sensor::Sensor *sensor) { this->total_active_power_ = sensor; }
|
||||
void set_total_reactive_power_sensor(sensor::Sensor *sensor) { this->total_reactive_power_ = sensor; }
|
||||
void set_total_apparent_power_sensor(sensor::Sensor *sensor) { this->total_apparent_power_ = sensor; }
|
||||
void set_total_power_factor_sensor(sensor::Sensor *sensor) { this->total_power_factor_ = sensor; }
|
||||
void set_total_active_energy_sensor(sensor::Sensor *sensor) { this->total_active_energy_ = sensor; }
|
||||
void set_total_reactive_energy_sensor(sensor::Sensor *sensor) { this->total_reactive_energy_ = sensor; }
|
||||
void set_total_apparent_energy_sensor(sensor::Sensor *sensor) { this->total_apparent_energy_ = sensor; }
|
||||
SUB_SENSOR(voltage_a)
|
||||
SUB_SENSOR(voltage_b)
|
||||
SUB_SENSOR(voltage_c)
|
||||
SUB_SENSOR(current_a)
|
||||
SUB_SENSOR(current_b)
|
||||
SUB_SENSOR(current_c)
|
||||
SUB_SENSOR(active_power_a)
|
||||
SUB_SENSOR(active_power_b)
|
||||
SUB_SENSOR(active_power_c)
|
||||
SUB_SENSOR(reactive_power_a)
|
||||
SUB_SENSOR(reactive_power_b)
|
||||
SUB_SENSOR(reactive_power_c)
|
||||
SUB_SENSOR(apparent_power_a)
|
||||
SUB_SENSOR(apparent_power_b)
|
||||
SUB_SENSOR(apparent_power_c)
|
||||
SUB_SENSOR(power_factor_a)
|
||||
SUB_SENSOR(power_factor_b)
|
||||
SUB_SENSOR(power_factor_c)
|
||||
SUB_SENSOR(active_energy_a)
|
||||
SUB_SENSOR(active_energy_b)
|
||||
SUB_SENSOR(active_energy_c)
|
||||
SUB_SENSOR(reactive_energy_a)
|
||||
SUB_SENSOR(reactive_energy_b)
|
||||
SUB_SENSOR(reactive_energy_c)
|
||||
SUB_SENSOR(apparent_energy_a)
|
||||
SUB_SENSOR(apparent_energy_b)
|
||||
SUB_SENSOR(apparent_energy_c)
|
||||
SUB_SENSOR(frequency)
|
||||
SUB_SENSOR(total_active_power)
|
||||
SUB_SENSOR(total_reactive_power)
|
||||
SUB_SENSOR(total_apparent_power)
|
||||
SUB_SENSOR(total_power_factor)
|
||||
SUB_SENSOR(total_active_energy)
|
||||
SUB_SENSOR(total_reactive_energy)
|
||||
SUB_SENSOR(total_apparent_energy)
|
||||
|
||||
public:
|
||||
// Queues the energy reset command for the selected phase(s); the pzem6l24.reset_energy action calls this.
|
||||
void reset_energy(ResetPhase phase_option);
|
||||
|
||||
@@ -104,58 +101,6 @@ class PZEM6L24 final : public PollingComponent, public modbus::ModbusClientDevic
|
||||
void request_failed_(std::span<const uint8_t> request_pdu);
|
||||
void read_failed_();
|
||||
void read_finished_();
|
||||
|
||||
// Register reads accepted by the hub but not yet resolved by a terminal callback.
|
||||
uint8_t reads_outstanding_{0};
|
||||
// Failed polls since the last good one; stops counting at MAX_CONSECUTIVE_READ_FAILURES.
|
||||
uint8_t consecutive_failures_{0};
|
||||
|
||||
// Per-phase sensors
|
||||
sensor::Sensor *voltage_a_{nullptr};
|
||||
sensor::Sensor *voltage_b_{nullptr};
|
||||
sensor::Sensor *voltage_c_{nullptr};
|
||||
|
||||
sensor::Sensor *current_a_{nullptr};
|
||||
sensor::Sensor *current_b_{nullptr};
|
||||
sensor::Sensor *current_c_{nullptr};
|
||||
|
||||
sensor::Sensor *active_power_a_{nullptr};
|
||||
sensor::Sensor *active_power_b_{nullptr};
|
||||
sensor::Sensor *active_power_c_{nullptr};
|
||||
|
||||
sensor::Sensor *reactive_power_a_{nullptr};
|
||||
sensor::Sensor *reactive_power_b_{nullptr};
|
||||
sensor::Sensor *reactive_power_c_{nullptr};
|
||||
|
||||
sensor::Sensor *apparent_power_a_{nullptr};
|
||||
sensor::Sensor *apparent_power_b_{nullptr};
|
||||
sensor::Sensor *apparent_power_c_{nullptr};
|
||||
|
||||
sensor::Sensor *power_factor_a_{nullptr};
|
||||
sensor::Sensor *power_factor_b_{nullptr};
|
||||
sensor::Sensor *power_factor_c_{nullptr};
|
||||
|
||||
sensor::Sensor *active_energy_a_{nullptr};
|
||||
sensor::Sensor *active_energy_b_{nullptr};
|
||||
sensor::Sensor *active_energy_c_{nullptr};
|
||||
|
||||
sensor::Sensor *reactive_energy_a_{nullptr};
|
||||
sensor::Sensor *reactive_energy_b_{nullptr};
|
||||
sensor::Sensor *reactive_energy_c_{nullptr};
|
||||
|
||||
sensor::Sensor *apparent_energy_a_{nullptr};
|
||||
sensor::Sensor *apparent_energy_b_{nullptr};
|
||||
sensor::Sensor *apparent_energy_c_{nullptr};
|
||||
|
||||
// Combined sensors
|
||||
sensor::Sensor *frequency_{nullptr};
|
||||
sensor::Sensor *total_active_power_{nullptr};
|
||||
sensor::Sensor *total_reactive_power_{nullptr};
|
||||
sensor::Sensor *total_apparent_power_{nullptr};
|
||||
sensor::Sensor *total_power_factor_{nullptr};
|
||||
sensor::Sensor *total_active_energy_{nullptr};
|
||||
sensor::Sensor *total_reactive_energy_{nullptr};
|
||||
sensor::Sensor *total_apparent_energy_{nullptr};
|
||||
};
|
||||
|
||||
} // namespace esphome::pzem6l24
|
||||
|
||||
@@ -144,7 +144,7 @@ _COMBINED_QUANTITIES = {
|
||||
CONF_TOTAL_APPARENT_ENERGY: _APPARENT_ENERGY_SCHEMA,
|
||||
}
|
||||
|
||||
# Every sensor by config key; the C++ setter is "set_<key>_sensor".
|
||||
# Every sensor by config key; each needs its sensors(...) call in to_code
|
||||
_SENSORS = {
|
||||
f"{name}_{phase}": schema
|
||||
for name, schema in _PHASE_QUANTITIES.items()
|
||||
@@ -192,7 +192,39 @@ async def to_code(config: ConfigType) -> None:
|
||||
await cg.register_component(var, config)
|
||||
await modbus.register_modbus_client_device(var, config)
|
||||
|
||||
for key in _SENSORS:
|
||||
if (conf := config.get(key)) is not None:
|
||||
sens = await sensor.new_sensor(conf)
|
||||
cg.add(getattr(var, f"set_{key}_sensor")(sens))
|
||||
sensors = sensor.sub_sensors(config)
|
||||
await sensors("voltage_a", var.set_voltage_a_sensor)
|
||||
await sensors("voltage_b", var.set_voltage_b_sensor)
|
||||
await sensors("voltage_c", var.set_voltage_c_sensor)
|
||||
await sensors("current_a", var.set_current_a_sensor)
|
||||
await sensors("current_b", var.set_current_b_sensor)
|
||||
await sensors("current_c", var.set_current_c_sensor)
|
||||
await sensors("active_power_a", var.set_active_power_a_sensor)
|
||||
await sensors("active_power_b", var.set_active_power_b_sensor)
|
||||
await sensors("active_power_c", var.set_active_power_c_sensor)
|
||||
await sensors("reactive_power_a", var.set_reactive_power_a_sensor)
|
||||
await sensors("reactive_power_b", var.set_reactive_power_b_sensor)
|
||||
await sensors("reactive_power_c", var.set_reactive_power_c_sensor)
|
||||
await sensors("apparent_power_a", var.set_apparent_power_a_sensor)
|
||||
await sensors("apparent_power_b", var.set_apparent_power_b_sensor)
|
||||
await sensors("apparent_power_c", var.set_apparent_power_c_sensor)
|
||||
await sensors("power_factor_a", var.set_power_factor_a_sensor)
|
||||
await sensors("power_factor_b", var.set_power_factor_b_sensor)
|
||||
await sensors("power_factor_c", var.set_power_factor_c_sensor)
|
||||
await sensors("active_energy_a", var.set_active_energy_a_sensor)
|
||||
await sensors("active_energy_b", var.set_active_energy_b_sensor)
|
||||
await sensors("active_energy_c", var.set_active_energy_c_sensor)
|
||||
await sensors("reactive_energy_a", var.set_reactive_energy_a_sensor)
|
||||
await sensors("reactive_energy_b", var.set_reactive_energy_b_sensor)
|
||||
await sensors("reactive_energy_c", var.set_reactive_energy_c_sensor)
|
||||
await sensors("apparent_energy_a", var.set_apparent_energy_a_sensor)
|
||||
await sensors("apparent_energy_b", var.set_apparent_energy_b_sensor)
|
||||
await sensors("apparent_energy_c", var.set_apparent_energy_c_sensor)
|
||||
await sensors(CONF_FREQUENCY, var.set_frequency_sensor)
|
||||
await sensors(CONF_TOTAL_ACTIVE_POWER, var.set_total_active_power_sensor)
|
||||
await sensors(CONF_TOTAL_REACTIVE_POWER, var.set_total_reactive_power_sensor)
|
||||
await sensors(CONF_TOTAL_APPARENT_POWER, var.set_total_apparent_power_sensor)
|
||||
await sensors(CONF_TOTAL_POWER_FACTOR, var.set_total_power_factor_sensor)
|
||||
await sensors(CONF_TOTAL_ACTIVE_ENERGY, var.set_total_active_energy_sensor)
|
||||
await sensors(CONF_TOTAL_REACTIVE_ENERGY, var.set_total_reactive_energy_sensor)
|
||||
await sensors(CONF_TOTAL_APPARENT_ENERGY, var.set_total_apparent_energy_sensor)
|
||||
|
||||
Reference in New Issue
Block a user