##
## ENM-223-R1 — ESPHome Modbus package (v0.2.0 beta)
##
## Contiguous Input Registers FC04 @0..85 (no Discrete Inputs / FC02):
##   A  0 IO_MASK (LED0-3, BTN4-7, RLY8-9)
##      1 STATUS_FLAGS (b1 linkOk, b3 cfgDirty)
##      2 ALARM_FLAGS (bit=3*ch+kind)
##      3..6 CHIP_EV L1/L2/L3/Total (sag1/ov2/loss4/oci8/freq16/rev32)
##   B  7..9 Urms · 10 Freq · 11 Temp · 12..15 PF · 16..18 Angle · 19..21 THD
##   C  22..29 Currents S32 ×0.001 A (Irms L1-3, IrmsN)
##   D  30..53 Powers S32 (P/Q/S × L1-3-T)
##   E  54..85 Energy U32 (AP/AN/RP/RN × L1-3-T)
## Peaks / Pfund / Pharm / VAh / harmonic energy: WebSerial only (not on Modbus).
##
## Poll split (force_new_range @54 + skip_updates: 29 on every energy sensor):
##   FC04 @0  count=54  every cycle (1 s)     — A..D live measurements
##   FC04 @54 count=32  every 30th cycle      — E energy counters
## Split pays when the slow block is polled ≥ (100 + w) / w times less often than
## the fast one (w = wire time of the slow response). For 32 regs at 19200,
## w ≈ 40 ms → threshold 3.5×. skip_updates: 2 was only 3× (net loss vs merge);
## skip_updates: 29 is 30× — well above threshold, so the split beats an 86-reg
## every-cycle read (~4.7 ms/s energy cost vs ~40 ms/s if merged).
##
## Coils (DIO-style): write-only — no FC01 read-back.
##   Relay cmds 0-1 · Identify 5 · ACK 16-19. Save/Reboot/Reset-energy NOT on Modbus.
##   Public relays = template (state from IO_MASK FC04).
## Parent must supply enm_id / enm_address / enm_prefix (and global modbus_bus).
##

substitutions:
  enm_update_interval: 1s      # HomeMaster default — STD-009
  enm_command_throttle: 0ms    # HomeMaster default — STD-009

modbus_controller:
  - id: ${enm_id}
    address: ${enm_address}
    modbus_id: modbus_bus
    update_interval: ${enm_update_interval}
    command_throttle: ${enm_command_throttle}
    allow_duplicate_commands: false

binary_sensor:
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Link OK"
    register_type: read
    address: 1
    bitmask: 0x0002
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Config dirty"
    register_type: read
    address: 1
    bitmask: 0x0008
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} LED1"
    register_type: read
    address: 0
    bitmask: 0x0001
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} LED2"
    register_type: read
    address: 0
    bitmask: 0x0002
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} LED3"
    register_type: read
    address: 0
    bitmask: 0x0004
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} LED4"
    register_type: read
    address: 0
    bitmask: 0x0008
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} BTN1"
    register_type: read
    address: 0
    bitmask: 0x0010
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} BTN2"
    register_type: read
    address: 0
    bitmask: 0x0020
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} BTN3"
    register_type: read
    address: 0
    bitmask: 0x0040
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} BTN4"
    register_type: read
    address: 0
    bitmask: 0x0080
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    id: ${enm_id}_relay1_state
    name: "${enm_prefix} Relay 1 State"
    internal: true
    register_type: read
    address: 0
    bitmask: 0x0100
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    id: ${enm_id}_relay2_state
    name: "${enm_prefix} Relay 2 State"
    internal: true
    register_type: read
    address: 0
    bitmask: 0x0200
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Alarm L1 (Alarm)"
    register_type: read
    address: 2
    bitmask: 0x0001
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Alarm L1 (Warning)"
    register_type: read
    address: 2
    bitmask: 0x0002
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Alarm L1 (Event)"
    register_type: read
    address: 2
    bitmask: 0x0004
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Alarm L2 (Alarm)"
    register_type: read
    address: 2
    bitmask: 0x0008
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Alarm L2 (Warning)"
    register_type: read
    address: 2
    bitmask: 0x0010
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Alarm L2 (Event)"
    register_type: read
    address: 2
    bitmask: 0x0020
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Alarm L3 (Alarm)"
    register_type: read
    address: 2
    bitmask: 0x0040
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Alarm L3 (Warning)"
    register_type: read
    address: 2
    bitmask: 0x0080
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Alarm L3 (Event)"
    register_type: read
    address: 2
    bitmask: 0x0100
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Alarm Total (Alarm)"
    register_type: read
    address: 2
    bitmask: 0x0200
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Alarm Total (Warning)"
    register_type: read
    address: 2
    bitmask: 0x0400
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Alarm Total (Event)"
    register_type: read
    address: 2
    bitmask: 0x0800
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Chip Sag L1"
    register_type: read
    address: 3
    bitmask: 0x0001
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Chip Overvoltage L1"
    register_type: read
    address: 3
    bitmask: 0x0002
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Chip Phase Loss L1"
    register_type: read
    address: 3
    bitmask: 0x0004
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Chip Overcurrent L1"
    register_type: read
    address: 3
    bitmask: 0x0008
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Chip Sag L2"
    register_type: read
    address: 4
    bitmask: 0x0001
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Chip Overvoltage L2"
    register_type: read
    address: 4
    bitmask: 0x0002
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Chip Phase Loss L2"
    register_type: read
    address: 4
    bitmask: 0x0004
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Chip Overcurrent L2"
    register_type: read
    address: 4
    bitmask: 0x0008
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Chip Sag L3"
    register_type: read
    address: 5
    bitmask: 0x0001
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Chip Overvoltage L3"
    register_type: read
    address: 5
    bitmask: 0x0002
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Chip Phase Loss L3"
    register_type: read
    address: 5
    bitmask: 0x0004
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Chip Overcurrent L3"
    register_type: read
    address: 5
    bitmask: 0x0008
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Chip Sag Total"
    register_type: read
    address: 6
    bitmask: 0x0001
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Chip Overvoltage Total"
    register_type: read
    address: 6
    bitmask: 0x0002
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Chip Phase Loss Total"
    register_type: read
    address: 6
    bitmask: 0x0004
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Chip Overcurrent Total"
    register_type: read
    address: 6
    bitmask: 0x0008
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Chip Frequency Total"
    register_type: read
    address: 6
    bitmask: 0x0010
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Chip Reverse Phase Sequence"
    register_type: read
    address: 6
    bitmask: 0x0020

# ===================== Coils — write-only (DIO pattern, no FC01 read-back) =====================
switch:
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    id: ${enm_id}_relay1_coil
    register_type: coil
    address: 0
    internal: true
    assumed_state: true
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    id: ${enm_id}_relay2_coil
    register_type: coil
    address: 1
    internal: true
    assumed_state: true
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    id: ${enm_id}_cmd_identify
    register_type: coil
    address: 5
    internal: true
    assumed_state: true
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    id: ${enm_id}_ack_l1_coil
    register_type: coil
    address: 16
    internal: true
    assumed_state: true
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    id: ${enm_id}_ack_l2_coil
    register_type: coil
    address: 17
    internal: true
    assumed_state: true
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    id: ${enm_id}_ack_l3_coil
    register_type: coil
    address: 18
    internal: true
    assumed_state: true
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    id: ${enm_id}_ack_total_coil
    register_type: coil
    address: 19
    internal: true
    assumed_state: true

  # Public relays: state from IO_MASK (FC04), command via write-only coils
  - platform: template
    name: "${enm_prefix} Relay 1"
    id: ${enm_id}_relay1
    lambda: |-
      return id(${enm_id}_relay1_state).state;
    turn_on_action:
      - switch.turn_on: ${enm_id}_relay1_coil
    turn_off_action:
      - switch.turn_off: ${enm_id}_relay1_coil
  - platform: template
    name: "${enm_prefix} Relay 2"
    id: ${enm_id}_relay2
    lambda: |-
      return id(${enm_id}_relay2_state).state;
    turn_on_action:
      - switch.turn_on: ${enm_id}_relay2_coil
    turn_off_action:
      - switch.turn_off: ${enm_id}_relay2_coil

button:
  - platform: template
    name: "${enm_prefix} Identify"
    on_press:
      - switch.turn_on: ${enm_id}_cmd_identify
  - platform: template
    name: "${enm_prefix} ACK L1"
    on_press:
      - switch.turn_on: ${enm_id}_ack_l1_coil
  - platform: template
    name: "${enm_prefix} ACK L2"
    on_press:
      - switch.turn_on: ${enm_id}_ack_l2_coil
  - platform: template
    name: "${enm_prefix} ACK L3"
    on_press:
      - switch.turn_on: ${enm_id}_ack_l3_coil
  - platform: template
    name: "${enm_prefix} ACK Total"
    on_press:
      - switch.turn_on: ${enm_id}_ack_total_coil

sensor:
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Urms L1"
    address: 7
    register_type: read
    value_type: U_WORD
    unit_of_measurement: "V"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
      - lambda: "return round(x * 100.0f) / 100.0f;"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Urms L2"
    address: 8
    register_type: read
    value_type: U_WORD
    unit_of_measurement: "V"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
      - lambda: "return round(x * 100.0f) / 100.0f;"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Urms L3"
    address: 9
    register_type: read
    value_type: U_WORD
    unit_of_measurement: "V"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
      - lambda: "return round(x * 100.0f) / 100.0f;"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Line Frequency"
    address: 10
    register_type: read
    value_type: U_WORD
    unit_of_measurement: "Hz"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
      - lambda: "return round(x * 100.0f) / 100.0f;"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Temperature"
    address: 11
    register_type: read
    value_type: S_WORD
    unit_of_measurement: "°C"
    accuracy_decimals: 0
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} PF L1"
    address: 12
    register_type: read
    value_type: S_WORD
    accuracy_decimals: 3
    filters:
      - multiply: 0.001
      - lambda: "return round(x * 1000.0f) / 1000.0f;"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} PF L2"
    address: 13
    register_type: read
    value_type: S_WORD
    accuracy_decimals: 3
    filters:
      - multiply: 0.001
      - lambda: "return round(x * 1000.0f) / 1000.0f;"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} PF L3"
    address: 14
    register_type: read
    value_type: S_WORD
    accuracy_decimals: 3
    filters:
      - multiply: 0.001
      - lambda: "return round(x * 1000.0f) / 1000.0f;"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} PF Total"
    address: 15
    register_type: read
    value_type: S_WORD
    accuracy_decimals: 3
    filters:
      - multiply: 0.001
      - lambda: "return round(x * 1000.0f) / 1000.0f;"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Angle L1"
    address: 16
    register_type: read
    value_type: S_WORD
    unit_of_measurement: "°"
    accuracy_decimals: 1
    filters:
      - multiply: 0.1
      - lambda: "return round(x * 10.0f) / 10.0f;"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Angle L2"
    address: 17
    register_type: read
    value_type: S_WORD
    unit_of_measurement: "°"
    accuracy_decimals: 1
    filters:
      - multiply: 0.1
      - lambda: "return round(x * 10.0f) / 10.0f;"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Angle L3"
    address: 18
    register_type: read
    value_type: S_WORD
    unit_of_measurement: "°"
    accuracy_decimals: 1
    filters:
      - multiply: 0.1
      - lambda: "return round(x * 10.0f) / 10.0f;"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} THD L1"
    address: 19
    register_type: read
    value_type: U_WORD
    unit_of_measurement: "%"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
      - lambda: "return round(x * 100.0f) / 100.0f;"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} THD L2"
    address: 20
    register_type: read
    value_type: U_WORD
    unit_of_measurement: "%"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
      - lambda: "return round(x * 100.0f) / 100.0f;"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} THD L3"
    address: 21
    register_type: read
    value_type: U_WORD
    unit_of_measurement: "%"
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
      - lambda: "return round(x * 100.0f) / 100.0f;"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Irms L1"
    address: 22
    register_type: read
    value_type: S_DWORD
    unit_of_measurement: "A"
    accuracy_decimals: 3
    filters:
      - multiply: 0.001
      - lambda: "return round(x * 1000.0f) / 1000.0f;"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Irms L2"
    address: 24
    register_type: read
    value_type: S_DWORD
    unit_of_measurement: "A"
    accuracy_decimals: 3
    filters:
      - multiply: 0.001
      - lambda: "return round(x * 1000.0f) / 1000.0f;"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Irms L3"
    address: 26
    register_type: read
    value_type: S_DWORD
    unit_of_measurement: "A"
    accuracy_decimals: 3
    filters:
      - multiply: 0.001
      - lambda: "return round(x * 1000.0f) / 1000.0f;"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Irms Neutral"
    address: 28
    register_type: read
    value_type: S_DWORD
    unit_of_measurement: "A"
    accuracy_decimals: 3
    filters:
      - multiply: 0.001
      - lambda: "return round(x * 1000.0f) / 1000.0f;"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} P L1"
    address: 30
    register_type: read
    value_type: S_DWORD
    unit_of_measurement: "W"
    accuracy_decimals: 0
    filters:
      - lambda: "return (float) ((int) round(x));"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} P L2"
    address: 32
    register_type: read
    value_type: S_DWORD
    unit_of_measurement: "W"
    accuracy_decimals: 0
    filters:
      - lambda: "return (float) ((int) round(x));"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} P L3"
    address: 34
    register_type: read
    value_type: S_DWORD
    unit_of_measurement: "W"
    accuracy_decimals: 0
    filters:
      - lambda: "return (float) ((int) round(x));"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} P Total"
    address: 36
    register_type: read
    value_type: S_DWORD
    unit_of_measurement: "W"
    accuracy_decimals: 0
    filters:
      - lambda: "return (float) ((int) round(x));"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Q L1"
    address: 38
    register_type: read
    value_type: S_DWORD
    unit_of_measurement: "var"
    accuracy_decimals: 0
    filters:
      - lambda: "return (float) ((int) round(x));"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Q L2"
    address: 40
    register_type: read
    value_type: S_DWORD
    unit_of_measurement: "var"
    accuracy_decimals: 0
    filters:
      - lambda: "return (float) ((int) round(x));"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Q L3"
    address: 42
    register_type: read
    value_type: S_DWORD
    unit_of_measurement: "var"
    accuracy_decimals: 0
    filters:
      - lambda: "return (float) ((int) round(x));"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Q Total"
    address: 44
    register_type: read
    value_type: S_DWORD
    unit_of_measurement: "var"
    accuracy_decimals: 0
    filters:
      - lambda: "return (float) ((int) round(x));"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} S L1"
    address: 46
    register_type: read
    value_type: S_DWORD
    unit_of_measurement: "VA"
    accuracy_decimals: 0
    filters:
      - lambda: "return (float) ((int) round(x));"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} S L2"
    address: 48
    register_type: read
    value_type: S_DWORD
    unit_of_measurement: "VA"
    accuracy_decimals: 0
    filters:
      - lambda: "return (float) ((int) round(x));"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} S L3"
    address: 50
    register_type: read
    value_type: S_DWORD
    unit_of_measurement: "VA"
    accuracy_decimals: 0
    filters:
      - lambda: "return (float) ((int) round(x));"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} S Total"
    address: 52
    register_type: read
    value_type: S_DWORD
    unit_of_measurement: "VA"
    accuracy_decimals: 0
    filters:
      - lambda: "return (float) ((int) round(x));"
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    id: ${enm_id}_e_ap_l1
    name: "${enm_prefix} Active Energy Import L1"
    address: 54
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: "Wh"
    device_class: energy
    state_class: total_increasing
    accuracy_decimals: 0
    force_new_range: true
    skip_updates: 29
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Active Energy Import L2"
    address: 56
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: "Wh"
    device_class: energy
    state_class: total_increasing
    accuracy_decimals: 0
    skip_updates: 29
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Active Energy Import L3"
    address: 58
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: "Wh"
    device_class: energy
    state_class: total_increasing
    accuracy_decimals: 0
    skip_updates: 29
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    id: ${enm_id}_e_ap_total
    name: "${enm_prefix} Active Energy Import Total"
    address: 60
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: "Wh"
    device_class: energy
    state_class: total_increasing
    accuracy_decimals: 0
    skip_updates: 29
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Active Energy Export L1"
    address: 62
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: "Wh"
    device_class: energy
    state_class: total_increasing
    accuracy_decimals: 0
    skip_updates: 29
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Active Energy Export L2"
    address: 64
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: "Wh"
    device_class: energy
    state_class: total_increasing
    accuracy_decimals: 0
    skip_updates: 29
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Active Energy Export L3"
    address: 66
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: "Wh"
    device_class: energy
    state_class: total_increasing
    accuracy_decimals: 0
    skip_updates: 29
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    id: ${enm_id}_e_an_total
    name: "${enm_prefix} Active Energy Export Total"
    address: 68
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: "Wh"
    device_class: energy
    state_class: total_increasing
    accuracy_decimals: 0
    skip_updates: 29
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Reactive Energy Import L1"
    address: 70
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: "varh"
    state_class: total_increasing
    accuracy_decimals: 0
    skip_updates: 29
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Reactive Energy Import L2"
    address: 72
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: "varh"
    state_class: total_increasing
    accuracy_decimals: 0
    skip_updates: 29
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Reactive Energy Import L3"
    address: 74
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: "varh"
    state_class: total_increasing
    accuracy_decimals: 0
    skip_updates: 29
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    id: ${enm_id}_e_rp_total
    name: "${enm_prefix} Reactive Energy Import Total"
    address: 76
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: "varh"
    state_class: total_increasing
    accuracy_decimals: 0
    skip_updates: 29
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Reactive Energy Export L1"
    address: 78
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: "varh"
    state_class: total_increasing
    accuracy_decimals: 0
    skip_updates: 29
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Reactive Energy Export L2"
    address: 80
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: "varh"
    state_class: total_increasing
    accuracy_decimals: 0
    skip_updates: 29
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    name: "${enm_prefix} Reactive Energy Export L3"
    address: 82
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: "varh"
    state_class: total_increasing
    accuracy_decimals: 0
    skip_updates: 29
  - platform: modbus_controller
    modbus_controller_id: ${enm_id}
    id: ${enm_id}_e_rn_total
    name: "${enm_prefix} Reactive Energy Export Total"
    address: 84
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: "varh"
    state_class: total_increasing
    accuracy_decimals: 0
    skip_updates: 29
  - platform: template
    name: "${enm_prefix} Active Energy Net Total"
    unit_of_measurement: "Wh"
    device_class: energy
    state_class: total_increasing
    accuracy_decimals: 0
    lambda: |-
      if (!id(${enm_id}_e_ap_total).has_state() || !id(${enm_id}_e_an_total).has_state()) return {};
      return id(${enm_id}_e_ap_total).state - id(${enm_id}_e_an_total).state;
  - platform: template
    name: "${enm_prefix} Reactive Energy Net Total"
    unit_of_measurement: "varh"
    state_class: total_increasing
    accuracy_decimals: 0
    lambda: |-
      if (!id(${enm_id}_e_rp_total).has_state() || !id(${enm_id}_e_rn_total).has_state()) return {};
      return id(${enm_id}_e_rp_total).state - id(${enm_id}_e_rn_total).state;

