Nieco ponad rok temu, po zmianie biurka na takie bez nadstawki, nie miałem możliwości montażu żarówki Xiaomi Yeelight YLDP02YL, której używałem do tej pory. z racji tego, że był to czas remontu i musiałem przenieść się do piwnicy, praca przy komputerze bez jakiejkolwiek lampki była uciążliwa. Chcąc zachować możliwość sterowania światłem z jednej aplikacji, wybrałem chyba jedyną dostępną wtedy lampkę biurkową z ekosystemu, czyli Xiaomi Mi Desk Lamp MJTD01YL.
Budowa
Xiaomi Mi Desk Lamp wyposażona jest w 42 diody ciepłobiałe i zimnobiałe, zamontowane naprzemiennie, zamontowane za matową pleksą, która dodatkowo rozprasza światło. Za sterowanie odpowiada aplikacja Yeelight lub Mi Home oraz enkoder, którym można sterować jasnością, temperaturą barwową, przełączać lampkę oraz wywoływać np. zapisany preset. Niestety, regulowana jest tylko w jednej płaszczyźnie. Moduł LED połączono z resztą lampki płaskim, pomarańczowym przewodem, sprawia wrażenie solidnego. w tylnej części podstawy znajduje się gniazdo na wtyk od zasilacza, a pod spodem przycisk reset.
Xiaomi Mi Desk Lamp - parametry techniczne
Temperatura barwowa: 2700K - 6500K Strumień świetlny: maks. 520 lm Moc: 6W Żywotność: 25 000h Łączność: WiFi 802.11n 2.4GHz Wysokość: 445 mm Szerokość: 150 mm Waga: 800 g
Możliwości modyfikacji
To chyba najważniejszy punkt - za sterowanie lampką odpowiada moduł ESP8266, dzięki któremu lampkę w prosty sposób można przerobić, stosując np. Tasmotę lub ESP Home, korzystając z template, który przygotowałem - niestety, na Tasmocie zdarzały mi się samoczynne resety do ustawień fabrycznych, dodatkowo, obsługę enkodera trzeba było wkompilować przy każdej aktualizacji. Poradnik dotyczący flashowania znajduje się tutaj.
Template do ESPhome
esphome:
name: midesklamp
platform: ESP8266
board: esp01_1m
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_pass
ap:
ssid: !secret fallback_ssid
password: !secret fallback_pass
captive_portal:
logger:
api:
password: !secret midesklamp_pass
ota:
password: !secret midesklamp_pass
sensor:
- platform: rotary_encoder
id: rotation
pin_a: GPIO13
pin_b: GPIO12
resolution: 2
on_value:
then:
- if:
condition:
lambda: 'return id(button).state;'
then:
- lambda: |-
auto min_temp = id(light1).get_traits().get_min_mireds();
auto max_temp = id(light1).get_traits().get_max_mireds();
auto cur_temp = id(light1).current_values.get_color_temperature();
auto new_temp = max(min_temp, min(max_temp, cur_temp + (x*20)));
auto call = id(light1).turn_on();
call.set_color_temperature(new_temp);
call.perform();
else:
- light.dim_relative:
id: light1
relative_brightness: !lambda |-
return x / 10.0;
- sensor.rotary_encoder.set_value:
id: rotation
value: 0
binary_sensor:
- platform: gpio
id: button
pin:
number: GPIO2
inverted: True
mode: INPUT_PULLUP
on_click:
then:
- if:
condition:
light.is_on: light1
then:
- light.turn_off:
id: light1
else:
- light.turn_on:
id: light1
brightness: 50%
color_temperature: 2700 K
output:
- platform: esp8266_pwm
pin: GPIO4
id: output_cw
- platform: esp8266_pwm
pin: GPIO5
id: output_ww
light:
- platform: cwww
id: light1
default_transition_length: 0s
constant_brightness: true
name: "Lights"
cold_white: output_cw
warm_white: output_ww
cold_white_color_temperature: 6500 K
warm_white_color_temperature: 2700 K
gamma_correct: 0
Zasadniczą część konfiguracji przygotował u/erwinbamert, ja dostosowałem ją do GPIO. 





