I use SmartThings paired with Google Assistant. Smart plugs, garage door tilt sensors, humidity/temp/motion sensor in my gun safe, water intrusion sensors, fire/CO alarms, strobe/siren alarm, etc are all Z Wave. Rachio sprinkler controller is wifi. Smart thermostat from Honeywell (I think the circular Nest products look stupid) is wifi. Hunter Douglas top down/bottom up smart window shades are some form of wifi (I think) but integrate through a custom device handler into the Samsung hub.
My main control panel is a wall mounted android tablet using ActionTiles through an app called Fully Video Kiosk. The Kiosk app allows the tablet to utilize the front camera as a motion sensor for an auto wake up feature so that it turns on whenever someone walk up to it. It also allows the ActionTiles page to show full screen for maximum utilization while also preventing someone from exiting the app. Friends can't mess with me by changing stupid settings on the tablet (something every drunk person ever thinks is super clever and funny). I have it configured to show a "screensaver" after so many seconds of non use which is dictated by a service called DakBoard. Dakboard screensaver display is configurable to use a rotating customized background image and shows shows current/forecasted weather, events linked by my Google calendar, and RSS feed. Since ActionTiles is web based, I can log in from any location and see status of sensors and also trigger events. The downside to this app is that during an internet outage I will not have control from remote locations. Realistically that doesn't happen without a power outage, so it's a moot point.
I have my phone and wife's phone acting as proximity sensors to trigger events in the house as needed, and have also made an "easy on" guest mode so that if we both are out of the house things will still function if we want them to.
It's easy to configure Google Assistant to add voice control for anything through the Samsung hub. Most commands are built in already. For example for the thermostat all I had to do was get it connected to the system and then the Assistant took care of the rest. Ex: "Hey google, turn thermostat on and set heater to 75". "Hey google, I'm cold" (boost temp by 5). And any other reasonable thing you could think of to control a thermostat.
As of recently, anyone added to your "household" can use customized voice commands that have been setup on any other phone within the household. This is great because my wife isn't all that tech savvy, so I can do all the setup work on my end with the results being tied into her voice as well. We've used this feature to make commands like "turn on/off the bass" or "close all blinds".
The Samsung hub natively supports easy event creation. For example: Wife bought an outdoor fountain for the birds. I don't want the water pump to burn itself up if the water runs low so I have the smart plug calibrated to read power draw and auto shutoff when it detects that its doing a lot of work, followed by a notification to both our phones that reads "Fountain water LOW".
I evaluated the Raspberry Pi option originally, but decided that it would require far more work to get up and running than I was willing to do. Having easy smart phone integration for control was important to me and the SmartThings is better for that. Pairing with new devices is so easy - and that was key to convincing the wife that going down this whole smart home road was worth it.