devices.esphome.io
RGB Smart Plug 16A with power monitoring
RGB Smart Plug 16A with power monitoring
Device Type: plugElectrical Standard: euBoard: esp8266
This plug can be found under many brand names (Lonsonho, Avatto, Vansware, … ) Identified by the packaging and the sticker inside the plug. At this time seems to be only EU plug with 16A, RGB color led and power metering.
More info: https://templates.blakadder.com/XS-A12.html https://tasmota.github.io/docs/#/devices/RGB-Smart-Plug-16A
GPIO Pinout
Pin | Function |
---|---|
GPIO00 | PWM1 red |
GPIO02 | PWM3 blue |
GPIO04 | PWM2 green |
GPIO05 | BL0937 CF |
GPIO12 | HLWBL SELi |
GPIO14 | HLWBL CF1 |
GPIO15 | Relay1 |
Basic Configuration
Most of this code is from from https://devices.esphome.io/devices/awp04l/
# Check or edit all secrets to match yours.# Power metering isn't calibrated.
substitutions: devicename: rgb_smart_plug_16a friendly_name: RGB Smart Plug 16A device_description: Energy Monitoring 16A Smart Plug with button and RGB led.
esphome: name: $devicename comment: ${device_description} platform: ESP8266 board: esp01_1m
wifi: ssid: !secret wifi_ssid password: !secret wifi_password fast_connect: on #we only have one WiFi AP so just use the first one that matches # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: $devicename password: !secret esphome_backup_ap_password
captive_portal:
# Enable logginglogger: baud_rate: 0 #disable UART logging since we aren't connected to GPIO1 TX
# Web server can be removed after enabling HA APIweb_server: port: 80
ota: password: !secret ota_password
# Enable Home Assistant APIapi: encryption: key: !secret encryption_key
# Enable time component for use by daily power sensortime: - platform: homeassistant id: homeassistant_time
sensor: # Reports how long the device has been powered (in minutes) - platform: uptime name: ${friendly_name} Uptime filters: - lambda: return x / 60.0; unit_of_measurement: minutes
# Reports the WiFi signal strength - platform: wifi_signal name: ${friendly_name} Wifi Signal update_interval: 60s
# Reports the Current, Voltage, and Power used by the plugged-in device (not counting this plug's own usage of about 0.8W/0.019A, so subtract those when calibrating with this plugged into a Kill-A-Watt type meter) - platform: hlw8012 sel_pin: number: GPIO12 inverted: True cf_pin: GPIO5 cf1_pin: GPIO14 current_resistor: 0.001 #The value of the shunt resistor for current measurement. Defaults to the Sonoff POW’s value 0.001 ohm. # voltage_divider: 2401 # Commented out, using default power: name: ${friendly_name} Power unit_of_measurement: W id: wattage filters: - delta: 10 # Don't report if change is less than 10W from previous reported, make it smaller if you got smaller load - calibrate_linear: # Map 0.0 (from sensor) to 0.0 (true value) - 0.0 -> 0.0 #Need to keep 0 mapped to 0 for when connected device is not drawing any power - 16.9 -> 5.7 # -0.8W from just this plug current: name: ${friendly_name} Current unit_of_measurement: A filters: - delta: 1 - calibrate_linear: # Map 0.0 (from sensor) to 0.0 (true value) - 0.0 -> 0.0 #Need to keep 0 mapped to 0 for when connected device is not drawing any power - 0.0376 -> 0.025 # -0.019A from just this plug, very raw calibration voltage: name: ${friendly_name} Voltage unit_of_measurement: V filters: - delta: 2 - calibrate_linear: # Map 0.0 (from sensor) to 0.0 (true value) - 0.0 -> 0.0 #Don't care if 0 reading aligns with 0 real Volts since we won't ever measure that - 574.78 -> 228.0 #load was on change_mode_every: 1 #Skips first reading after each change, so this will double the update interval. Default 8 update_interval: 10s #10s setting => 20 second effective update rate for Power, 40 second for Current and Voltage. Default 60s
# Reports the total Power so-far each day, resets at midnight, see https://esphome.io/components/sensor/total_daily_energy.html - platform: total_daily_energy name: ${friendly_name} Total Daily Energy power_id: wattage filters: - multiply: 0.001 ## convert Wh to kWh unit_of_measurement: kWh
binary_sensor: # Reports if this device is Connected or not # - platform: status # name: ${friendly_name} Status
# Button on the side is pressed and then toggle relay - platform: gpio device_class: power pin: number: GPIO13 inverted: True name: ${friendly_name} Button # Name to make button visible in HA on_press: - switch.toggle: relay
text_sensor: # Reports the ESPHome Version with compile date - platform: version name: ${friendly_name} ESPHome Version
# Reports detailed wifi info, can be commented out - platform: wifi_info ip_address: name: ${friendly_name} IP Address # ssid: # Some additional wifi info that is not normally needed # name: ${friendly_name} Connected SSID # bssid: # name: ${friendly_name} Connected BSSID
switch: # Relay itself - platform: gpio name: ${friendly_name} pin: GPIO15 id: relay restore_mode: RESTORE_DEFAULT_OFF #Try to restore relay state after reboot/power-loss event. #RESTORE_DEFAULT_OFF (Default) - Attempt to restore state and default to OFF if not possible to restore. Uses flash write cycles. #RESTORE_DEFAULT_ON - Attempt to restore state and default to ON. Uses flash write cycles. #ALWAYS_OFF - Always initialize the pin as OFF on bootup. Does not use flash write cycles. #ALWAYS_ON - Always initialize the pin as ON on bootup. Does not use flash write cycles. on_turn_on: # Action when relay is turned on - script.execute: led_power_on on_turn_off: # Action when relay is turned off - script.execute: led_relay_off
output: # Output GPIOs for RGB led - platform: esp8266_pwm # Red id: red_output pin: GPIO0 - platform: esp8266_pwm # Green id: green_output pin: GPIO4 - platform: esp8266_pwm # Blue id: blue_output pin: GPIO2
light: # RGB light - platform: rgb name: ${friendly_name} Light id: rgb_light red: red_output green: green_output blue: blue_output default_transition_length: 0.5s restore_mode: ALWAYS_OFF effects: # List some effects - strobe - flicker - random
# Blink the red light if we aren't connected to WiFi. Could use https://esphome.io/components/status_led.html instead but then we couldn't use the red light for other things as well.# Only if not connected after 30sinterval: - interval: 2000ms then: - if: condition: for: time: 30s condition: not: wifi.connected: then: - light.turn_on: id: rgb_light brightness: 100% red: 100% green: 0% blue: 0% flash_length: 250ms
script: - id: led_relay_off # Normal operation when relay is off then: - light.turn_off: id: rgb_light - id: led_power_on # Normal operation when relay is on then: - light.turn_on: id: rgb_light brightness: 80% red: 0% green: 100% blue: 50%