HomeAssistant: ToDo-Einträge protokollieren

Es wäre doch toll, wenn man sich nochmal anschauen könnte, ob man vor 3 Wochen auch wirklich den Rasen gemäht hat oder wie viele Leckerchen der Hund heute schon bekommen hat.

Das ganze ist möglich mit HomeAssistant. Ich nutze hier schon länger die ToDo-Listen Funktion, fand aber immer blöd, dass ich gar nicht mehr nachschauen konnte, ob auch gestern wirklich alles erledigt wurde, oder wie viel ich Hunde-Leckerchen ich dem Hund heute schon gegeben habe. Daher habe ich mich mal daran gemacht, erledigte Einträge aus ToDo-Listen oder gar Werte aus einer „Input-Number“ in einen Kalender zu schreiben. Ich habe hierbei einen Lokalen Kalender in HA genutzt, es sollte aber auch mit einem iCloud oder Google Kalender möglich sein.

Voraussetzungen

Ihr benötigt:

  • ToDo-Liste (heisst bei mir „Daily tasks“)
  • Kalender (heisst bei mir „Protokoll“)
  • 4 Automatisierungen (siehe unten)
  • Input-Number-Helfer (heisst bei mir „input_number.leckerlies_gegeben“)
    • Bei Bedarf: Week-Planner Card und card-mod aus HACS

–> wenn ihr die beiden Elemente genauso nennt, ist das Script kopieren einfacher!

Automatisierungen / Scripte

ToDo nach Kalender
alias: ToDo nach Kalender
triggers:
  - trigger: event
    event_type: call_service
    event_data:
      domain: todo
      service: update_item
    variables:
      list_name: |
        {% set ent = trigger.event.data.service_data.entity_id[0] %}
        {{ state_attr(ent, 'friendly_name') }}
conditions:
  - alias: Wurde etwas in der definierten ToDo Liste gemacht
    condition: template
    value_template: "{{ list_name in ['Daily tasks']}}"
  - alias: Wurde das event abgehakt
    condition: template
    value_template: "{{ trigger.event.data.service_data.status == 'completed' }}"
actions:
  - variables:
      task: "{{ trigger.event.data.service_data.rename }}"
      timestamp: "{{ now().isoformat() }}"
  - action: calendar.create_event
    data:
      start_date_time: "{{ timestamp }}"
      end_date_time: |
        {{ (now() + timedelta(minutes=1)).isoformat() }}
      summary: "{{ task }} ✅"
      description: |
        {{ list_name }}
        Task: {{ task }} wurde erledigt!!
    target:
      entity_id: calendar.protokoll
mode: single
Reset Daily ToDo
alias: Reset Daily ToDo
description: ""
triggers:
  - at: "00:05:00"
    trigger: time
conditions: []
actions:
  - metadata: {}
    data:
      status:
        - completed
    response_variable: completed
    target:
      entity_id:
        - todo.daily_tasks
    action: todo.get_items
  - repeat:
      count: "{{ completed['todo.daily_tasks']['items'] | count }}"
      sequence:
        - metadata: {}
          data:
            status: needs_action
            item: >-
              {{completed['todo.daily_tasks']['items'][repeat.index-1]['summary']}}
          target:
            entity_id: todo.daily_tasks
          action: todo.update_item
mode: single
Daily Tasks Todo Reset wiederholende Elemente
alias: Daily Tasks Todo Reset wiederholende Elemente
description: ""
triggers:
  - trigger: event
    event_type: call_service
    event_data:
      domain: todo
      service: update_item
    variables:
      list_name: |
        {% set ent = trigger.event.data.service_data.entity_id[0] %}
        {{ state_attr(ent, 'friendly_name') }}
conditions: []
actions:
  - delay:
      hours: 0
      minutes: 0
      seconds: 0
      milliseconds: 800
  - action: todo.update_item
    metadata: {}
    data:
      item: ☕️ Kaffee trinken
      status: needs_action
    target:
      entity_id: todo.daily_tasks
  - action: todo.update_item
    metadata: {}
    data:
      item: 💩 Geschäft verrichtet
      status: needs_action
    target:
      entity_id:
        - todo.daily_tasks
mode: single
Wert protokollieren
alias: Wert protokollieren
description: ""
triggers: []
actions:
  - variables:
      task: "{{ states('input_number.leckerlies_gegeben') }}"
      timestamp: "{{ now().isoformat() }}"
  - action: calendar.create_event
    data:
      start_date_time: "{{ timestamp }}"
      end_date_time: |
        {{ (now() + timedelta(minutes=1)).isoformat() }}
      summary: "🐶 Leckerchen gegeben: {{ task }} Stk."
      description: |
        {{ list_name }}
        wurde erledigt!!
    target:
      entity_id: calendar.protokoll
mode: single

HACS Layout-Cards

Die beiden folgenden HACS Erweiterungen habe ich benutzt, um die Optik etwas aufzufrischen bzw. den Kalender dynamischer anzuzeigen.

YAML Code meiner Cards:

type: custom:week-planner-card
calendars:
  - entity: calendar.protokoll
days: "2"
startingDay: yesterday
startingDayOffset: 0
hideWeekend: false
noCardBackground: false
compact: true
weather:
  showCondition: true
  showTemperature: false
  showLowTemperature: false
  useTwiceDaily: false
locale: de
showLocation: false
hidePastEvents: false
hideDaysWithoutEvents: false
hideTodayWithoutEvents: false
combineSimilarEvents: false
showLegend: false
texts:
  yesterday: Gestern
  today: Heute
updateInterval: "5"
display_order: alpha_asc
type: todo-list
card_mod:
  style:
    .: |
      ha-card.type-todo-list div.header {
        display: none;
      }
      ha-check-list-item {
      min-height: 40px !important;
      }
entity: todo.daily_tasks
hide_completed: true
hide_create: true
features:
  - type: numeric-input
    style: buttons
type: tile
entity: input_number.leckerlies_gegeben
features_position: inline
vertical: false
tap_action:
  action: perform-action
  perform_action: automation.trigger
  target:
    entity_id: automation.wert_protokollieren
  data:
    skip_condition: true
hide_state: true
show_entity_picture: false
color: brown
icon: mdi:dog

Link zum Video: https://youtu.be/ceJI9SnVrYI

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert