Files
zorruno-homeassistant/esphome/esp-rgblampbulb1.yaml
T
2025-09-10 21:07:31 +12:00

259 lines
9.5 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
##########################################################################################
##########################################################################################
# XCRhom.tech E27 9W RGBWW Smart Bulb
#
# # V1.0 2025-09-09 Initial Version
#
# Device https://www.aliexpress.com/item/1005007226730234.html
# Tasmota name AiYaTo-RGBCW
#
# GPIO Config
# -----
# - Pin map mirrors original Tasmota config:
# PWM1=GPIO12 (R), PWM2=GPIO14 (G), PWM3=GPIO5 (B),
# PWM4=GPIO4 (CW), PWM5=GPIO13 (WW, inverted).
#
# NOTES
#
##########################################################################################
##########################################################################################
##########################################################################################
# SPECIFIC DEVICE VARIABLE SUBSTITUTIONS
# If NOT using a secrets file, just replace these with the passwords etc (in quotes)
##########################################################################################
substitutions:
# Device Naming
device_name: esp-rgblampbulb1
friendly_name: "RGBWW 9W E27 Smart Bulb"
description_comment: "RGBWW light bulb in bedroom 3 lamp"
device_area: "Bedroom 3" # Allows ESP device to be automatically linked to an 'Area' in Home Assistant.
# Passwords If NOT using a secrets file, just replace these with the passwords etc (in quotes)
api_key: !secret esp-api_key # unfortunately you can't use substitutions inside secrets names
ota_pass: !secret esp-ota_pass # unfortunately you can't use substitutions inside secrets names
static_ip_address: !secret esp-rgblampbulb1_ip
# Adjust the color temperature here (200 mired is approx 5000k)
white_temp: "3000K"
# Device Settings
log_level: "INFO" # Define logging level: NONE, ERROR, WARN, INFO, DEBUG (Default), VERBOSE, VERY_VERBOSE
update_interval: "60s" # update time for for general sensors etc
# Adjust the ON/OFF times for flashing.
# 600ms on, 400ms off => 60% ON, 40% OFF duty cycle
on_time_ms: "500ms"
off_time_ms: "500ms"
##########################################################################################
# PACKAGES: Included Common Packages
# https://esphome.io/components/packages.html
##########################################################################################
# Comment some of these out where not needed, eg MQTT, Web portal, SNTP, General Sensors
##########################################################################################
packages:
common_wifi: !include
file: common/network_common.yaml
vars:
local_device_name: "${device_name}"
local_static_ip_address: "${static_ip_address}"
local_ota_pass: "${ota_pass}"
common_api: !include
file: common/api_common.yaml
vars:
local_api_key: "${api_key}"
#common_webportal: !include
# file: common/webportal_common.yaml
common_mqtt: !include
file: common/mqtt_common.yaml
vars:
local_device_name: "${device_name}"
common_sntp: !include
file: common/sntp_common.yaml
common_general_sensors: !include
file: common/sensors_common.yaml
vars:
local_friendly_name: "${friendly_name}"
local_update_interval: "${update_interval}"
#########################################################################################
# ESPHome
# https://esphome.io/components/esphome.html
#########################################################################################
esphome:
name: ${device_name}
friendly_name: ${friendly_name}
comment: ${description_comment} # appears on the esphome page in HA
on_boot:
priority: 800
then:
- light.turn_on:
id: my_light
brightness: 80%
color_temperature: ${white_temp} # e.g. "3000K" or "370 mireds"
transition_length: 3s
#########################################################################################
# ESP Platform and Framework
# https://esphome.io/components/esp32.html
#########################################################################################
esp8266:
board: esp01_1m
#early_pin_init: False # Initialise pins early to known values. Recommended false where switches are involved. Defaults to True.
board_flash_mode: dout # Default is dout
#restore_from_flash: true # restore some values on reboot
mdns:
disabled: false # Disabling will make the build file smaller (and it is still available via static IP)
preferences:
flash_write_interval: 20s
#########################################################################################
# ESPHome Logging Enable
# https://esphome.io/components/logger.html
#########################################################################################
logger:
level: INFO # INFO Level suggested, or DEBUG for testing
#baud_rate: 0 # set to 0 for no logging via UART, needed if you are using it for other serial things (eg PZEM)
#esp8266_store_log_strings_in_flash: false
#tx_buffer_size: 64
##########################################################################################
# OUTPUT COMPONENT
# https://esphome.io/components/output/esp8266_pwm.html
##########################################################################################
output:
- platform: esp8266_pwm
id: output_red # PWM1 → GPIO12
pin: GPIO12
frequency: 1500 Hz
- platform: esp8266_pwm
id: output_green # PWM2 → GPIO14
pin: GPIO14
frequency: 1500 Hz
- platform: esp8266_pwm
id: output_blue # PWM3 → GPIO05
pin: GPIO05
frequency: 1500 Hz
# Typically one channel is cold white...
- platform: esp8266_pwm
id: output_cold_white # PWM4 → GPIO04
pin: GPIO04
frequency: 1500 Hz
# ...and one channel is warm white (inverted on GPIO13).
- platform: esp8266_pwm
id: output_warm_white # PWM5 → GPIO13
pin: GPIO13
frequency: 1500 Hz
inverted: true
##########################################################################################
# LIGHT COMPONENT
# https://esphome.io/components/light/
##########################################################################################
light:
- platform: rgbww
name: ${friendly_name}
id: my_light
red: output_red
green: output_green
blue: output_blue
cold_white: output_cold_white
warm_white: output_warm_white
# Keep total output reasonable on 9W bulbs and avoid mixing RGB with WW simultaneously.
constant_brightness: true
color_interlock: true
# Typical white temperature mapping for RGBWW
cold_white_color_temperature: 6500 K
warm_white_color_temperature: 2700 K
# Ensure it always powers on (and with our desired effect).
restore_mode: ALWAYS_ON
# Optional: small gamma tweak for nicer dimming curves
gamma_correct: 2.4
# You can omit this or set it to zero for no fade on effect changes.
default_transition_length: 0s
######################################################################################
# CALM EFFECTS
# - Night Light: steady warm, ~3% brightness
# - Breathe (Soft): slow, gentle brightness wave on current color
# - Amber Glow: very gentle warm amber wave
# - Blue Calm: subtle cool blue drift
# - Warm Dim: static warm preset around 15%
######################################################################################
effects:
# Night Light (steady warm ~3%)
- lambda:
name: "Night Light"
update_interval: 2s
lambda: |-
auto call = id(my_light).turn_on();
call.set_brightness(0.03f);
// 2700K ≈ 370 mireds
call.set_color_temperature(370.0f);
call.set_transition_length(1000);
call.perform();
# Breathe (Soft) — gentle pulse on the *current* color
- pulse:
name: "Breathe (Soft)"
transition_length: 3s
update_interval: 3s
min_brightness: 5%
max_brightness: 35%
# Amber Glow — very gentle warm wave (820%)
- lambda:
name: "Amber Glow"
update_interval: 500ms
lambda: |-
static float t = 0.0f;
t += 0.5f; // seconds step (approx)
float phase = (sinf(t * 2.0f * (3.14159f/16.0f)) + 1.0f) / 2.0f; // 16s cycle
float b = 0.08f + phase * 0.12f; // 8%..20%
auto call = id(my_light).turn_on();
call.set_brightness(b);
// Warm amber tone via WW channel (keep RGB off)
call.set_color_temperature(400.0f); // ≈ 2500K-2800K feel
call.set_transition_length(800);
call.perform();
# Blue Calm — soft cool tint, tiny drift (614%)
- lambda:
name: "Blue Calm"
update_interval: 1000ms
lambda: |-
static float t = 0.0f;
t += 1.0f;
float phase = (sinf(t * 2.0f * (3.14159f/20.0f)) + 1.0f) / 2.0f; // 20s cycle
float b = 0.06f + phase * 0.08f; // 6%..14%
auto call = id(my_light).turn_on();
call.set_brightness(b);
// Gentle cool tint using RGB to keep it soft
call.set_rgb(0.45f, 0.55f, 1.00f);
call.set_transition_length(1200);
call.perform();
# Warm Dim — static warm preset (~15%)
- lambda:
name: "Warm Dim"
update_interval: 5s
lambda: |-
auto call = id(my_light).turn_on();
call.set_brightness(0.15f);
call.set_color_temperature(360.0f); // ~2777K
call.set_transition_length(800);
call.perform();