Alexa last_called zuverlässig aktualisieren?

Hallo.
Ich habe bei mir auf dem Dashboard wie wahrscheinlich die meisten die Abfalltermine mit der Waste Collection Schedule eingebunden, das funktioniert auch alles.

Jetzt möchte ich aber auch, das ich Alexa fragen kann, wann welcher Müll als nächstes abgeholt wird.
Wie kann ich erreichen, das die Sprachausgabe auch zuverlässig von der Alexa kommt, an die ich die Frage gestellt habe? Es dauert hier mehrere Minuten, bis sich der sensor.last_called aktualisiert, und dadurch kommt die Ansage ganz oft vom falschen Echo Gerät.
Kann man die Aktualisierung irgendwie beschleunigen? Oder gibt es eine andere Möglichkeit?

Den Mankei-Skill kenne ich, möchte den aber nicht mehr nutzen, weil ich da ja die Daten selber einpflegen muss, mit HA und der WCS ginge es ja automatisch.

Ich habe das mit zwei Skripten gelöst, die dann von den Automatisierungen aufgerufen werden, einmal zum Aktualisieren der letzten Alexa (Alexa: Update sensor.last_alexa - wait for timestamp to update) und einen zum Auslösen der Notification (Alexa: Notify Last Called Alexa Media). Das zweite verwendet den Template Sensor sensor.last_alexa zum vereinfachten Abruf der ermittelten Info.

Konfiguration des Template Sensors (hier das State Template, da ich den Sensor über die GUI konfiguriert habe):

{{ states.media_player | selectattr('attributes.last_called','eq',true) | map(attribute='entity_id') | first | default(none) }}
    {# availability: >
      {{ states.media_player | selectattr('attributes.last_called','eq',true) | map(attribute='attributes.last_called_timestamp') | first is defined }}
    attributes:
      last_called_timestamp: >
        {{ states.media_player | selectattr('attributes.last_called','eq',true) | map(attribute='attributes.last_called_timestamp') | first | default(none) }}
      actual_friendly_name: >
        {{ states.media_player | selectattr('attributes.last_called','eq',true) | map(attribute='attributes.friendly_name') | first | default(none) }} #}

Skript zur Aktualisierung

alias: "Alexa: Update sensor.last_alexa - wait for timestamp to update"
sequence:
  - parallel:
      - wait_for_trigger:
          - entity_id:
              - sensor.last_alexa
            attribute: last_called_timestamp
            trigger: state
          - trigger: event
            event_type: alexa_media_last_called_event
        timeout:
          hours: 0
          minutes: 0
          seconds: 10
          milliseconds: 0
      - action: alexa_media.update_last_called
        data: {}
    enabled: true
mode: single
description: ""

Erläuterung

  1. Das Skript wartet darauf, dass der Sensor sensor.last_alexa aktualisiert wird, insbesondere die Eigenschaft last_called_timestamp.
  2. Gleichzeitig wird eine Aktion ausgelöst, die Alexa auffordert, den letzten aufgerufenen Echo-Gerät-Namen zu aktualisieren.
  3. Wenn kein Update innerhalb eines festgelegten Zeitlimits (10 Sekunden) erfolgt, endet der Prozess.

Meistens läuft das Skript keine 3s.

Zur eigentlichen Benachrichtigung:

alias: "Alexa: Notify Last Called Alexa Media"
description: Send notification to sensor.last_alexa
fields:
  message:
    selector:
      text:
        multiline: true
    name: Message
    required: true
sequence:
  - action: notify.alexa_media
    continue_on_error: true
    data:
      message: "{{ message }}"
      data:
        type: tts
      target: "{{ states('sensor.last_alexa') }}"
  - delay:
      seconds: >-
        {{ (message.split(' ') | count *
        states('input_number.alexa_word_duration')|float ) | round(0, 'floor',
        default) }}
mode: queued
icon: mdi:account-voice
max: 10

Der Delay zum Schluss verwendet einen Konfigurations-Wert aus dem Helper input_number.alexa_word_duration (bei mir auf 0.5 gestellt), um eine Pause nach der Notification einzulegen, damit zwei aufeinander folgende Aufrufe Alexa nicht durcheinander bringt.

1 „Gefällt mir“

Super, das klappt! Jetzt kann ich endlich an jedem meiner Echos neue Artikel auf die HA-todo-Liste setzen!