Untitled

 avatar
unknown
plain_text
9 days ago
5.9 kB
3
Indexable
esphome:
  name: esphome-web-6ab7d2
  friendly_name: "INA3221 Power Monitor"
  min_version: 2024.11.0
  name_add_mac_suffix: false

esp8266:
  board: esp01_1m

# Enable logging
logger:

# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:
  - platform: esphome

wifi:
  ssid: ""
  password: ""

# Define I2C interface
i2c:
  sda: 4
  scl: 5
  scan: true

globals:
  - id: mah_usage_ch1
    type: float
    restore_value: no
    initial_value: '0.0'
  - id: mah_usage_ch2
    type: float
    restore_value: no
    initial_value: '0.0'
  - id: mah_usage_ch3
    type: float
    restore_value: no
    initial_value: '0.0'

  - id: tracking_enabled_ch1
    type: bool
    restore_value: no
    initial_value: 'false'
  - id: tracking_enabled_ch2
    type: bool
    restore_value: no
    initial_value: 'false'
  - id: tracking_enabled_ch3
    type: bool
    restore_value: no
    initial_value: 'false'

  - id: tracking_time_ch1
    type: int
    restore_value: no
    initial_value: '3600'  # Default: 60 seconds
  - id: tracking_time_ch2
    type: int
    restore_value: no
    initial_value: '3600'  # Default: 60 seconds
  - id: tracking_time_ch3
    type: int
    restore_value: no
    initial_value: '3600'  # Default: 60 seconds

switch:
  - platform: template
    name: "Track mAh Channel 1"
    id: track_mah_ch1
    optimistic: true
    restore_mode: ALWAYS_OFF
    turn_on_action:
      - lambda: |-
          id(mah_usage_ch1) = 0.0;
          id(tracking_enabled_ch1) = true;
      - delay: !lambda "return id(tracking_time_ch1) * 1000;"
      - lambda: |-
          id(tracking_enabled_ch1) = false;
      - switch.turn_off: track_mah_ch1

  - platform: template
    name: "Track mAh Channel 2"
    id: track_mah_ch2
    optimistic: true
    restore_mode: ALWAYS_OFF
    turn_on_action:
      - lambda: |-
          id(mah_usage_ch2) = 0.0;
          id(tracking_enabled_ch2) = true;
      - delay: !lambda "return id(tracking_time_ch2) * 1000;"
      - lambda: |-
          id(tracking_enabled_ch2) = false;
      - switch.turn_off: track_mah_ch2

  - platform: template
    name: "Track mAh Channel 3"
    id: track_mah_ch3
    optimistic: true
    restore_mode: ALWAYS_OFF
    turn_on_action:
      - lambda: |-
          id(mah_usage_ch3) = 0.0;
          id(tracking_enabled_ch3) = true;
      - delay: !lambda "return id(tracking_time_ch3) * 1000;"
      - lambda: |-
          id(tracking_enabled_ch3) = false;
      - switch.turn_off: track_mah_ch3

sensor:
  - platform: ina3221
    address: 0x42
    update_interval: 1s
    channel_1:
      shunt_resistance: 0.1 ohm
      current:
        name: "INA3221 Channel 1 Current"
        unit_of_measurement: "mA"
        accuracy_decimals: 1
        filters:
          - multiply: 1000
        id: current_sensor_ch1
        on_value:
          - lambda: |-
              if (id(tracking_enabled_ch1)) {
                  id(mah_usage_ch1) += x * (1.0 / 3600.0);
              }
      power:
        name: "INA3221 Channel 1 Power"
        unit_of_measurement: "mW"
        accuracy_decimals: 1
        filters:
          - multiply: 1000
      bus_voltage:
        name: "INA3221 Channel 1 Bus Voltage"

    channel_2:
      shunt_resistance: 0.1 ohm
      current:
        name: "INA3221 Channel 2 Current"
        unit_of_measurement: "mA"
        accuracy_decimals: 1
        filters:
          - multiply: 1000
        id: current_sensor_ch2
        on_value:
          - lambda: |-
              if (id(tracking_enabled_ch2)) {
                  id(mah_usage_ch2) += x * (1.0 / 3600.0);
              }
      power:
        name: "INA3221 Channel 2 Power"
        unit_of_measurement: "mW"
        accuracy_decimals: 1
        filters:
          - multiply: 1000
      bus_voltage:
        name: "INA3221 Channel 2 Bus Voltage"

    channel_3:
      shunt_resistance: 0.1 ohm
      current:
        name: "INA3221 Channel 3 Current"
        unit_of_measurement: "mA"
        accuracy_decimals: 1
        filters:
          - multiply: 1000
        id: current_sensor_ch3
        on_value:
          - lambda: |-
              if (id(tracking_enabled_ch3)) {
                  id(mah_usage_ch3) += x * (1.0 / 3600.0);
              }
      power:
        name: "INA3221 Channel 3 Power"
        unit_of_measurement: "mW"
        accuracy_decimals: 1
        filters:
          - multiply: 1000
      bus_voltage:
        name: "INA3221 Channel 3 Bus Voltage"

  - platform: template
    name: "mAh Used Channel 1"
    id: mah_used_ch1
    unit_of_measurement: "mAh"
    accuracy_decimals: 2
    lambda: |-
      return id(mah_usage_ch1);

  - platform: template
    name: "mAh Used Channel 2"
    id: mah_used_ch2
    unit_of_measurement: "mAh"
    accuracy_decimals: 2
    lambda: |-
      return id(mah_usage_ch2);

  - platform: template
    name: "mAh Used Channel 3"
    id: mah_used_ch3
    unit_of_measurement: "mAh"
    accuracy_decimals: 2
    lambda: |-
      return id(mah_usage_ch3);

number:
  - platform: template
    name: "Track Time for Channel 1"
    id: track_time_ch1
    min_value: 10
    max_value: 86400
    step: 10
    initial_value: 3600
    set_action:
      - lambda: |-
          id(tracking_time_ch1) = x;

  - platform: template
    name: "Track Time for Channel 2"
    id: track_time_ch2
    min_value: 10
    max_value: 86400
    step: 10
    initial_value: 3600
    set_action:
      - lambda: |-
          id(tracking_time_ch2) = x;

  - platform: template
    name: "Track Time for Channel 3"
    id: track_time_ch3
    min_value: 10
    max_value: 86400
    step: 10
    initial_value: 3600
    set_action:
      - lambda: |-
          id(tracking_time_ch3) = x;
Leave a Comment