Today there is a wide range of offer for home automation devices. A lot of sensors, actors etc. can be connected to the cloud and be controlled using Google Home, Amazon Alexa, your smartphone, etc. There are a lot of companies offering low cost devices, e.g. Sonoff, Tuya, Teckin etc. Most of these solutions are based on ESP32 or ESP8266, and all of them send data to cloud solutions usually deployed on Amazon services, and the data is only accessible using the Android/iOS applications. They can be also controlled using voice commands over Google Home or Amazon Alexa devices.
Nice, but... my aim was to control these devices locally (using LAN and not Wi-Fi) and send the data to the Google Cloud Platform (GCP) to make some analytics later. To be clear, when you use the Android/iOS application (or Google Home/Amazon Alexa) and you switch on/off e.g. a smart power outlet, the application connects with the company server in which the smart power outlet is registered and it sends the command. Then, the server sends back the action to your smart outlet. An exception is Amazon Alexa that sometimes connects directly to the devices (e.g. Belkin switches / Philips Hue), when you are at home on the same network (Wi-Fi). That's why you can re-program the Sonoff devices using Sonoff-Tasmota and then, you don't need a cloud connection anymore. However, if you use Google Home, this is not possible.
To sum up the aim of this post: Using this tutorial, you'll be able to control locally (LAN) most of the low-cost smart power outlets using an ESP32 programmed in MicroPython. Additionally, you can use the available data to do some analytics.
Note: Application like home assistant allows you to make this too, but you need at least a Raspberry Pi to run it, and that means power consumption. That's why, I like to do this with an ESP32 and of course, using MicroPython!