A Home Assistant integration that manages rotating lists of people, useful for tracking whose turn it is for chores, bedtime stories, choosing movies, etc.
- Open HACS in Home Assistant
- Go to "Integrations"
- Click the three dots menu (top right) → "Custom repositories"
- Add repository URL:
https://github.com/mjaquilina/hass-take-turns - Select category: "Integration"
- Click "Add"
- Click "Download" on the Take Turns card
- Restart Home Assistant
-
Copy the
custom_components/take_turnsfolder to your Home Assistantconfig/custom_components/directory. -
Restart Home Assistant.
-
The integration is now ready to use!
You can configure Take Turns in two ways:
- Go to Settings → Devices & Services
- Click + Add Integration
- Search for "Take Turns"
- Fill in the form:
- Entity ID: The identifier for the sensor (e.g.,
bedtime_storycreatessensor.bedtime_story) - Friendly Name: Display name (e.g., "Bedtime Story Reader")
- People: Comma-separated list of names (e.g., "Mom, Dad, Grandma")
- Entity ID: The identifier for the sensor (e.g.,
- Click Submit
To edit an existing entity:
- Go to Settings → Devices & Services → Take Turns
- Click Configure on the entity you want to edit
- Update the name or people list
- Click Submit
To delete an entity:
- Go to Settings → Devices & Services → Take Turns
- Click the three dots menu on the entity
- Select Delete
Add to your configuration.yaml:
take_turns:
bedtime_story:
name: "Bedtime Story Reader"
people:
- Alice
- Bob
- Charlie
dish_duty:
name: "Dish Duty"
people:
- Mike
- Sarah
- JennyRestart Home Assistant to load the configuration.
Note: You can mix both methods. YAML and UI configurations work together seamlessly.
For each configured item, a sensor entity is created:
- Entity ID:
sensor.<your_key>(e.g.,sensor.bedtime_story,sensor.dish_duty) - State: Current person's name
- Attributes:
people: Full list of peoplecurrent_index: Current position in the list (0-based)friendly_name: Display name
Advances to the next person in the list (wraps around to the beginning after the last person).
Parameters:
entity_id(required): The entity to advance (e.g.,bedtime_story)
Example Service Call:
service: take_turns.next_turn
data:
entity_id: bedtime_storySets the current person to a specific individual from the list.
Parameters:
entity_id(required): The entity to modify (e.g.,bedtime_story)person(required): The name of the person to set as current (must match exactly)
Example Service Call:
service: take_turns.set_person
data:
entity_id: bedtime_story
person: CharlieAdvance automatically every night at 8 PM:
automation:
- alias: "Rotate Bedtime Story Reader"
trigger:
- platform: time
at: "20:00:00"
action:
- service: take_turns.next_turn
data:
entity_id: bedtime_storyAdd a button to your dashboard to manually advance:
type: button
name: Next Person
icon: mdi:rotate-right
tap_action:
action: call-service
service: take_turns.next_turn
data:
entity_id: bedtime_storyUse an entity card to show who's currently up:
type: entity
entity: sensor.bedtime_story
name: Tonight's Story ReaderOr use a markdown card for more detail:
type: markdown
content: >
**Bedtime Story:** {{ states('sensor.bedtime_story') }}
**Dish Duty:** {{ states('sensor.dish_duty') }}Each take_turns entity supports:
people(required): List of names to rotate throughname(optional): Friendly display name (defaults to formatted entity_id)
- The integration persists state to disk automatically. After a Home Assistant restart, it resumes from the last person.
- State is stored in
.storage/take_turns.state.jsonin your Home Assistant config directory. - The list wraps around automatically (after the last person, it goes back to the first).
- If you change the people list in
configuration.yamland the saved index is out of bounds, it resets to the first person.
