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