esphome RGB Bulbs and Fly Sprayer

This commit is contained in:
root
2025-09-10 21:07:31 +12:00
parent 04b7d53b6f
commit a27b79fbd9
10 changed files with 1441 additions and 120 deletions
+258
View File
@@ -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 (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();