About five years ago, a company in China came up with a low-cost microcontroller with Wi-Fi and a variety of I/O pins. The ESP8266 proved to be incredibly cheap and versatile and has shown up in a ton of products since then. And the tinkerer/hacker community has embraced it, from Olimex to Adafruit to the ubiquitous Tuya and Sonoff products. If all this sounds like gibberish to you, let me explain more simply: Most generic Wi-Fi-controlled home automation devices today use the simple ESP8266 microcontroller, and these can run awesome open source software like Tasmota.
Costco sells a variety of home automation devices, from Ring cameras to WeMo switches to smart lightbulbs from Feit. These are often quite cheap too, with the Feit 60W bulbs currently priced at under $18 for two! But the best news is that these are supported by Tasmota and work perfectly!
Let’s walk through the process of “liberating” a Costco Feit Smart Bulb.
Note that there are two slightly different models for sale as of 2020, the BPA800/RGBW/AG/2 and BPA800/RGBW/AG/2(P). Both are supported by Tasmota but use slightly different templates. I found a pack of each in the same box at my local Costco so look closely and use the right template.
We’re going to use the awesome Tuya-Convert software to install Tasmota over the air. It’s a painless process and requires very little effort.
Before even opening the package, grab a Raspberry Pi and install the latest Raspbian/Raspberry Pi OS on it. Check out the Tuya-Connect GitHub page for details, but here’s the quick and dirty:
# git clone https://github.com/ct-Open-Source/tuya-convert # cd tuya-convert # ./install_prereq.sh # ./start_flash.sh
Follow the notes on screen and connect your phone to the vtrust-flash wifi network, and place the bulb in connecting mode (turn on off 3 times to get it flashing quickly), then press Enter on your Pi to start the flashing.
Once the bulb has been flashed, it’s time to configure it for your network. It will start a hotspot called “tasmota-xxxx”, which you’ll connect to using any device with a browser. This will launch a captive portal to configure the device’s Wi-Fi to associate with your network. Then the bulb will restart and join your Wi-Fi network instead of starting its own.
Next, locate the device’s DHCP address and go there using a web browser. Click “Firmware Upgrade” from the main menu and perform an OTA upgrade by clicking “Start upgrade.” The device will reset and about 1 minute later will be running the latest version of Tasmota!
The next step is configuring the device. Tasmota uses a “template” to configure the functions of the various GPIO pins. Many of these are listed at the Blakadder site, including for the BPA800/RGBW/AG/2(P) and BPA800/RGBW/AG/2. On a fresh install, you can simply paste the template in on the “Configuration -> Configure Other” page, or you can manually enter it on the “Configure Template” page.
You will also want to enter a few parameters in various spots in the user interface:
- Check “Configuration -> Configure WiFi” for your AP SSID and Password and optionally enter a Hostname.
- Go to “Configuration -> Configure MQTT” and enter your MQTT broker IP address, username, and password. Also set a unique Topic.
- Perhaps enter “Configuration -> Configure Logging” and enable Syslog and enter your Syslog host.
- Go to “Configuration -> Configure Other” and give the device a unique Device Name and Friendly Name 1. Also consider adding a Web Admin Password.
The device will restart when you click “Save” on these screens, but don’t worry – it restarts really quickly!
Next we have to enter a few things on the Console that can’t be configured from the menus. Go to “Console” from the Main Menu and enter the following commands one at a time. These adjust the bulb to disable Gamma, properly set the color slider, and enable auto-discovery in Home Assistant. I like setting “PowerOnState 1” so it will turn on automatically when power is applied like a regular lightbulb. PowerRetain to retain power state between reboots of Home Assitant.
LedTable 0 SetOption37 0 SetOption19 1 PowerOnState 1