Timer für die Küche

Ich habe mir einen kleinen Küchentimer gebastelt:

Dazu brauchte ich drei Helfer für die Minuten, Sekunden und den Timer sowie eine Dashboard-Karte:

type: custom:stack-in-card
cards:
  - type: custom:button-card
    entity: timer.kuchentimer
    name: 🍳 Küchentimer
    show_state: true
    show_icon: true
    tap_action:
      action: none
    styles:
      card:
        - height: 160px
        - border-radius: 24px
        - padding: 18px
      grid:
        - grid-template-areas: "\"i n\" \"i s\""
        - grid-template-columns: 64px 1fr
        - grid-template-rows: min-content 1fr
      icon:
        - width: 48px
        - color: |
            [[[
              return entity.state === 'active'
                ? '#4CAF50'
                : entity.state === 'paused'
                ? '#FF9800'
                : '#9E9E9E';
            ]]]
      name:
        - font-size: 18px
        - font-weight: 600
        - align-self: end
      state:
        - font-size: 52px
        - font-weight: 700
        - align-self: start
        - letter-spacing: 2px
    state:
      - value: active
        styles:
          card:
            - background: rgba(76,175,80,0.12)
      - value: paused
        styles:
          card:
            - background: rgba(255,152,0,0.12)
      - value: idle
        styles:
          card:
            - background: rgba(120,120,120,0.08)
  - type: entities
    show_header_toggle: false
    entities:
      - entity: input_number.kuchentimer_minuten
        name: Minuten
      - entity: input_number.kuchentimer_sekunden
        name: Sekunden
  - type: grid
    columns: 3
    square: false
    cards:
      - type: custom:button-card
        name: Start
        icon: mdi:play
        styles:
          card:
            - height: 70px
            - border-radius: 14px
            - background-color: rgba(76,175,80,0.15)
          icon:
            - color: "#4CAF50"
        tap_action:
          action: call-service
          service: script.kuchentimer_starten
      - type: custom:button-card
        name: Pause
        icon: mdi:pause
        styles:
          card:
            - height: 70px
            - border-radius: 14px
            - background-color: rgba(255,152,0,0.15)
          icon:
            - color: "#FF9800"
        tap_action:
          action: call-service
          service: timer.pause
          target:
            entity_id: timer.kuchentimer
      - type: custom:button-card
        name: Reset
        icon: mdi:stop
        styles:
          card:
            - height: 70px
            - border-radius: 14px
            - background-color: rgba(244,67,54,0.15)
          icon:
            - color: "#F44336"
        tap_action:
          action: call-service
          service: timer.cancel
          target:
            entity_id: timer.kuchentimer
  - type: grid
    columns: 4
    square: false
    cards:
      - type: custom:button-card
        name: +1 Min
        icon: mdi:plus-box-outline
        styles:
          card:
            - height: 55px
            - border-radius: 10px
        tap_action:
          action: call-service
          service: input_number.set_value
          data:
            entity_id: input_number.kuchentimer_minuten
            value: |
              [[[
                return Number(states['input_number.kuchentimer_minuten'].state) + 1;
              ]]]
      - type: custom:button-card
        name: +1 Sek
        icon: mdi:plus-circle-outline
        styles:
          card:
            - height: 55px
            - border-radius: 10px
        tap_action:
          action: call-service
          service: input_number.set_value
          data:
            entity_id: input_number.kuchentimer_sekunden
            value: |
              [[[
                return Number(states['input_number.kuchentimer_sekunden'].state) + 1;
              ]]]
      - type: custom:button-card
        name: +5 Min
        icon: mdi:plus-box
        styles:
          card:
            - height: 55px
            - border-radius: 10px
        tap_action:
          action: call-service
          service: input_number.set_value
          data:
            entity_id: input_number.kuchentimer_minuten
            value: |
              [[[
                return Number(states['input_number.kuchentimer_minuten'].state) + 5;
              ]]]
      - type: custom:button-card
        name: Clear
        icon: mdi:refresh
        styles:
          card:
            - height: 55px
            - border-radius: 10px
        tap_action:
          action: multi-actions
          actions:
            - action: call-service
              service: input_number.set_value
              data:
                entity_id: input_number.kuchentimer_minuten
                value: 0
            - action: call-service
              service: input_number.set_value
              data:
                entity_id: input_number.kuchentimer_sekunden
                value: 0
            - action: call-service
              service: timer.cancel
              target:
                entity_id: timer.kuchentimer

Beim Aussehen habe ich mir von der KI helfen lassen, die witzigerweise noch eine Benachrichtigung “Der Kuchen ist fertig!” vorgeschlagen hat, weil sie sich anscheinend durch den Umlaut in “Küchen” hat verwirren lassen.
Ich vermute, dass das Ganze auch einfacher bzw. eleganter ging, aber es funktioniert; die Spaghetti-Premiere hat eben gut geklappt :grinning_face:. Über eine Automation kriege ich beim Ablauf einen Alarm auf mein Handy:

alias: Benachrichtigung Küchentimer
description: ""
triggers:
  - event_type: timer.finished
    event_data:
      entity_id: timer.kuchentimer
    trigger: event
actions:
  - data:
      message: Der Küchentimer ist abgelaufen!
      title: ⏰ Timer fertig
      data:
        priority: high
        ttl: 0
        channel: alarm_stream
    action: notify.mobile_app_pixel_8
mode: single