This isn’t a 100% Home Assistant project, but I did use Home Assistant as an integral part of this project. I built a Weasley Clock like the one in Harry Potter that uses hands on a dial to display the location of my family members.
I use the Life360 integration for location and speed data, the unifi integration to track which wifi AP people are attached to, and the HACS Zwift integration to know when people were using Zwift (VR indoor bicycle riding). From that data I determine each person’s location/state and update a sensor. When someone’s Weasley Clock state changes I publish a MQTT event that the physical clock controlled by a raspberry pi and my own custom python code. The Pi then controls some servos that move the hands to the corresponding sector on the clock. When the Pi comes online (boots or the server restarts) it sends an update request to Home Assistant that then publishes all the family member states.
Just made a simple version Weasley clock for my family, all I did was use a picture element card with a bunch of conditional images in the correct locations based of HA locations. Kids are pretty impressed, so winning there
The way I did it I have one conditional pic for each combination of person and location state. You can call multiple locations the same name and it still works, so 3 kids at 3 different schools, they still all show up in the weasly clock school area.
The hardest part was to tweak the style percentages in the image card to place each persons thumbnail in the right place without overlapping someone else.
Beds empty. No note. Car gone. You could have died. You could have been seen,
{% if states('person.kate') == 'not_home' -%} Kate is travelling,
and {% elif states('person.kate') != 'home' -%} Kate is at {{
states('person.kate') }}, {%- endif %} {% if states('person.michael')
== 'not_home' -%} Michael is travelling, {% elif
states('person.michael') != 'home' -%} Michael is at {{
states('person.michael') }}, {%- endif %} {% if
states('person.william') == 'not_home' -%} William is travelling, {%
elif states('person.william') != 'home' -%} William is at {{
states('person.william') }}, {%- endif %} {% if states('person.ellena')
== 'not_home' -%} Ellena is travelling, {% elif
states('person.ellena') != 'home' -%} Ellena is at {{
states('person.ellena') }}, {%- endif %} {% if states('person.andrew')
== 'not_home' -%} Andrew is travelling, {% elif
states('person.andrew') != 'home' -%} Andrew is at {{
states('person.andrew') }}, {%- endif %} but your here now,
time for a spot of
{% if now().hour * 60 + now().minute < 10 * 60 %}
breakfast.
{% elif (now().hour * 60 + now().minute > 10 * 60)
and (now().hour * 60 + now().minute < 17 * 60) %}
lunch
{% elif now().hour * 60 + now().minute > 17 * 60 %}
dinner.
{% endif %}