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.
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.
YouTube-Video
Lädt Inhalte von YouTube. Durch Klick stimmen Sie dem Laden externer Inhalte zu.
ESPHome Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
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:
Ansonsten findet Ihr auch jede Menge Informationen rund um ESPHome hier im Wiki: