I use a combination of system variables like Time, Hub Mode (Day, Evening, Night, etc), and whether or not my wife's and my phone are charging at a certain time.
Basically, if it's Day mode, and within a certain time frame (say 4:30am - 9am, which covers the times either of us might get out of bed in the morning), and ALL of our phones are off the charger, then it runs my morning routine of turning on lights and Sonos. If my wife's phone is still on the charger, but just mine is removed, it only turns on the downstairs lights and music but does not change the master bedroom lights. Additionally, if the kitchen Roku is already playing, it does not start the kitchen Sonos (sometimes my kids are watching cartoons before I've gotten up).
Once all phones have been disconnected from charging, it sets a Boolean variable in WebCore "@everyoneUp" to true, which can be used to influence other automations throughout the day. This resets to false at midnight, or if I run my Goodnight Routine.
All of this assumes that if our phone is plugged in... we are still in bed. And that if we get up, we unplug our phone and take it with is. Which is 99% the case.
To use the phone charging as a trigger (both are iPhones), I am using the Apple Shortcuts app with a separate Shortcut for "device starts charging" and "device stops charging" for each person's phone. The Shortcut action is to call a webhook GET URL command to run a WebCoRE pistion which sets a virtual switch of our phone's charging status in Hubitat (one for each phone). Then that virtual switch can be used in rules or WebCoRE automations.
I don't have motion sensors or door sensors on the kid's rooms at this point. The automations are more for me, than them. And my youngest is still in a crib... so if he's up... I'm up.
Similar to how another user suggested, I also use lux-sensitive LED nightlights that are completely dumb and turn on in the dark on off with enough light. Not connected to Hubitat at all.