Skip to content

Instantly share code, notes, and snippets.

@Didgeridrew
Last active March 6, 2024 15:21
Show Gist options
  • Select an option

  • Save Didgeridrew/edc1085c241459ed67dd7e4d64d400cc to your computer and use it in GitHub Desktop.

Select an option

Save Didgeridrew/edc1085c241459ed67dd7e4d64d400cc to your computer and use it in GitHub Desktop.
HA - A Trigger-based Template sensor extracting events from multiple calendars and sorting them by start
template:
- trigger:
- platform: calendar
event: start
entity_id: calendar.a
- platform: calendar
event: start
entity_id: calendar.b
- platform: calendar
event: end
entity_id: calendar.a
- platform: calendar
event: end
entity_id: calendar.b
action:
- service: calendar.get_events
data:
duration:
hours: 72
target:
entity_id:
- calendar.a
- calendar.b
response_variable: calendars
- variables:
e: |
{% set ns = namespace(cal_events=[]) %}
{%- for key, value in calendars.items() %}
{%- for event in value.events %}
{%- set ns.cal_events = ns.cal_events + [event] %}
{%- endfor %}
{%- endfor %}
{{ ns.cal_events | sort(attribute='start') | list }}
sensor:
- name: MultiCal 72 hour agenda
state: "{{ e | count }}"
attributes:
events: "{{e}}"
entity_id: |
{{['calendar.a','calendar.b']}}
@Trzinka
Copy link

Trzinka commented Mar 6, 2024

Can you please take a look because I did something wrong:

- trigger:
  - platform: calendar
    event: start
    entity_id: calendar.prazniki_v_sloveniji
  - platform: calendar
    event: start
    entity_id: calendar.f1
  - platform: calendar
    event: end
    entity_id: calendar.moto_gp
  - platform: calendar
    event: end
    entity_id: calendar.odvoz_odpadkov
  - platform: calendar
    event: end
    entity_id: calendar.dom
  - platform: calendar
    event: end
    entity_id: calendar.robert
  action:
    - service: calendar.get_events
      data:
        duration:
          hours: 72
      target:
        entity_id:
          - calendar.prazniki_v_sloveniji
          - calendar.f1
          - calendar.moto_gp
          - calendar.odvoz_odpadkov
          - calendar.dom
          - calendar.robert
      response_variable: calendars
    - variables:
        e: |
          {% set ns = namespace(cal_events=[]) %}
          {%- for key, value in calendars.items() %}
            {%- for event in value.events %}
              {%- set ns.cal_events = ns.cal_events + [event] %}
            {%- endfor %}
          {%- endfor %}
          {{ ns.cal_events | sort(attribute='start') | list }}
  sensor:
    - name: MultiCal 72 hour agenda
      state: "{{ e | count }}"
      attributes:
        events: "{{e}}"
        entity_id: |
          {{['calendar.prazniki_v_sloveniji','calendar.f1','calendar.moto_gp','calendar.odvoz_odpadkov','calendar.dom','calendar.robert', ]}}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment