Kids Chore List (Finish Them or No Internet! 😉)

Leveraged a handful of previous posts here on kids chore lists + HA Cast and ended up with a pretty flexible list of chores for each of my 2 kids that casts to our Lenovo 10" Google Display in the kitchen and requires them to complete their chores or their internet turns off (managed by Ubiquiti Integration).

End result:

The TRUE end result is that their chores are done each day without a big battle. If they want to use their internet, they need to do their chores. (Worth noting we use Disney Circle to further limit their screentime / filter their usage Disney Circle {Not a plug, but is a referral link}. Also worth noting, some of the other solutions I saw use points and graphs and such. I didn’t choose to track all of this, as internet on/off was enough motivation and I can pay their allowances with this solution alone.

Also worth noting that I also put some add’l time/date/weather info on the left column of the Google since casting to it removes it’s native clock/temperature display. Have a few conditional items at the bottom left based on doors being open, etc.

On to the quasi-how-to:

Started by setting up each chore as its own Input Boolean (Input Boolean - Home Assistant)

chore_kid1_mail:
  name: Chore Kid1 Get Mail (All but Sunday)
  icon: mdi:mail
chore_kid1_cans_out:
  name: Chore Kid1 Cans Out (Tues/Fri AM)
  icon: mdi:trash-can
chore_kid1_cans_in:
  name: Chore Kid1Cans In (Tues/Fri PM)
  icon: mdi:trash-can

Worth noting that some chores are morning, some afternoon and then need performed different day(s) of the week. Created 6 automations to control everything:
image

The ‘reset’ automations run at midnight and 2pm each day. These turn ON the input_booleans for the chores needing to be done. Example of the Reset at 2pm automation:

Chores that run EVERYday use the input_boolean.turn_on (top portion), where as chores only on some days each of these has its own script written to skip turning them on various days (bottom portion). Example, our trash comes on Tues/Fri, so here’s that script:

 alias: Reset Kid1 Cans Out
 sequence:
 - condition: not
   conditions:
   - condition: state
     entity_id: sensor.date_dayoftheweek
     state: Monday
   - condition: state
     entity_id: sensor.date_dayoftheweek
     state: Wednesday
   - condition: state
     entity_id: sensor.date_dayoftheweek
     state: Thursday
   - condition: state
     entity_id: sensor.date_dayoftheweek
     state: Saturday
   - condition: state
     entity_id: sensor.date_dayoftheweek
     state: Sunday
 - service: input_boolean.turn_on
   data: {}
   target:
     entity_id:
     - input_boolean.chore_kid1_cans_out

Groups (Group - Home Assistant) were setup to monitor/aggregate all of each kids chores and also for the devices that need to be controlled for internet on/off. Also setup an all chores group for knowing when to start/stop casting. Examples:

chores_kid2:
  name: Kid2 Chores
  entities:
    - input_boolean.chore_kid2_dishes_sink_am
    - input_boolean.chore_kid2_gracie_food
    - input_boolean.chore_kid2_gracie_water
    - input_boolean.chore_kid2_dishes_sink_pm
    - input_boolean.chore_kid2_gracie_brush
    - input_boolean.chore_kid2_gracie_walk
    - input_boolean.chore_kid2_lunch_away
    - input_boolean.chore_kid2_pickup_room

kid2_devices:
  name: Kid2 Devices
  entities:
    - switch.laptop_pixelbook
    - switch.tablet_samsung

chores_all:
  name: All Chores
  entities:
    - group.chores_kid2
    - group.chores_kid1

Worth noting the switches above are created from the Ubiquity/Unifi integration. Allows HA to turn on/off internet access for specific devices (UniFi Network - Home Assistant).

Two of the automations above (Internet Toggle ones) then turn on/off the kids internet based on their respective group of chores all being completed (input booleans all off):

- id: '1646072728795'
  alias: Chores -  Internet Toggle (Kid2)
  description: ''
  trigger:
  - platform: state
    entity_id: group.chores_kid2
  condition: []
  action:
  - data:
      entity_id: group.kid2_devices
    service_template: "{% if is_state('group.chores_kid2', 'off') %}\n  homeassistant.turn_on\n\
      {% else %}\n  homeassistant.turn_off\n{% endif %}\n"
  mode: single

Now that we’ve defined the chores, groups and automations to turn on / off internet - last piece was find a user-friendly way to display this. I wanted the chores to be shown when there’s at least one to be done (hence the group.chores_all), but also wanted to hide the dashboard when they’re not home. The last two automations take care of that. Ensure the dashboard only displays when at least one child is home and they have a chore to do (Personally I used Google Maps Google Maps - Home Assistant) integration for our family.

Here are the two automations:

- id: '1646098490401'
  alias: Chores - Start Cast (NOT Done)
  description: ''
  trigger:
  - platform: time
    at: 06:55:00
  - platform: state
    entity_id: binary_sensor.home_kid1
    to: 'on'
  - platform: state
    entity_id: binary_sensor.home_kid2
    to: 'on'
  - platform: state
    entity_id: group.chores_all
    to: 'on'
  condition:
  - condition: state
    entity_id: group.chores_all
    state: 'on'
  - condition: or
    conditions:
    - condition: and
      conditions:
      - condition: state
        entity_id: binary_sensor.home_kid1
        state: 'on'
      - condition: state
        entity_id: group.chores_kid1
        state: 'on'
    - condition: and
      conditions:
      - condition: state
        entity_id: binary_sensor.home_kid2
        state: 'on'
      - condition: state
        entity_id: group.chores_kid2
        state: 'on'
  - condition: time
    after: 06:54:00
  action:
  - service: frontend.set_theme
    data:
      name: slate
  - service: script.cast_chores
    data: {}
  mode: single
- id: '1646098539796'
  alias: Chores - Stop Cast (ALL Done)
  description: ''
  trigger:
  - platform: state
    entity_id: group.chores_all
    to: 'off'
  condition: []
  action:
  - service: script.cast_cancel_kitchen
    data: {}
  mode: single

These automations take advantage of the Google Cast integration (Google Cast - Home Assistant) using scripts to case a separate tab/view I setup in ui-lovelace.yaml. Scripts:

cast_chores:
  alias: Google Cast Lovelace Chores to Kitchen Lenovo
  sequence:
  - service: media_player.turn_off
    data: {}
    target:
      entity_id: media_player.kitchen_google
  - delay: 00:00:02
  - service: cast.show_lovelace_view
    data:
      entity_id: media_player.kitchen_google
      dashboard_path: lovelace
      view_path: chores
cast_cancel_kitchen:
  alias: Stop Google Cast to Kitchen Lenovo
  sequence:
  - service: media_player.turn_off
    data: {}
    target:
      entity_id: media_player.kitchen_google

Was certainly a fun, not overly complicated project to work thru - and the end result pays dividends every day. House is tidier and few confrontations with the kids to help out. New chores can be added in a minute or two (new boolean, update group, update turn_on automation and create script if necessary).

21 Likes

I have no idea what I am doing but i just stumbled on this and it will be my first project of this type. Wish me luck!