devices.esphome.io

Novostella 20W Flood Light

Novostella 20W Flood Light

Device Type: light
Electrical Standard: us
Board: esp8266

5-channel PWM RGBWW smart flood light, 2700k-6500k tunable white with RGB colors, 20W, 2000LM, 120V AC, IP66 Waterproof, natively Tuya/Smart Life, works with Tuya-convert to flash to ESPHome. FCC-ID is 2AI5T-SFGD-002.

This template has been updated with "comment:" and "captive_portal:" feautures added in ESPHome v. 1.14

GPIO Pinout

PinFunction
GPIO4Red channel
GPIO5Cold White channel
GPIO12Green channel
GPIO13Warm White channel
GPIO14Blue channel

Basic Configuration

#Novostella 20W Flood Light, https://amzn.to/3d6NVEY
#https://fccid.io/2AI5T-SFGD-002
#https://blakadder.github.io/templates/novostella_20W_flood.html
substitutions:
device_name: novoflood
device_description: 20W RGBWW flood light
friendly_name: Novostella Flood Light
esphome:
name: ${device_name}
comment: ${device_description}
platform: ESP8266
board: esp01_1m
wifi:
ssid: !secret wifissid
password: !secret wifipass
fast_connect: on #we only have one WiFi AP so just use the first one that matches
ap: #since we listed an SSID above, this AP mode will only enable if no WiFi connection could be made
ssid: ${friendly_name}_AP
password: !secret wifipass
captive_portal:
# Enable logging
logger:
baud_rate: 0 #disable UART logging since we aren't connected to GPIO1 TX
# Enable Home Assistant API
api:
# Enable OTA updates
ota:
# Enable web server
web_server:
port: 80
binary_sensor:
# Reports if this device is Connected or not
- platform: status
name: ${friendly_name} Status
sensor:
# Reports the WiFi signal strength
- platform: wifi_signal
name: ${friendly_name} Signal
update_interval: 60s
# Reports how long the device has been powered (in minutes)
- platform: uptime
name: ${friendly_name} Uptime
filters:
- lambda: return x / 60.0;
unit_of_measurement: minutes
text_sensor:
# Reports the ESPHome Version with compile date
- platform: version
name: ${friendly_name} ESPHome Version
output:
- platform: esp8266_pwm
id: red
pin: GPIO4
inverted: False
- platform: esp8266_pwm
id: green
pin: GPIO12
inverted: False
- platform: esp8266_pwm
id: blue
pin: GPIO14
inverted: False
- platform: esp8266_pwm
id: cold_white
pin: GPIO5
inverted: False
- platform: esp8266_pwm
id: warm_white
pin: GPIO13
inverted: False
light:
- platform: rgbww
name: ${friendly_name}
red: red
green: green
blue: blue
cold_white: cold_white
warm_white: warm_white
cold_white_color_temperature: 6500 K
warm_white_color_temperature: 2700 K
id: thelight
color_interlock: true #Prevent white leds being on at the same time as RGB leds
restore_mode: ALWAYS_ON #Start with light on after reboot/power-loss event, so that it works from a dumb lightswitch
effects:
- random:
- strobe:
- flicker:
alpha: 50% #The percentage that the last color value should affect the light. More or less the “forget-factor” of an exponential moving average. Defaults to 95%.
intensity: 50% #The intensity of the flickering, basically the maximum amplitude of the random offsets. Defaults to 1.5%.
- lambda:
name: Throb
update_interval: 1s
lambda: |-
static int state = 0;
auto call = id(thelight).turn_on();
// Transtion of 1000ms = 1s
call.set_transition_length(1000);
if (state == 0) {
call.set_brightness(1.0);
} else {
call.set_brightness(0.01);
}
call.perform();
state += 1;
if (state == 2)
state = 0;
# Blink the light if we aren't connected to WiFi.
interval:
- interval: 500ms
then:
- if:
condition:
not:
wifi.connected:
then:
- light.turn_on:
id: thelight
brightness: 50%
transition_length: 0s
- delay: 250ms
- light.turn_off:
id: thelight
transition_length: 250ms

Split Configuration

If you have several of these bulbs, you may prefer to keep the shared code in one file and only put the device-specific code in the files for each bulb.

In novoflood_common.yaml:

# Common code for Novostella 20W Flood Lights
#Novostella 20W Flood Light, https://amzn.to/3d6NVEY
#https://fccid.io/2AI5T-SFGD-002
#https://blakadder.github.io/templates/novostella_20W_flood.html
esphome:
name: ${device_name}
comment: ${device_description}
platform: ESP8266
board: esp01_1m
wifi:
ssid: !secret wifissid
password: !secret wifipass
fast_connect: on #we only have one WiFi AP so just use the first one that matches
ap: #since we listed an SSID above, this AP mode will only enable if no WiFi connection could be made
ssid: ${friendly_name}_AP
password: !secret wifipass
captive_portal:
# Enable logging
logger:
baud_rate: 0 #disable UART logging since we aren't connected to GPIO1 TX
# Enable Home Assistant API
api:
# Enable OTA updates
ota:
# Enable web server
web_server:
port: 80
binary_sensor:
# Reports if this device is Connected or not
- platform: status
name: ${friendly_name} Status
sensor:
# Reports the WiFi signal strength
- platform: wifi_signal
name: ${friendly_name} Signal
update_interval: 60s
# Reports how long the device has been powered (in minutes)
- platform: uptime
name: ${friendly_name} Uptime
filters:
- lambda: return x / 60.0;
unit_of_measurement: minutes
text_sensor:
# Reports the ESPHome Version with compile date
- platform: version
name: ${friendly_name} ESPHome Version
output:
- platform: esp8266_pwm
id: red
pin: GPIO4
inverted: False
- platform: esp8266_pwm
id: green
pin: GPIO12
inverted: False
- platform: esp8266_pwm
id: blue
pin: GPIO14
inverted: False
- platform: esp8266_pwm
id: cold_white
pin: GPIO5
inverted: False
- platform: esp8266_pwm
id: warm_white
pin: GPIO13
inverted: False
light:
- platform: rgbww
name: ${friendly_name}
red: red
green: green
blue: blue
cold_white: cold_white
warm_white: warm_white
cold_white_color_temperature: 6500 K
warm_white_color_temperature: 2700 K
id: thelight
color_interlock: true #Prevent white leds being on at the same time as RGB leds
restore_mode: ALWAYS_ON #Start with light on after reboot/power-loss event, so that it works from a dumb lightswitch
effects:
- random:
- strobe:
- flicker:
alpha: 50% #The percentage that the last color value should affect the light. More or less the “forget-factor” of an exponential moving average. Defaults to 95%.
intensity: 50% #The intensity of the flickering, basically the maximum amplitude of the random offsets. Defaults to 1.5%.
- lambda:
name: Throb
update_interval: 1s
lambda: |-
static int state = 0;
auto call = id(thelight).turn_on();
// Transtion of 1000ms = 1s
call.set_transition_length(1000);
if (state == 0) {
call.set_brightness(1.0);
} else {
call.set_brightness(0.01);
}
call.perform();
state += 1;
if (state == 2)
state = 0;
# Blink the light if we aren't connected to WiFi.
interval:
- interval: 500ms
then:
- if:
condition:
not:
wifi.connected:
then:
- light.turn_on:
id: thelight
brightness: 50%
transition_length: 0s
- delay: 250ms
- light.turn_off:
id: thelight
transition_length: 250ms

Then in each bulb's yaml:

substitutions:
device_name: novoflood1
device_description: 20W RGBWW flood light, West half of front yard facing the living room.
friendly_name: Novostella Flood Light 1
<<: !include novoflood_common.yaml
Edit this page on GitHub