mirror of
https://github.com/esphome/esphome.git
synced 2024-12-21 16:27:44 +01:00
[bl0942] Improve energy reporting (#7428)
This commit is contained in:
parent
b5e5741ffd
commit
f5c2921b85
@ -137,7 +137,8 @@ void BL0942::setup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this->write_reg_(BL0942_REG_USR_WRPROT, BL0942_REG_USR_WRPROT_MAGIC);
|
this->write_reg_(BL0942_REG_USR_WRPROT, BL0942_REG_USR_WRPROT_MAGIC);
|
||||||
this->write_reg_(BL0942_REG_SOFT_RESET, BL0942_REG_SOFT_RESET_MAGIC);
|
if (this->reset_)
|
||||||
|
this->write_reg_(BL0942_REG_SOFT_RESET, BL0942_REG_SOFT_RESET_MAGIC);
|
||||||
|
|
||||||
uint32_t mode = BL0942_REG_MODE_DEFAULT;
|
uint32_t mode = BL0942_REG_MODE_DEFAULT;
|
||||||
mode |= BL0942_REG_MODE_RMS_UPDATE_SEL; /* 800ms refresh time */
|
mode |= BL0942_REG_MODE_RMS_UPDATE_SEL; /* 800ms refresh time */
|
||||||
@ -196,6 +197,7 @@ void BL0942::received_package_(DataPacket *data) {
|
|||||||
|
|
||||||
void BL0942::dump_config() { // NOLINT(readability-function-cognitive-complexity)
|
void BL0942::dump_config() { // NOLINT(readability-function-cognitive-complexity)
|
||||||
ESP_LOGCONFIG(TAG, "BL0942:");
|
ESP_LOGCONFIG(TAG, "BL0942:");
|
||||||
|
ESP_LOGCONFIG(TAG, " Reset: %s", TRUEFALSE(this->reset_));
|
||||||
ESP_LOGCONFIG(TAG, " Address: %d", this->address_);
|
ESP_LOGCONFIG(TAG, " Address: %d", this->address_);
|
||||||
ESP_LOGCONFIG(TAG, " Nominal line frequency: %d Hz", this->line_freq_);
|
ESP_LOGCONFIG(TAG, " Nominal line frequency: %d Hz", this->line_freq_);
|
||||||
ESP_LOGCONFIG(TAG, " Current reference: %f", this->current_reference_);
|
ESP_LOGCONFIG(TAG, " Current reference: %f", this->current_reference_);
|
||||||
|
@ -93,6 +93,7 @@ class BL0942 : public PollingComponent, public uart::UARTDevice {
|
|||||||
void set_frequency_sensor(sensor::Sensor *frequency_sensor) { frequency_sensor_ = frequency_sensor; }
|
void set_frequency_sensor(sensor::Sensor *frequency_sensor) { frequency_sensor_ = frequency_sensor; }
|
||||||
void set_line_freq(LineFrequency freq) { this->line_freq_ = freq; }
|
void set_line_freq(LineFrequency freq) { this->line_freq_ = freq; }
|
||||||
void set_address(uint8_t address) { this->address_ = address; }
|
void set_address(uint8_t address) { this->address_ = address; }
|
||||||
|
void set_reset(bool reset) { this->reset_ = reset; }
|
||||||
void set_current_reference(float current_ref) {
|
void set_current_reference(float current_ref) {
|
||||||
this->current_reference_ = current_ref;
|
this->current_reference_ = current_ref;
|
||||||
this->current_reference_set_ = true;
|
this->current_reference_set_ = true;
|
||||||
@ -137,6 +138,7 @@ class BL0942 : public PollingComponent, public uart::UARTDevice {
|
|||||||
float energy_reference_ = BL0942_EREF;
|
float energy_reference_ = BL0942_EREF;
|
||||||
bool energy_reference_set_ = false;
|
bool energy_reference_set_ = false;
|
||||||
uint8_t address_ = 0;
|
uint8_t address_ = 0;
|
||||||
|
bool reset_ = false;
|
||||||
LineFrequency line_freq_ = LINE_FREQUENCY_50HZ;
|
LineFrequency line_freq_ = LINE_FREQUENCY_50HZ;
|
||||||
uint32_t rx_start_ = 0;
|
uint32_t rx_start_ = 0;
|
||||||
uint32_t prev_cf_cnt_ = 0;
|
uint32_t prev_cf_cnt_ = 0;
|
||||||
|
@ -27,6 +27,7 @@ from esphome.const import (
|
|||||||
CONF_CURRENT_REFERENCE = "current_reference"
|
CONF_CURRENT_REFERENCE = "current_reference"
|
||||||
CONF_ENERGY_REFERENCE = "energy_reference"
|
CONF_ENERGY_REFERENCE = "energy_reference"
|
||||||
CONF_POWER_REFERENCE = "power_reference"
|
CONF_POWER_REFERENCE = "power_reference"
|
||||||
|
CONF_RESET = "reset"
|
||||||
CONF_VOLTAGE_REFERENCE = "voltage_reference"
|
CONF_VOLTAGE_REFERENCE = "voltage_reference"
|
||||||
|
|
||||||
DEPENDENCIES = ["uart"]
|
DEPENDENCIES = ["uart"]
|
||||||
@ -58,19 +59,19 @@ CONFIG_SCHEMA = (
|
|||||||
),
|
),
|
||||||
cv.Optional(CONF_POWER): sensor.sensor_schema(
|
cv.Optional(CONF_POWER): sensor.sensor_schema(
|
||||||
unit_of_measurement=UNIT_WATT,
|
unit_of_measurement=UNIT_WATT,
|
||||||
accuracy_decimals=0,
|
accuracy_decimals=1,
|
||||||
device_class=DEVICE_CLASS_POWER,
|
device_class=DEVICE_CLASS_POWER,
|
||||||
state_class=STATE_CLASS_MEASUREMENT,
|
state_class=STATE_CLASS_MEASUREMENT,
|
||||||
),
|
),
|
||||||
cv.Optional(CONF_ENERGY): sensor.sensor_schema(
|
cv.Optional(CONF_ENERGY): sensor.sensor_schema(
|
||||||
unit_of_measurement=UNIT_KILOWATT_HOURS,
|
unit_of_measurement=UNIT_KILOWATT_HOURS,
|
||||||
accuracy_decimals=0,
|
accuracy_decimals=3,
|
||||||
device_class=DEVICE_CLASS_ENERGY,
|
device_class=DEVICE_CLASS_ENERGY,
|
||||||
state_class=STATE_CLASS_TOTAL_INCREASING,
|
state_class=STATE_CLASS_TOTAL_INCREASING,
|
||||||
),
|
),
|
||||||
cv.Optional(CONF_FREQUENCY): sensor.sensor_schema(
|
cv.Optional(CONF_FREQUENCY): sensor.sensor_schema(
|
||||||
unit_of_measurement=UNIT_HERTZ,
|
unit_of_measurement=UNIT_HERTZ,
|
||||||
accuracy_decimals=0,
|
accuracy_decimals=2,
|
||||||
device_class=DEVICE_CLASS_FREQUENCY,
|
device_class=DEVICE_CLASS_FREQUENCY,
|
||||||
state_class=STATE_CLASS_MEASUREMENT,
|
state_class=STATE_CLASS_MEASUREMENT,
|
||||||
),
|
),
|
||||||
@ -82,6 +83,7 @@ CONFIG_SCHEMA = (
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
cv.Optional(CONF_ADDRESS, default=0): cv.int_range(min=0, max=3),
|
cv.Optional(CONF_ADDRESS, default=0): cv.int_range(min=0, max=3),
|
||||||
|
cv.Optional(CONF_RESET, default=True): cv.boolean,
|
||||||
cv.Optional(CONF_CURRENT_REFERENCE): cv.float_,
|
cv.Optional(CONF_CURRENT_REFERENCE): cv.float_,
|
||||||
cv.Optional(CONF_ENERGY_REFERENCE): cv.float_,
|
cv.Optional(CONF_ENERGY_REFERENCE): cv.float_,
|
||||||
cv.Optional(CONF_POWER_REFERENCE): cv.float_,
|
cv.Optional(CONF_POWER_REFERENCE): cv.float_,
|
||||||
@ -115,6 +117,7 @@ async def to_code(config):
|
|||||||
cg.add(var.set_frequency_sensor(sens))
|
cg.add(var.set_frequency_sensor(sens))
|
||||||
cg.add(var.set_line_freq(config[CONF_LINE_FREQUENCY]))
|
cg.add(var.set_line_freq(config[CONF_LINE_FREQUENCY]))
|
||||||
cg.add(var.set_address(config[CONF_ADDRESS]))
|
cg.add(var.set_address(config[CONF_ADDRESS]))
|
||||||
|
cg.add(var.set_reset(config[CONF_RESET]))
|
||||||
if (current_reference := config.get(CONF_CURRENT_REFERENCE, None)) is not None:
|
if (current_reference := config.get(CONF_CURRENT_REFERENCE, None)) is not None:
|
||||||
cg.add(var.set_current_reference(current_reference))
|
cg.add(var.set_current_reference(current_reference))
|
||||||
if (voltage_reference := config.get(CONF_VOLTAGE_REFERENCE, None)) is not None:
|
if (voltage_reference := config.get(CONF_VOLTAGE_REFERENCE, None)) is not None:
|
||||||
|
@ -10,6 +10,7 @@ sensor:
|
|||||||
- platform: bl0942
|
- platform: bl0942
|
||||||
address: 0
|
address: 0
|
||||||
line_frequency: 50Hz
|
line_frequency: 50Hz
|
||||||
|
reset: false
|
||||||
voltage:
|
voltage:
|
||||||
name: BL0942 Voltage
|
name: BL0942 Voltage
|
||||||
current:
|
current:
|
||||||
|
@ -8,6 +8,7 @@ uart:
|
|||||||
|
|
||||||
sensor:
|
sensor:
|
||||||
- platform: bl0942
|
- platform: bl0942
|
||||||
|
reset: true
|
||||||
voltage:
|
voltage:
|
||||||
name: BL0942 Voltage
|
name: BL0942 Voltage
|
||||||
current:
|
current:
|
||||||
|
Loading…
Reference in New Issue
Block a user