substitutions: name: kauf-plug # **** CHANGE DEVICE NAME TO SOMETHING UNIQUE PER DEVICE. RENAME YAML FILE TO SAME NAME. **** # **** USE DASHES (-) INSTEAD OF SPACES OR UNDERSCORE (_). USE ONLY LOWER CASE LETTERS. **** friendly_name: Kauf Plug # **** CHANGE FRIENDLY NAME TO SOMETHING UNIQUE PER DEVICE **** esp8266: # https://esphome.io/components/esp8266.html board: esp01_1m restore_from_flash: true esphome: name: $name project: name: "kauf.plf10" version: "1.82" wifi: # **** ENTER WI-FI CREDENTIALS HERE, USING SECRETS.YAML RECOMMENDED **** ssid: initial_ap2 # !secret wifi_ssid password: asdfasdfasdfasdf # !secret wifi_pass # Uncomment below to set a static IP # manual_ip: # static_ip: !secret kauf_bulb_rgb_ip_address # gateway: !secret wifi_gateway # subnet: !secret wifi_subnet # dns1: !secret wifi_dns1 # use_address allows wireless programming through dashboard. # Set to the bulb's IP Address. Remove after programming. # use_address: 192.168.86.244 # default is 20, 17 is recommended. output_power: 17 logger: # Enable logging # baud_rate: 0 # Disable UART logging since TX pad not easily available api: # Enable Home Assistant API # password: !secret api_password # optional password field for Home Assistant API. ota: # password: !secret ota_password # optional password for OTA updates. debug: # outputs additional debug info when logs start web_server: # web server allows access to device with a web browser # auth: # optional login details for web interface # username: admin # password: !secret web_server_password # red led, blink when not connected to WiFi or Home Assistant status_led: pin: number: GPIO0 inverted: true binary_sensor: # button input toggles relay and thereby blue led - platform: gpio id: button_in name: $friendly_name Button pin: number: GPIO13 mode: INPUT_PULLUP inverted: true entity_category: '' on_press: then: - if: condition: # only toggle relay if button is enabled lambda: 'return (id(select_button).state == "Enabled");' then: switch.toggle: relay # indicates whether plugged-in device is running based on configurable threshold. - platform: template id: in_use name: ${friendly_name} Device In Use switch: # blue LED follows relay power state - platform: gpio id: blue_led pin: number: GPIO2 inverted: true # relay output - platform: gpio id: relay name: $friendly_name pin: GPIO4 entity_category: '' # automatically make blue led equal relay state on_turn_on: - if: condition: # only if blue LED enabled lambda: 'return (id(select_led).state == "Enabled");' then: switch.turn_on: blue_led on_turn_off: - switch.turn_off: blue_led button: - platform: restart id: restart_button name: $friendly_name Restart Firmware entity_category: diagnostic disabled_by_default: true # clock input from Home Assistant used to calculate total daily energy time: - platform: homeassistant id: homeassistant_time sensor: # Power monitoring sensors output to Home Assistant - 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. voltage_divider: 2401 # The value of the voltage divider on the board as (R_upstream + R_downstream) / R_downstream. power: name: ${friendly_name} Power unit_of_measurement: W id: wattage filters: - calibrate_linear: - 0.0 -> 0.0 - 333.8 -> 60 # value with 60W bulb. on_value: # set or clear in_use template binary sensor depending on whether power usage is over threshold - if: condition: lambda: 'return (x >= id(threshold).state);' then: - binary_sensor.template.publish: id: in_use state: ON else: - binary_sensor.template.publish: id: in_use state: OFF current: name: ${friendly_name} Current unit_of_measurement: A filters: - calibrate_linear: - 0.0 -> 0.0 - 0.6 -> 0.515 # value with 60W bulb. voltage: name: ${friendly_name} Voltage unit_of_measurement: V filters: - calibrate_linear: - 0.0 -> 0.0 - 302.1 -> 117.1 # Tested using a meter change_mode_every: 1 update_interval: 10s # 20 second effective update rate for Power, 40 second for Current and Voltage. # 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 number: # used as a threshold for whether the plugged-in devices is running. - platform: template name: ${friendly_name} Use Threshold min_value: 1 max_value: 100 step: 1 initial_value: 3 id: threshold entity_category: config optimistic: true # required for changing value from home assistant restore_value: true unit_of_measurement: Watt(s) mode: box on_value: - if: # set or clear in_use template binary sensor depending on whether power usage is above threshold condition: lambda: 'return (id(wattage).state >= x);' then: - binary_sensor.template.publish: id: in_use state: ON else: - binary_sensor.template.publish: id: in_use state: OFF select: # option to disable button - platform: template name: $friendly_name Button id: select_button optimistic: true options: - Enabled - Disabled initial_option: Enabled restore_value: true icon: mdi:circle-double entity_category: config # option to disable blue LED - platform: template name: $friendly_name LED id: select_led optimistic: true entity_category: config options: - Enabled - Disabled initial_option: Enabled restore_value: true icon: mdi:led-on on_value: then: - if: condition: lambda: 'return ( (id(select_led).state == "Enabled") && id(relay).state );' then: switch.turn_on: blue_led else: switch.turn_off: blue_led # Send IP Address to HA text_sensor: - platform: wifi_info ip_address: name: $friendly_name IP Address