Controlling lights with an app on your phone is not that useful. Controlling it with voice is though.
I can switch any of my lights on/off individually or all together using voice commands. The system works with Google Assistant, so
I also have access to it 24/7 in the absence of a phone (set reminders, ask directions, make it read news, etc).
The Sonoff switches were mentioned in this thread, my system is based on a reprogrammed version of those. They already contain the ESP8266 chip and are quite cheap. They are easily reprogrammed with ESPEasy. Lots of information online how to do it exactly. Once reprogrammed, replace your light switches with them (see product: Sonoff Touch). My house is 35 years old and I have neutrals in the lightswitch sockets.
Commands are sent to the Sonoff switches via MQTT protocol from the MQTT server (Software: Mosquitto) running on a Raspberry Pi 3B. Raspberry Pi because its cheap (R600) and uses almost no electricity, so it can be always on.
I also have Node-Red running on the Raspberry Pi which communicates easily with the MQTT server to allow any kind of control to be exhibited over the lights.
Its simple to integrate Node-Red with
www.IFTTT.com. So when I want to create a voice command to switch on a light I just create a rule on IFTTT. IF: (Google Assistant = Turn on all the lights) THEN: (Send command to Node-Red = "Turn on all the lights") RESPONSE = "Executing Command". Immediately then when I invoke Google Assistant "OK Google", "Hey Google", I can send the command "Turn on all the lights" (from anywhere) to IFTTT which will send that text to Node-Red.
Since google released the Google Assistant SDK I installed it on the Raspberry Pi as well. So now I don't need my phone for voice commands and the Raspberry Pi is a standalone controller which accepts voice commands and switches lights on and off via MQTT. Modular home automation that costs <R1000 (that includes 1 light switch replaced with the Sonoff Touch) + R220 per light switch or +R120 per applicance.
I also integrated voice commands with Autovoice->Tasker (running on Android) -> Node-Red (running on Raspberry Pi), so even when there is no internet connection I can use voice commands from my phone working only on the local network.
Also integrated into node-red is a GUI from where all connected devices can be controlled. I can access that GUI locally or from the internet.
The system can also be used to easily integrate this sort of functionality: Ask the Raspberry Pi, "How much is the solar system producing", and it will get the reading from Sonoff POW via MQTT. Google Assistant will then read the value back to you. Its already been done by youtuber: Csongor Varga