Skip to content
This repository has been archived by the owner on Dec 11, 2023. It is now read-only.

black-roland/homeassistant-microsoft-todo

Repository files navigation

DEPRECATED

Please use O365-HomeAssistant instead. For the migration guide take a look at #98.


Microsoft To Do integration for Home Assistant

The integration brings your Microsoft To Do tasks into Home Assistant and allows creating new tasks.

Work in progress

Work is still in progress and there might be breaking changes. Tasks for the 1st release are tracked on the MVP board.

Installation

This component can be installed using HACS. Simply add a custom repository black-roland/homeassistant-microsoft-todo and install the integration.

Alternatively, that's possible to copy the content of the custom_components to the config directory.

Setup

To get access to Microsoft To Do API you need to register an application in Azure:

  1. Open Azure portal;
  2. Go to app registrations:
    App registrations
  3. Register a new personal app and obtain client ID and secret:
    App registration and credentials
  4. Add a redirect URI: https://[YOUR HOME ASSISTANT URL:PORT]/api/microsoft-todo, replace [YOUR HOME ASSISTANT URL:PORT] with the domain name and port of our Home Assistant instance:
    Redirect URI
    To be able to authenticate please make sure that Home Assistant URL is configured properly and your browser can access the redirect URL (it doesn’t have to be accessible from the Internet, it can be even localhost).

Configuration

Add the following section to your configuration.yaml file:

calendar:
  - platform: microsoft_todo
    client_id: YOUR_CLIENT_ID
    client_secret: YOUR_CLIENT_SECRET

Restart Home Assistant and finalize authorization through UI. There should be a new configuration request in notifications.

NOTE: After successful auth please restart your Home Assistant again (it's known issue #10).

Services

To create a task in Microsoft To Do you can call microsoft_todo.new_task service.

Simple example:

- service: microsoft_todo.new_task
  data:
    subject: "Test task"
    list_name: "Home Assistant"

Automation example:

automation:
  - alias: "Remind to pay utility bill"
    trigger:
      platform: time
      at: "00:00:00"
    condition:
      condition: template
      value_template: "{{ now().day == 1 }}"
    action:
      - service: microsoft_todo.new_task
        data_template:
          subject: "Pay utility bill for {{ now().replace(month=now().month - 1).strftime('%B') }}" # previous month name
          list_name: "Home Assistant"
          note: "Pay online: http://example.com/pay/"
          due_date: "{{ now().strftime('%Y-%m-09') }}" # due 9th
          reminder_date_time: "{{ now().strftime('%Y-%m-%dT17:00:00') }}" # at 17:00 today

Calendar sensors

The integration creates sensors for each to-do list with tasks exposed as all_tasks attribute. You can find sensors on the Developer Tools page prefixed with calendar..

Sensors can be used in automations:

automation:
  - alias: "Remind to buy groceries after work"
    trigger:
      platform: state
      entity_id: person.bob
      from: "office"
      to: "away"
    condition:
      condition: template
      value_template: "{{ state_attr('calendar.shopping_list', 'all_tasks') | length > 0 }}"
    action:
      - service: notify.email_bob
        data:
          title: "Shopping list"
          message: "Don't forget to check your shopping list before going home"

Or sensors can be used in Lovelace. There are multiple ways to show your tasks: by simply using ssmorris/lovelace-attribute-list-view card or by adding a custom markdown card with Jinja template:

type: markdown
content: |-
  {% for task in state_attr('calendar.PUT_YOUR_LIST_NAME_HERE', 'all_tasks') -%}
  - {{ task }}
  {% endfor %}
title: To Do

Markdown card