To disassemble the lamp, simply remove the three screws hidden underneath the rubber pads on the bottom panel, then follow the Tasmota documentation ↗[Archive] ↗ to solder the necessary wires to the ESP module:
Black: GND, to any of PIN3, 5, 6, 7, 15, 16, 19 or 20
White: Vcc (+3.3 V), to PIN8
Gray: UART RxD, to PIN17
Purple: UART TxD, to PIN18
Also short PIN4 (GPIO0) and PIN3 (GND), then short PIN9 (RST) and PIN7 (GND) with tweezers and release, to reset the ESP module and enter flashing mode.
substitutions: default_color_temperature: '250.0' # adjust it to your liking (in mireds, 1000000 / 4000 K = 250 mireds)esphome: name: lamp comment: 'Xiaomi Mijia desk lamp'esp8266: board: esp01_1m # 1 MB flash size restore_from_flash: truelogger: level: WARN baud_rate: 115200wifi: fast_connect: true networks: - ssid: !secret wifi_ssid bssid: !secret wifi_bssid password: !secret wifi_password domain: !secret domain_nameapi:ota: password: !secret ota_passwordbutton: # for hard restart - platform: restart id: restart_button name: 'Restart Lamp' entity_category: diagnosticglobals: - id: color_temperature type: float restore_value: no initial_value: ${default_color_temperature}sensor: - platform: rotary_encoder id: rotation pin_a: 13 pin_b: 12 resolution: 2 on_value: then: - if: condition: # check if the rotary encoder is pressed while rotating lambda: 'return id(rotary_encoder_button).state;' then: # if it's pressed, change color temperature - lambda: |- auto min_temp = id(light_).get_traits().get_min_mireds(); auto max_temp = id(light_).get_traits().get_max_mireds(); auto cur_temp = id(light_).current_values.get_color_temperature(); id(color_temperature) = max(min_temp, min(max_temp, cur_temp + (x * 10))); auto call = id(light_).turn_on(); call.set_color_temperature(id(color_temperature)); call.perform(); else: # if it's not pressed, change brightness - light.dim_relative: id: light_ relative_brightness: !lambda 'return x / 25.0;' # reset rotation - sensor.rotary_encoder.set_value: id: rotation value: 0 internal: truebinary_sensor: - platform: gpio id: rotary_encoder_button pin: number: 2 inverted: true on_multi_click: # on double click, reset color temperature to default - timing: - ON for at most 1s - OFF for at most 1s - ON for at most 1s - OFF for at least 0.2s then: - lambda: |- id(color_temperature) = ${default_color_temperature}; auto call = id(light_).turn_on(); call.set_color_temperature(id(color_temperature)); call.set_transition_length(500); // adjust it to your liking (in milliseconds) call.perform(); # on single click, toggle light - timing: - ON for at most 1s - OFF for at least 0.5s then: - light.toggle: id: light_ transition_length: 0.5s # adjust it to your liking internal: true # use the reset button for hard restarting - platform: gpio id: reset_button pin: number: 14 inverted: true internal: true on_release: then: - button.press: restart_button internal: trueoutput: # cold white channel - platform: esp8266_pwm id: output_cold pin: 4 # warm white channel - platform: esp8266_pwm id: output_warm pin: 5light: - platform: cwww id: light_ name: 'Lamp' icon: mdi:desk-lamp cold_white: output_cold warm_white: output_warm cold_white_color_temperature: 6500 K warm_white_color_temperature: 2700 K default_transition_length: 0s constant_brightness: true gamma_correct: 0 on_turn_on: - light.control: id: light_ state: on color_temperature: !lambda 'return id(color_temperature);' on_turn_off: - lambda: 'id(color_temperature) = id(light_).current_values.get_color_temperature();' restore_mode: RESTORE_DEFAULT_OFF
yaml
After resetting the ESP module, wait a minute for Home Assistant to automatically discover the new ESPHome device, then simply select to adopt it. After that, you can add a native light card with brightness and color temperature control to Lovelace.
As the lamp has external power supply, and the LEDs are in the upper part of the lamp, the temperature of the base is the same as of the ambient, and by its nature the lamp is situated on your desk, so it’s a perfect place for temp+humidity measurements.
So I connected a DHT22 temperature and humidity sensor to GPIO0. However, after some time I found it’s not working well, the temperature reading would rise by about 5 ℃ as soon as the lamp was turned on.