Als Felix bei mir zu Besuch war, haben wir die Zeit genutzt um eine Tuya Deckenlampe von der Cloud zu befreien und sie mit Hilfe von ESPHome lokal in Home Assistant zu integrieren.
- BKZO moderne Smart-LED-Deckenleuchte mit Ventilator, Deckenventilator mit Lampe,... *(* = Affiliate-Link / Bildquelle: Amazon-Partnerprogramm)
Die Lampe besitzt von Haus aus nur warm- und kaltweiße LEDs. Da ich persönlich die Lampe für mein Büro einsetzen möchte und ich da eigentlich ausschließlich RGB-Beleuchtung nutze, mussten wir hier natürlich auch noch eine RGB-Beleuchtung nachrüsten. Die RGB-LEDs werden aktuell leider noch vom Ventilator und den weißen LEDs gestört, heist ich muss mich entscheiden, nutze ich die nachgerüstete RGB-Beleuchtung oder möchte ich den Ventilator und/oder die weißen LEDs verwenden.
Damit kann ich aber vorerst ganz gut leben. Ich werde aber bei Gelegenheit noch einmal versuchen, auch das noch in den Griff zu bekommen.
Das ganze Projekt habe ich in einem kurzen Video natürlich auch kurz zusammengefasst.
ESPHome Code:
substitutions:
device_name: "buro-lampe-venti"
friendly_name: "Bürolampe mit Ventilator"
wifi_ssid: !secret wifi_ssid
wifi_password: !secret wifi_password
# --------------------------------------------
# --------------------------------------------
led_cw_pin: GPIO4
led_ww_pin: GPIO5
fan_direction_pin: GPIO14
fan_speed_pin: GPIO12
buzzer_pin: GPIO15
rgb_led_pin: GPIO13
led_count: "81"
last_led_index: "80" # immer 1 kleiner als led_count!
min_fan_frequency: "30"
max_fan_frequency: "200"
# --------------------------------------------
# --------------------------------------------
esphome:
name: ${device_name}
friendly_name: ${friendly_name}
# Wer möchte, kann hier noch einen Boot-Sound aktivieren
# on_boot:
# priority: -100
# then:
# - rtttl.play: 'MissionImp:d=16,o=6,b=95:32d,32d#,32d,32d#,32d,32d#,32d,32d#,32d,32d,32d#,32e,32f,32f#,32g,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,a#,g,2d,32p,a#,g,2c#,32p,a#,g,2c,a#5,8c,2p,32p,a#5,g5,2f#,32p,a#5,g5,2f,32p,a#5,g5,2e,d#,8d'
esp8266:
board: esp01_1m
logger:
api:
ota:
wifi:
ssid: ${wifi_ssid}
password: ${wifi_password}
ap:
ssid: ${device_name}_AP
password: ${wifi_password}
captive_portal:
rtttl:
output: rtttl_out
fan:
- platform: speed
output: fan_cw
direction_output: fan_clk
name: ${device_name} Ventilator
restore_mode: ALWAYS_OFF
id: my_fan
on_speed_set:
- output.esp8266_pwm.set_frequency:
id: fan_cw
frequency: !lambda |
int min = ${min_fan_frequency};
int max = ${max_fan_frequency};
return map(id(my_fan).speed, 0, 100, min, max );
light:
- platform: neopixelbus
name: ${device_name} RGB Licht
type: GRB
variant: WS2812
pin: ${rgb_led_pin}
num_leds: ${led_count}
restore_mode: ALWAYS_OFF
default_transition_length: 1s
internal: true
id: led_stripe
- platform: cwww
name: ${device_name} Lampe
gamma_correct: 2.8
cold_white: cold_white
warm_white: warm_white
restore_mode: ALWAYS_OFF
cold_white_color_temperature: 6200 K
warm_white_color_temperature: 2800 K
id: cwww_light
on_turn_on:
- light.turn_on:
id: cwww_light
cold_white: 30%
warm_white: 80%
- platform: partition
name: "Lüfter LEDs"
segments:
# Use first 10 LEDs from the light with ID light1
- id: led_stripe
from: 0
to: 11
id: fan_leds
effects:
- addressable_rainbow:
name: Rainbow
speed: 7
width: 25
- addressable_color_wipe:
- random:
- platform: partition
name: ${device_name} RGB Lampe
segments:
- id: led_stripe
from: 12
to: 80
id: rgb_leds
effects:
- addressable_rainbow:
name: Rainbow
speed: 15
width: 35
- addressable_color_wipe:
- random:
output:
- platform: esp8266_pwm
id: cold_white_int
pin: ${led_cw_pin}
max_power: 85%
- platform: esp8266_pwm
id: warm_white_int
pin: ${led_ww_pin}
max_power: 85%
- platform: esp8266_pwm
pin: ${buzzer_pin}
id: rtttl_out
- platform: gpio
pin: ${fan_direction_pin}
id: fan_clk
- platform: esp8266_pwm
pin: ${fan_speed_pin}
max_power: 85%
id: fan_cw
frequency: 50Hz
# lässt die weißen LEDs nicht aktivieren, wenn RGB-LEDs aktiv sind (um Störungen zu vermeiden)
- platform: template
id: cold_white
type: float
write_action:
- output.set_level:
id: cold_white_int
level: !lambda |
if(id(led_stripe).current_values.is_on() || id(rgb_leds).current_values.is_on()) {
return 0;
} else {
return state;
}
# lässt die weißen LEDs nicht aktivieren, wenn RGB-LEDs aktiv sind (um Störungen zu vermeiden)
- platform: template
id: warm_white
type: float
write_action:
- output.set_level:
id: warm_white_int
level: !lambda |
if(id(led_stripe).current_values.is_on() || id(rgb_leds).current_values.is_on()) {
return 0;
} else {
return state;
}
ESPHome Tutorial Serie
Falls Ihr noch mehr über ESPHome wissen wollt, werft doch einfach mal einen Blick in meine ESPHome Tutorial Serie auf YouTube:
Playlist:
https://www.youtube.com/playlist?list=PLtEjuZQyAkqGAvHjsM6G295CsKXetm-_Z
Ansonsten findet Ihr auch jede Menge Informationen rund um ESPHome hier im Wiki: