Belling BL0940 Energy Monitor
The bl0940 component allows you to use BL0940 energy monitors sensors with ESPHome. These are used in some
Tuya-devices (e.g. the power metering BW-SHP10) and the Vaiotech Rowi2 Smart Plug.
The communication with this component is done via UART. You must therefore have a uart: entry in your configuration
with both the TX and RX pins set to some pins on your board and the baud rate set to 4800 with 1 stop bit.
Sensor
# Example configuration entry
sensor:
  - platform: bl0940
    voltage:
      name: 'BL0940 Voltage'
    current:
      name: 'BL0940 Current'
    power:
      name: 'BL0940 Power'
    energy:
      name: 'BL0940 Energy'
    internal_temperature:
      name: 'BL0940 Internal temperature'
    external_temperature:
      name: 'BL0940 External temperature'Configuration Variables
- uart_id (Optional): Manually specify the ID of the UART Component if you want to use multiple UART buses.
- legacy_mode (Optional, boolean): Whether to use the legacy configuration from initial implementation.
Defaults to trueto prevent breaking change.
- read_command (Optional): The byte used for the read commands when communicating with the BL0940.
By default, it is set to 0x58or0x50inlegacy_mode.
- write_command (Optional): byte used for the write commands when communicating with the BL0940.
By default, it is set to 0xA8or0xA0inlegacy_mode.
- voltage (Optional): The voltage value of the sensor in Volts. All options from Sensor.
- current (Optional): The current value of the sensor in Amperes. All options from Sensor.
- power (Optional): The (active) power value of the sensor in Watts. All options from Sensor.
- energy (Optional): Use the voltage value of the sensor in kWh. All options from Sensor.
- internal_temperature (Optional): The internal temperature value of the sensor in °C. All options from Sensor.
- external_temperature (Optional): The external value of the sensor in °C. Often not connected and gives garbage data. All options from Sensor.
- update_interval (Optional): The interval to check the sensor. Defaults to 60s.
Calibration Parameters
- reference_voltage (Optional, float): The calibration parameter for Vref. Defaults to - 1.218.
- resistor_shunt (Optional, float): The calibration parameter for RL. Defaults to - 1.
- resistor_one (Optional, float): The calibration parameter for R1. Defaults to - 0.51.
- resistor_two (Optional, float): The calibration parameter for R2. Defaults to - 1950.
- voltage_reference (Optional, float): The calibration parameter for voltage readings. Defaults to - 266013.136288998as calculated using schema defaults.
- current_reference (Optional, float): The calibration parameter for current readings. Defaults to - 17158.9201389365as calculated using schema defaults.
- power_reference (Optional, float): The calibration parameter for power readings. Defaults to - 713.104696500825as calculated using schema defaults.
- energy_reference (Optional, float): The calibration parameter for cumulative energy readings. Defaults to - 6120.6267056536as calculated using schema defaults.
Sensor Calibration
There are two fundamental calibration parameters which are dependent on the hardware design: voltage_reference
and current_reference.
These can be determined by inspecting the actual hardware design or by using an accurate voltage and current meter with a simple resistive load.
Available calibration options
# schematic option defaults
reference_voltage: 1.218  # Vref = 1.218
resistor_shunt: 1         # RL = 1 mΩ
resistor_one: 0.51        # R1 = 0.51 kΩ
resistor_two: 1950        # R2 = 5 x 390 kΩ -> 1950 kΩDefault values are based on BL0940_APPNote_TSSOP14_V1.04_EN.pdf.
By default all the reference values will be calculated using the above values in the exact order shown below.
this->voltage_reference_ = 79931 / this->vref_ * (this->r_one_ * 1000) / (this->r_one_ + this->r_two_);
this->current_reference_ = 324004 * this->r_shunt_ / this->vref_;
// if voltage reference and current_reference have been configured
this->power_reference_ = this->voltage_reference_ * this->current_reference_ * 4046 / 324004 / 79931;
// if not, we use this formula based on provided formula in the specification
this->power_reference_ = 4046 * this->r_shunt_ * this->r_one_ * 1000 / this->vref_ / this->vref_ / (this->r_one_ + this->r_two_);
this->energy_reference_ = this->power_reference_ * 3600000 / (1638.4 * 256);If legacy_mode is enabled the reference values will be set according to initial implementation.
this->voltage_reference_ = 33000;
this->current_reference_ = 275000;
this->power_reference_   = 1430;
this->energy_reference_  = 3.6e6 / 297;Any of the reference values may be manually configured; user-specified values will take precedence over the calculated/predefined values.
Theoretically, configuring voltage_reference and current_reference should be enough to calibrate the sensors, but,
for completeness, power_reference and energy_reference are also configurable.
# custom references
voltage_reference: 17158.9201389365
current_reference: 266013.136288998
power_reference:   713.104696500825
energy_reference:  6120.6267056536Number
The bl0940 number platform allows for online calibration of the sensor readings.
number:
  - platform: bl0940
    current_calibration:
      name: Current Calibration
    voltage_calibration:
      name: Voltage Calibration
    power_calibration:
      name: Power Calibration
    energy_calibration:
      name: Energy CalibrationConfiguration Variables
- current_calibration (Optional): Enables current calibration configuration.
- voltage_calibration (Optional): Enables voltage calibration configuration.
- power_calibration (Optional): Enables power calibration configuration.
- energy_calibration (Optional): Enables energy calibration configuration.
Calibration variables
- min_value (Optional, float): The minimum value this number can be. Minimal allowed value is -50defaults to-10.
- max_value (Optional, float): The maximum value this number can be. Maximal allowed value is 50defaults to10.
- step (Optional, float): The granularity with which the number can be set. Defaults to 0.1.
- restore_value (Optional, boolean): Saves and loads the state to RTC/Flash. Defaults to true.
- All other options from Number.
Calibration details
Calibration factor is calculated in % based on submitted value from the configured calibration component.
float BL0940::calculate_calibration_value_(float state) { return (100 + state) / 100; }When changing calibration values on the UI all calibrated reference values will be recalculated.
voltage_calibration and current_calibration will affect power_reference and energy_reference if they have not
been specified manually.
Button
The bl0940 button platform allows to reset all external calibration values to their initial state.
button:
  - platform: bl0940
    name: Reset CalibrationConfiguration Variables
- All options from Button.