devices.esphome.io
Tuya Smart Star Projector SK20
Tuya Smart Star Projector SK20
Device Type: lightElectrical Standard: usBoard: bk72xx
Notes
Credit for all the work goes to M4GNV5, I've just made a few minor changes to suit my preferences.
Basic Configuration
substitutions: name: galaxy friendly_name: "Star Projector"
esphome: name: ${name} name_add_mac_suffix: false friendly_name: ${friendly_name}
bk72xx: board: wb3s
wifi: ssid: !secret wifi_ssid password: !secret wifi_password domain: !secret domain power_save_mode: none ap: ssid: "ESPHome SSP" password: !secret wifi_fallback_password
api: encryption: key: !secret api_key
web_server: port: 80
ota:
logger:
captive_portal:
text_sensor: - platform: wifi_info ip_address: name: "ESP IP Address" ssid: name: "ESP Connected SSID" mac_address: name: "ESP Mac Wifi Address"
sensor: - platform: uptime name: "Uptime" unit_of_measurement: minutes filters: - lambda: return x / 60.0;
- platform: wifi_signal name: "Signal" update_interval: 60s
light: - platform: rgb name: "Light" id: rgb_light restore_mode: ALWAYS_OFF red: red green: green blue: blue effects: - random: transition_length: 2.5s update_interval: 3s - random: name: Random Slow transition_length: 10s update_interval: 5s - flicker: alpha: 95% intensity: 2.5% - strobe: - pulse: transition_length: 30s min_brightness: 5% max_brightness: 100%
- platform: monochromatic name: "Laser" icon: mdi:laser-pointer id: laser output: laser_pwm restore_mode: ALWAYS_OFF
# Button LED (UP/Down position, no brightness control) - platform: status_led name: "Button Status LED" id: button_led0 output: button_led0_gpio restore_mode: ALWAYS_OFF internal: true
- platform: monochromatic name: "Button LED1" id: button_led1 output: button_led1_pwm restore_mode: ALWAYS_OFF
fan: platform: speed name: "Motor" icon: mdi:rotate-right id: motor output: motor_pwm restore_mode: ALWAYS_OFF
# The template switch representing the device is currently active (laser/light# or motor is ON).switch: - platform: template name: "Main Switch" id: switch_main lambda: "return (id(motor).state || id(laser).current_values.is_on() || id(rgb_light).current_values.is_on());"
# Turn on using the white scene turn_on_action: - select.set_index: id: select_scene index: 3
# Completely turn off the laser, light, motor and button LED turn_off_action: - fan.turn_off: motor - light.turn_off: laser - light.turn_off: rgb_light - light.turn_off: button_led0 - script.stop: script_turn_off_timer
output: - platform: libretiny_pwm id: red pin: P9 inverted: true
- platform: libretiny_pwm id: green pin: P24 inverted: true
- platform: libretiny_pwm id: blue pin: P26 inverted: true
- platform: libretiny_pwm id: laser_pwm pin: P8 inverted: true
- platform: libretiny_pwm id: motor_pwm pin: P6 min_power: 15%
- platform: gpio id: button_led0_gpio pin: P1 inverted: true
- platform: libretiny_pwm id: button_led1_pwm pin: P7 inverted: true
binary_sensor: - platform: gpio pin: number: P14 mode: INPUT_PULLDOWN_16 inverted: true name: "Button"
# Change the scene on short press/click on_click: then: # Do not switch the scene when all the components (switch_main) are # turned off. Allow the scene switching only when the switch_main is # on. When the switch is off, just turn it on. - if: condition: - switch.is_on: switch_main then: - select.next: select_scene else: - switch.turn_on: switch_main
# Turn off after a button long press on_multi_click: - timing: - on for at least 1s then: - switch.turn_off: switch_main
# Turn off the light, laser and motor automatically after a specified delayscript: - id: script_turn_off_timer mode: restart then: - delay: 1h - switch.turn_off: switch_main
select: platform: template name: "Scene" id: select_scene options: - "Scene - Red" - "Scene - Blue" - "Scene - Green" - "Scene - White" - "Scene - Dimmed" initial_option: "Scene - White" optimistic: true on_value: then: # Always reset the timer script - script.stop: script_turn_off_timer - script.execute: script_turn_off_timer
# Make sure the button LED is ON - light.turn_on: id: button_led0
# [INDEX=0]: Scene - Red - if: condition: lambda: "return (id(select_scene).active_index() == 0);" then: - light.turn_on: id: rgb_light brightness: 50% red: 80% green: 0% blue: 50% - light.turn_on: id: laser brightness: 60% - fan.turn_on: id: motor speed: 40
# [INDEX=1]: Scene - Blue - if: condition: lambda: "return (id(select_scene).active_index() == 1);" then: - light.turn_on: id: rgb_light brightness: 50% red: 50% green: 0% blue: 100% - light.turn_on: id: laser brightness: 60% - fan.turn_on: id: motor speed: 40
# [INDEX=2]: Scene - Green - if: condition: lambda: "return (id(select_scene).active_index() == 2);" then: - light.turn_on: id: rgb_light brightness: 50% red: 0% green: 60% blue: 30% - light.turn_on: id: laser brightness: 60% - fan.turn_on: id: motor speed: 40
# [INDEX=3]: Scene - White - if: condition: lambda: "return (id(select_scene).active_index() == 3);" then: - light.turn_on: id: rgb_light brightness: 100% red: 100% green: 100% blue: 100% - light.turn_on: id: laser brightness: 100% - fan.turn_on: id: motor speed: 50
# [INDEX=4]: Scene - Dimmed - if: condition: lambda: "return (id(select_scene).active_index() == 4);" then: - light.turn_on: id: rgb_light brightness: 30% red: 5% green: 5% blue: 5% - light.turn_on: id: laser brightness: 30% - fan.turn_on: id: motor speed: 10