Skip to content

Instantly share code, notes, and snippets.

@racerxdl
Created December 15, 2025 21:23
Show Gist options
  • Select an option

  • Save racerxdl/9e0dea6491daf579688b8a3655c00a55 to your computer and use it in GitHub Desktop.

Select an option

Save racerxdl/9e0dea6491daf579688b8a3655c00a55 to your computer and use it in GitHub Desktop.
KWS-306F Esphome profile
substitutions:
device: smartmetervz55
friendly_name: "Medidor VZ55"
esphome:
name: smartmetervz55
friendly_name: ${friendly_name}
on_boot:
priority: 800.0
then:
- switch.turn_on: global_power_switch
- delay: 2s
- switch.turn_on: refresh
bk72xx:
board: cbu
# Enable logging
logger:
level: INFO
baud_rate: 0
uart:
tx_pin: P11
rx_pin: P10
baud_rate: 9600
<<: !include network.yaml
time:
- platform: sntp
id: sntp_time
timezone: America/Sao_Paulo
servers:
- a.st1.ntp.br
- a.ntp.br
- gps.ntp.br
on_time_sync:
then:
- logger.log: "Synchronized sntp clock"
- platform: homeassistant
id: homeassistant_time
tuya:
time_id: sntp_time
button:
- platform: restart
name: ${friendly_name} Restart
# Force refresh otherwise the RISC-V onboard doesnt let us know up to date data
interval:
- interval: 10s
startup_delay: 30s
then:
- switch.turn_off: refresh
- delay: 100ms
- switch.turn_on: refresh
- delay: 100ms
- switch.turn_off: refresh
- delay: 100ms
- switch.turn_on: refresh
switch:
- platform: "tuya"
name: ${friendly_name} Power Switch
id: global_power_switch
switch_datapoint: 16
- platform: tuya
name: ${friendly_name} Clear runtime
switch_datapoint: 119
- platform: tuya
name: ${friendly_name} Clear energy
switch_datapoint: 120
- platform: "tuya"
name: ${friendly_name} Refresh
id: refresh
switch_datapoint: 134
sensor:
- platform: tuya
name: ${friendly_name} Runtime
id: runtime
sensor_datapoint: 106
unit_of_measurement: "min"
accuracy_decimals: 0
- platform: tuya
name: ${friendly_name} Network Frequency
id: network_frequency
sensor_datapoint: 107
unit_of_measurement: "Hz"
accuracy_decimals: 2
- platform: tuya
name: ${friendly_name} Temperature
id: temperature
sensor_datapoint: 108
unit_of_measurement: "°C"
accuracy_decimals: 1
- platform: tuya
name: ${friendly_name} Voltage A
id: voltage_a
sensor_datapoint: 125
unit_of_measurement: "V"
device_class: voltage
accuracy_decimals: 2
filters:
- lambda: |-
return x * 0.01;
# Current A (DP 126 scale 1000)
- platform: tuya
name: ${friendly_name} Current A
id: current_a
sensor_datapoint: 126
unit_of_measurement: "A"
device_class: current
accuracy_decimals: 3
filters:
- lambda: |-
return x * 0.001;
# Power A (DP 127) unit W
- platform: tuya
name: ${friendly_name} Power A
id: power_a
sensor_datapoint: 127
unit_of_measurement: "W"
accuracy_decimals: 0
# Voltage B (DP 128 scale 100)
- platform: tuya
name: ${friendly_name} Voltage B
id: voltage_b
sensor_datapoint: 128
unit_of_measurement: "V"
device_class: voltage
accuracy_decimals: 2
filters:
- lambda: |-
return x * 0.01;
# Current B (DP 129 scale 1000)
- platform: tuya
name: ${friendly_name} Current B
id: current_b
sensor_datapoint: 129
unit_of_measurement: "A"
device_class: current
accuracy_decimals: 3
filters:
- lambda: |-
return x * 0.001;
# Power B (DP 130) W
- platform: tuya
name: ${friendly_name} Power B
id: power_b
sensor_datapoint: 130
unit_of_measurement: "W"
accuracy_decimals: 0
# Voltage C (DP 131 scale 100)
- platform: tuya
name: ${friendly_name} Voltage C
id: voltage_c
sensor_datapoint: 131
unit_of_measurement: "V"
device_class: voltage
accuracy_decimals: 2
filters:
- lambda: |-
return x * 0.01;
# Current C (DP 132 scale 1000)
- platform: tuya
name: ${friendly_name} Current C
id: current_c
sensor_datapoint: 132
unit_of_measurement: "A"
device_class: current
accuracy_decimals: 3
filters:
- lambda: |-
return x * 0.001;
# Power C (DP 133) W
- platform: tuya
name: ${friendly_name} Power C
id: power_c
sensor_datapoint: 133
unit_of_measurement: "W"
accuracy_decimals: 0
# Main device energy (DP 136, scale: 100 -> divide by 100)
- platform: tuya
name: ${friendly_name} Energy meter Energy
id: energy_meter_energy
sensor_datapoint: 136
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
accuracy_decimals: 2
filters:
- lambda: |-
return x * 0.01;
# Power (DP 135), unit W
- platform: tuya
name: ${friendly_name} Energy meter Power
id: energy_meter_power
sensor_datapoint: 135
unit_of_measurement: "W"
accuracy_decimals: 0
# Energy consumed A (DP 137, scale 100)
- platform: tuya
name: ${friendly_name} Energy consumed A
id: energy_consumed_a
sensor_datapoint: 137
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
accuracy_decimals: 2
filters:
- lambda: |-
return x * 0.01;
# Energy consumed B (DP 138, scale 100)
- platform: tuya
name: ${friendly_name} Energy consumed B
id: energy_consumed_b
sensor_datapoint: 138
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
accuracy_decimals: 2
filters:
- lambda: |-
return x * 0.01;
# Energy consumed C (DP 139, scale 100)
- platform: tuya
name: ${friendly_name} Energy consumed C
id: energy_consumed_c
sensor_datapoint: 139
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
accuracy_decimals: 2
filters:
- lambda: |-
return x * 0.01;
# PF
# Power factor (diagnostic DP 101 scale 100)
- platform: tuya
name: ${friendly_name} Power factor (overall)
id: power_factor_all
sensor_datapoint: 101
unit_of_measurement: "PF"
accuracy_decimals: 2
filters:
- lambda: |-
return x * 0.01;
# Power factor A (DP 124 scale 100)
- platform: tuya
name: ${friendly_name} Power factor A
id: power_factor_a
sensor_datapoint: 124
unit_of_measurement: "PF"
accuracy_decimals: 2
filters:
- lambda: |-
return x * 0.01;
# Power factor B (DP 103 scale 100)
- platform: tuya
name: ${friendly_name} Power factor B
id: power_factor_b
sensor_datapoint: 103
unit_of_measurement: "PF"
accuracy_decimals: 2
filters:
- lambda: |-
return x * 0.01;
# Power factor C (DP 122 scale 100)
- platform: tuya
name: ${friendly_name} Power factor C
id: power_factor_c
sensor_datapoint: 122
unit_of_measurement: "PF"
accuracy_decimals: 2
filters:
- lambda: |-
return x * 0.01;
# Total energy A (DP 102 scale 100)
- platform: tuya
name: ${friendly_name} Total energy A
id: total_energy_a
sensor_datapoint: 102
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
accuracy_decimals: 2
filters:
- lambda: |-
return x * 0.01;
# Total energy B (DP 104 scale 100)
- platform: tuya
name: ${friendly_name} Total energy B
id: total_energy_b
sensor_datapoint: 104
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
accuracy_decimals: 2
filters:
- lambda: |-
return x * 0.01;
# Total energy C (DP 105 scale 100)
- platform: tuya
name: ${friendly_name} Total energy C
id: total_energy_c
sensor_datapoint: 105
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
accuracy_decimals: 2
filters:
- lambda: |-
return x * 0.01;
number:
# Overvoltage (DP 110) V
- platform: tuya
name: ${friendly_name} Overvoltage
number_datapoint: 110
min_value: 130
max_value: 290
step: 1
# Low voltage (DP 111) V
- platform: tuya
name: ${friendly_name} Low voltage
number_datapoint: 111
min_value: 85
max_value: 220
step: 1
# Overcurrent (DP 112) A - mapping: scale 100
- platform: tuya
name: ${friendly_name} Overcurrent
number_datapoint: 112
min_value: 0
max_value: 9999
step: 1
multiply: 100 # original mapping used scale: 100
# Over power (DP 113) kW - mapping scale 100 (use multiply to match tuya's integer behaviour)
- platform: tuya
name: ${friendly_name} Over power
number_datapoint: 113
min_value: 0
max_value: 2320
step: 1
multiply: 100
# Over energy (DP 114) kWh
- platform: tuya
name: ${friendly_name} Over energy
number_datapoint: 114
min_value: 0
max_value: 99999999
step: 1
# Over temperature (DP 115) °C
- platform: tuya
name: ${friendly_name} Over temperature
number_datapoint: 115
min_value: 0
max_value: 150
step: 1
# Screen timeout (DP 118) min
- platform: tuya
name: ${friendly_name} Screen timeout
number_datapoint: 118
min_value: 0
max_value: 59
step: 1
# Timer (DP 109) seconds, range -1..86400
- platform: tuya
name: ${friendly_name} Timer
number_datapoint: 109
min_value: -1
max_value: 86400
step: 1
# Voltage balance (DP 116) V
- platform: tuya
name: ${friendly_name} Voltage balance
number_datapoint: 116
min_value: 0
max_value: 100
step: 1
# Current balance (DP 117) A
- platform: tuya
name: ${friendly_name} Current balance
number_datapoint: 117
min_value: 0
max_value: 800
step: 1%
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment