From e26488848eea5730740ab6aff2a176d49e69c78e Mon Sep 17 00:00:00 2001 From: "I. Tomita" Date: Thu, 21 Apr 2022 01:11:28 +0300 Subject: [PATCH] Documentation for BL0939 (Sonoff Dual R3 v2) (#1970) --- components/sensor/bl0939.rst | 89 +++++++++++++++++++++++++++++++++++ images/bl0939.png | Bin 0 -> 22432 bytes index.rst | 1 + 3 files changed, 90 insertions(+) create mode 100644 components/sensor/bl0939.rst create mode 100644 images/bl0939.png diff --git a/components/sensor/bl0939.rst b/components/sensor/bl0939.rst new file mode 100644 index 000000000..d26792e22 --- /dev/null +++ b/components/sensor/bl0939.rst @@ -0,0 +1,89 @@ +BL0939 Power Sensor +==================== + +.. seo:: + :description: Instructions for setting up BL0939 power sensors for the Sonoff Dual R3 v2 + :image: bl0939.png + :keywords: bl0939, Sonoff Dual R3 v2 + +The ``bl0939`` sensor platform allows you to use your BL0939 voltage/current/power and energy +sensors with ESPHome. This sensor is commonly found in Sonoff Dual R3 v2. + +.. note:: + + SAFETY HAZARD: Some devices such as Sonoff POWs/Shelly/etc, have the digital GND connected directly to mains voltage so **the GPIOs become LIVE during normal operation**. Our advice is to mark these boards to prevent any use of the dangerous digital pins. + +As the communication with the BL0939 done using UART, you need +to have an :ref:`UART bus ` in your configuration with the ``tx_pin`` and ``rx_pin`` connected to the BL0939. +Additionally, you need to set the baud rate to 4800, parity to ``NONE`` and stop_bits to 2. + +.. code-block:: yaml + + # Example configuration entry + # Disable logging over serial + logger: + baud_rate: 0 + + uart: + tx_pin: GPIO25 + rx_pin: GPIO26 + baud_rate: 4800 + parity: NONE + stop_bits: 2 + + sensor: + - platform: bl0939 + update_interval: 30s + voltage: + name: 'BL0939 Voltage' + current_1: + name: 'BL0939 Current 1' + current_2: + name: 'BL0939 Current 2' + active_power_1: + name: 'BL0939 Active Power 1' + active_power_2: + name: 'BL0939 Active Power 2' + energy_1: + name: 'BL0939 Energy 1' + energy_2: + name: 'BL0939 Energy 2' + energy_total: + name: 'BL0939 Energy Total' + +.. note:: + + The configuration above should work for Sonoff Dual R3 v2. + +Configuration variables: +------------------------ + +- **voltage** (*Optional*): Use the voltage value of the sensor in V (RMS). + All options from :ref:`Sensor `. +- **current_1** (*Optional*): Use the current value of the channel 1 in amperes. All options from + :ref:`Sensor `. +- **current_2** (*Optional*): Use the current value of the channel 2 in amperes. All options from + :ref:`Sensor `. +- **active_power_1** (*Optional*): Use the (active) power value of the channel 1 in watts. All options from + :ref:`Sensor `. +- **active_power_2** (*Optional*): Use the (active) power value of the channel 2 in watts. All options from + :ref:`Sensor `. +- **energy_1** (*Optional*): Use the energy counter value of the channel 1 in kWh. All options from + :ref:`Sensor `. +- **energy_2** (*Optional*): Use the energy counter value of the channel 2 in kWh. All options from + :ref:`Sensor `. +- **energy_total** (*Optional*): Use the energy counter value of both channels in kWh. All options from + :ref:`Sensor `. +- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the + sensor. Defaults to ``60s``. +- **uart_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`UART Component ` if you want + to use multiple UART buses. + +See Also +-------- + +- :ref:`sensor-filters` +- :doc:`cse7761` +- :doc:`bl0940` +- :apiref:`bl0939/bl0939.h` +- :ghedit:`Edit` diff --git a/images/bl0939.png b/images/bl0939.png new file mode 100644 index 0000000000000000000000000000000000000000..1a4249b4bc61cca520068c5ffaa64a1b213ed8ea GIT binary patch literal 22432 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