You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

192 lines
6.8 KiB

# --------------------------------------------------------------------------
# A few practical configuration substitutions.
# --------------------------------------------------------------------------
substitutions:
name: bedside_lamp
friendly_name: Bedside Lamp
transition_length: 500ms
# Derive component identifiers, based on the device name.
id_light: ${name}
id_front_panel_output: ${name}_front_panel_output
id_power_button: ${name}_power_button
id_color_button: ${name}_color_button
id_slider_level: ${name}_slider_level
id_light_mode: ${name}_light_mode
# --------------------------------------------------------------------------
# Use your own preferences for these components.
# --------------------------------------------------------------------------
wifi:
ssid: "Your-SSID"
password: "Your-WiFi-Network-Password"
# Enable fallback hotspot (for captive portal) in case wifi connection fails
ap:
ssid: "ESPHome $friendly_name"
password: "Password-For-Connecting-To-Captive-Portal"
captive_portal:
api:
password: "Password-To-Link-HomeAssistant-To-This-Device"
ota:
password: "Password-For-Flashing-This-Device-Over-The-Air"
# The log level can be raised when needed for debugging the device. For
# production, a low log level is recommended. Mainly because high volume
# log output might interfere with the API/WiFi connection stability.
# So when raising the log level, beware that you might see dropped
# connections from Home Assistant and the network log viewer.
logger:
level: WARN
# --------------------------------------------------------------------------
# Configuration specific for the Xiaomi Mijia Bedside Lamp 2.
# This is just an example. You can of course modify it for your own needs.
# --------------------------------------------------------------------------
# Special platform + package are used for enabling unicore and disabling the
# efuse mac crc check. These two changes are required for the ESP32-WROOM-32D
# chip that is used in the device.
esphome:
name: ${name}
platform: ESP32
board: esp32doit-devkit-v1
platformio_options:
platform: espressif32@3.2.0
platform_packages: |-4
framework-arduinoespressif32 @ https://github.com/pauln/arduino-esp32.git#solo-no-mac-crc/1.0.6
light:
# This component controls the LED lights of the device.
- platform: xiaomi_bslamp2
id: ${id_light}
name: ${friendly_name} RGBW Light
default_transition_length: ${transition_length}
# When the brightness is changed, then update the level indication
# on the front panel accordingly. In night light mode, turn off
# the front panel illumination.
on_brightness:
- if:
condition:
text_sensor.state:
id: ${id_light_mode}
state: night
then:
- output.set_level:
id: ${id_front_panel_output}
level: 0
else:
- output.set_level:
id: ${id_front_panel_output}
level: !lambda return x;
# You can use any effects that you like. These are just examples.
effects:
- random:
name: "Slow Random"
transition_length: 30s
update_interval: 30s
- random:
name: "Fast Random"
transition_length: 3s
update_interval: 3s
# You can define one or more groups of presets. These presets can
# be activated using various "preset.activate" action options.
# The presets can for example be used to mimic the behavior of the
# original firmware (tapping the color button = go to next preset,
# holding the color button = switch between RGB and white light mode).
# These bindings have been setup below, using the binary_sensor for
# the color button.
presets:
rgb:
red: { red: 100%, green: 0%, blue: 0% }
green: { red: 0%, green: 100%, blue: 0% }
blue: { red: 0%, green: 0%, blue: 100% }
yellow: { red: 100%, green: 100%, blue: 0% }
purple: { red: 100%, green: 0%, blue: 100% }
randomize: { effect: Fast Random }
white:
cold: { color_temperature: 153 mireds }
chilly: { color_temperature: 275 mireds }
luke: { color_temperature: 400 mireds }
warm: { color_temperature: 588 mireds }
# This text sensor propagates the currently active light mode.
# The possible light modes are: "off", "rgb", "white" and "night".
text_sensor:
- platform: xiaomi_bslamp2
name: ${name} Light Mode
id: ${id_light_mode}
# This output controls the front panel illumination + level indication.
# Value 0.0 turns off the illumination.
# Other values (up to 1.0) turn on the illumination and set the level
# indication to the requested level.
output:
- platform: xiaomi_bslamp2
id: ${id_front_panel_output}
# Binary sensors can be created for handling front panel touch / release
# events. To specify what part of the front panel to look at, the "part"
# parameter can be set to: "any" (i.e. the default), "power button",
# "color button" or "slider".
binary_sensor:
# When touching the power button, toggle the light.
# When holding the power button, turn on night light mode.
- platform: xiaomi_bslamp2
id: ${id_power_button}
part: power button
on_multi_click:
- timing:
- ON for at most 0.8s
then:
- light.toggle: ${id_light}
- timing:
- ON for at least 0.8s
then:
- light.turn_on:
id: ${id_light}
red: 1
green: 1
blue: 1
brightness: 0.01
# When touching the color button, acivate the next preset.
# When holding the color button, activate the next preset group.
- platform: xiaomi_bslamp2
id: ${id_color_button}
part: color button
on_multi_click:
- timing:
- ON for at most 0.6s
then:
- preset.activate:
next: preset
- timing:
- ON for at least 0.6s
then:
- preset.activate:
next: group
# This sensor component publishes touch events for the front panel slider.
# The published value represents the level at which the slider was touched.
# By default, values range from 0.01 to 1.00 (in 20 steps). This range can
# be modified using the "range_from" and "range_to" parameters.
sensor:
# When the slider is touched, update the brightness.
# Brightness 0.01 initiates the light night mode, which has already
# been handled above. Therefore, brightness starts from 0.02 here,
# so night mode is not triggered from the slider.
- platform: xiaomi_bslamp2
id: ${id_slider_level}
range_from: 0.02
on_value:
then:
- light.turn_on:
id: ${id_light}
brightness: !lambda return x;