HA WiFi Power Meter | Esp32 + JSY-MK-194G AC 1P 20mA-100mA Modubus-RTU

JSY-MK-194G home assistant esp32

What I’ve used:

JSY-MK-194G (buy at this link)

ESP32-WROOM-32D (buy at this link)

4 dupont cables


ESPHOME Code

esphome:
  name: power-meter
  friendly_name: Power Meter

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "your key"

ota:
  - platform: esphome
    password: "your password"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Power-Meter Fallback Hotspot"
    password: "your password"

captive_portal:
    
#JSY energy meter protocol
uart:
  id: mod_bus
  tx_pin: GPIO17
  rx_pin: GPIO16
  baud_rate: 4800
  stop_bits: 1
 
modbus:
  id: modbus1
 
modbus_controller:
  - id: jsymk
    #modbus device address
    address: 0x1
    modbus_id: modbus1
    update_interval: 12s
    command_throttle: 50ms

binary_sensor:
# Connection status
  - platform: status
    name: "Status"
    id: connection_status
 
sensor:
# First channel voltage
  - platform: modbus_controller
    modbus_controller_id: jsymk
    id: voltage1
    name: "Voltage"
    icon: mdi:alpha-v-box
    device_class: energy
    address: 0x0048
    unit_of_measurement: "V"
    register_type: holding
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.0001
    register_count: 1
    response_size: 4
 
# First channel current
  - platform: modbus_controller
    modbus_controller_id: jsymk
    id: current1
    name: "Current 1"
    icon: mdi:current-ac
    device_class: energy
    address: 0x0049
    unit_of_measurement: "A"
    register_type: holding
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.0001
    register_count: 1
    response_size: 4
 
# First channel power
  - platform: modbus_controller
    modbus_controller_id: jsymk
    id: power1
    name: "Power 1"
    icon: mdi:lightning-bolt
    device_class: energy
    address: 0x004A
    unit_of_measurement: "W"
    register_type: holding
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.0001
    register_count: 1
    response_size: 4
 
# First channel energy
  - platform: modbus_controller
    modbus_controller_id: jsymk
    id: energy1
    name: "Energy 1"
    icon: mdi:lightning-bolt
    device_class: energy
    address: 0x004B
    unit_of_measurement: "kWh"
    state_class: total
    register_type: holding
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.0001
    register_count: 1
    response_size: 4
 
# First channel power factor
  - platform: modbus_controller
    modbus_controller_id: jsymk
    id: powerfactor1
    name: "Power Factor 1"
    icon: mdi:alpha-p-box
    device_class: energy
    address: 0x004C
    register_type: holding
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.001
    register_count: 1
    response_size: 4
 
# First channel negative active energy
  - platform: modbus_controller
    modbus_controller_id: jsymk
    id: negativeactiveenergy1
    #name: "Negative Active Energy 1"
    icon: mdi:lightning-bolt
    device_class: energy
    address: 0x004D
    unit_of_measurement: "kWh"
    state_class: total
    register_type: holding
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.0001
    register_count: 1
    response_size: 4
 
# First channel current direction
  - platform: modbus_controller
    modbus_controller_id: jsymk
    id: direction1
    #name: "Current Direction 1"
    icon: mdi:arrow-right
    device_class: energy
    address: 0x004E
    register_type: holding
    value_type: U_DWORD
    accuracy_decimals: 0
    bitmask: 0X01000000
    filters:
      - multiply: 1
    register_count: 1
    response_size: 4
 
# Frequency
  - platform: modbus_controller
    modbus_controller_id: jsymk
    id: frequency
    name: "Frequency"
    icon: mdi:sine-wave
    device_class: energy
    address: 0x004F
    unit_of_measurement: "Hz"
    register_type: holding
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.01
    register_count: 1
    response_size: 4
 
# Second channel voltage
  - platform: modbus_controller
    modbus_controller_id: jsymk
    id: voltage2
    #name: "Voltage 2"
    icon: mdi:alpha-v-box
    device_class: energy
    address: 0x0050
    unit_of_measurement: "V"
    register_type: holding
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.0001
    register_count: 1
    response_size: 4
 
# Second channel current
  - platform: modbus_controller
    modbus_controller_id: jsymk
    id: current2
    name: "Current 2"
    icon: mdi:current-ac
    device_class: energy
    address: 0x0051
    unit_of_measurement: "A"
    register_type: holding
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.0001
    register_count: 1
    response_size: 4
 
# Second channel power
  - platform: modbus_controller
    modbus_controller_id: jsymk
    id: power2
    name: "Power 2"
    icon: mdi:lightning-bolt
    device_class: energy
    address: 0x0052
    unit_of_measurement: "W"
    register_type: holding
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.0001
    register_count: 1
    response_size: 4
 
# Second channel energy
  - platform: modbus_controller
    modbus_controller_id: jsymk
    id: energy2
    name: "Energy 2"
    icon: mdi:lightning-bolt
    device_class: energy
    address: 0x0053
    unit_of_measurement: "kWh"
    state_class: total
    register_type: holding
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.0001
    register_count: 1
    response_size: 4
 
# Second channel power factor
  - platform: modbus_controller
    modbus_controller_id: jsymk
    id: powerfactor2
    name: "Power Factor 2"
    icon: mdi:alpha-p-box
    device_class: energy
    address: 0x0054
    register_type: holding
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.001
    register_count: 1
    response_size: 4
 
# Second channel negative active energy
  - platform: modbus_controller
    modbus_controller_id: jsymk
    id: negativeactiveenergy2
    #name: "Negative Active Energy 2"
    icon: mdi:lightning-bolt
    device_class: energy
    address: 0x0055
    unit_of_measurement: "kWh"
    state_class: total
    register_type: holding
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.0001
    register_count: 1
    response_size: 4
 
# Second channel current direction
  - platform: modbus_controller
    modbus_controller_id: jsymk
    id: direction2
    #name: "Current Direction 2"
    icon: mdi:arrow-right
    device_class: energy
    address: 0x004E
    register_type: holding
    value_type: U_DWORD
    accuracy_decimals: 0
    bitmask: 0X00010000
    filters:
      - multiply: 1
    register_count: 1
    response_size: 4