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.
ESPHome Code:
1substitutions:
2 device_name: "buro-lampe-venti"
3 friendly_name: "Bürolampe mit Ventilator"
4
5 wifi_ssid: !secret wifi_ssid
6 wifi_password: !secret wifi_password
7
8
9# --------------------------------------------
10# --------------------------------------------
11 led_cw_pin: GPIO4
12 led_ww_pin: GPIO5
13 fan_direction_pin: GPIO14
14 fan_speed_pin: GPIO12
15 buzzer_pin: GPIO15
16 rgb_led_pin: GPIO13
17
18 led_count: "81"
19 last_led_index: "80" # immer 1 kleiner als led_count!
20
21 min_fan_frequency: "30"
22 max_fan_frequency: "200"
23
24# --------------------------------------------
25# --------------------------------------------
26
27esphome:
28 name: ${device_name}
29 friendly_name: ${friendly_name}
30# Wer möchte, kann hier noch einen Boot-Sound aktivieren
31# on_boot:
32# priority: -100
33# then:
34# - 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'
35
36
37esp8266:
38 board: esp01_1m
39
40logger:
41
42api:
43
44ota:
45
46wifi:
47 ssid: ${wifi_ssid}
48 password: ${wifi_password}
49 ap:
50 ssid: ${device_name}_AP
51 password: ${wifi_password}
52
53captive_portal:
54
55
56rtttl:
57 output: rtttl_out
58
59
60fan:
61 - platform: speed
62 output: fan_cw
63 direction_output: fan_clk
64 name: ${device_name} Ventilator
65 restore_mode: ALWAYS_OFF
66 id: my_fan
67 on_speed_set:
68 - output.esp8266_pwm.set_frequency:
69 id: fan_cw
70 frequency: !lambda |
71 int min = ${min_fan_frequency};
72 int max = ${max_fan_frequency};
73 return map(id(my_fan).speed, 0, 100, min, max );
74
75
76light:
77 - platform: neopixelbus
78 name: ${device_name} RGB Licht
79 type: GRB
80 variant: WS2812
81 pin: ${rgb_led_pin}
82 num_leds: ${led_count}
83 restore_mode: ALWAYS_OFF
84 default_transition_length: 1s
85 internal: true
86 id: led_stripe
87
88 - platform: cwww
89 name: ${device_name} Lampe
90 gamma_correct: 2.8
91 cold_white: cold_white
92 warm_white: warm_white
93 restore_mode: ALWAYS_OFF
94 cold_white_color_temperature: 6200 K
95 warm_white_color_temperature: 2800 K
96 id: cwww_light
97 on_turn_on:
98 - light.turn_on:
99 id: cwww_light
100 cold_white: 30%
101 warm_white: 80%
102
103
104 - platform: partition
105 name: "Lüfter LEDs"
106 segments:
107 # Use first 10 LEDs from the light with ID light1
108 - id: led_stripe
109 from: 0
110 to: 11
111 id: fan_leds
112 effects:
113 - addressable_rainbow:
114 name: Rainbow
115 speed: 7
116 width: 25
117 - addressable_color_wipe:
118 - random:
119
120 - platform: partition
121 name: ${device_name} RGB Lampe
122 segments:
123 - id: led_stripe
124 from: 12
125 to: 80
126 id: rgb_leds
127 effects:
128 - addressable_rainbow:
129 name: Rainbow
130 speed: 15
131 width: 35
132 - addressable_color_wipe:
133 - random:
134
135
136output:
137 - platform: esp8266_pwm
138 id: cold_white_int
139 pin: ${led_cw_pin}
140 max_power: 85%
141
142 - platform: esp8266_pwm
143 id: warm_white_int
144 pin: ${led_ww_pin}
145 max_power: 85%
146
147 - platform: esp8266_pwm
148 pin: ${buzzer_pin}
149 id: rtttl_out
150
151 - platform: gpio
152 pin: ${fan_direction_pin}
153 id: fan_clk
154
155 - platform: esp8266_pwm
156 pin: ${fan_speed_pin}
157 max_power: 85%
158 id: fan_cw
159 frequency: 50Hz
160
161 # lässt die weißen LEDs nicht aktivieren, wenn RGB-LEDs aktiv sind (um Störungen zu vermeiden)
162 - platform: template
163 id: cold_white
164 type: float
165 write_action:
166 - output.set_level:
167 id: cold_white_int
168 level: !lambda |
169 if(id(led_stripe).current_values.is_on() || id(rgb_leds).current_values.is_on()) {
170 return 0;
171 } else {
172 return state;
173 }
174
175 # lässt die weißen LEDs nicht aktivieren, wenn RGB-LEDs aktiv sind (um Störungen zu vermeiden)
176 - platform: template
177 id: warm_white
178 type: float
179 write_action:
180 - output.set_level:
181 id: warm_white_int
182 level: !lambda |
183 if(id(led_stripe).current_values.is_on() || id(rgb_leds).current_values.is_on()) {
184 return 0;
185 } else {
186 return state;
187 }
