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: 0Zasadniczą część konfiguracji przygotował u/erwinbamert, ja dostosowałem ją do GPIO.