esphome RGB Bulbs and Fly Sprayer
This commit is contained in:
@@ -0,0 +1,258 @@
|
||||
##########################################################################################
|
||||
##########################################################################################
|
||||
# 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 (8–20%)
|
||||
- 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 (6–14%)
|
||||
- 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();
|
||||
Reference in New Issue
Block a user