Notify.alexa_media_last_called / Workaround

Ich bekomme immer mal wieder bei/nach Neustarts den Fehler, dass die Aktion notify.alexa_media_last_called unbekannt sei.
Aber im Grunde laufen die Automationen mit den Aktion dann problemlos.
Weiß man da was? Timingproblem oder sowas?
(Aktuelles HA auf Raspi 4.)

Logger:

homeassistant.components.automation.akkuabfrage
Quelle: helpers/script.py:2067
Integration: Automation (Dokumentation, Probleme)
Erstmals aufgetreten: 22. Juni 2025 um 18:51:24 (1 Vorkommnis)
Zuletzt protokolliert: 22. Juni 2025 um 18:51:24

Akkuabfrage: Error executing script. Service not found for call_service at pos 3: Action notify.alexa_media_last_called not found

:crayon:by HarryP: Code-/Logzeilen formatiert (bitte immer in </> einbinden)

Bin wohl der einzige, der das hier nutzt. :grinning:

Inzwischen habe ich einen Workaround. Bei Interesse kann ich den vorstellen.

Währe schön einen zuverlässigen Workaround zu haben. Bitte vorstellen.

Ok, der Workaround basiert auf dem Media_Player Attribut previous_volume.
Mir ist aufgefallen, dass das immer auf null steht. Man konnte es über die Developer Tools setzen, es ging aber immer sofort wieder auf null, wenn der entsprechende Echo mit dem Triggerwort adressiert wurde.

Also Vorgehensweise:

  • Beim HA Start mit etwas Delay (warten, bis sich alles eingerüttelt hat) das Attribut previous_volume aller Echos auf 1 setzen
  • das Attribut überwachen und sobald eines auf null geht, den Namen des Echos in einen input_text helper last_called_echo schreiben und wieder previous_volume aller Echos (sicherheitshalber) auf 1 setzen.

Das Attribut lässt sich nur mit einem kleinen Python Script überschreiben. Simon hat dazu mal ein Video gemacht. Bitte da schauen, wie das Script eingerichtet wird.

Die Automation (automations.yaml):

- id: last_called_echo
  alias: Detect last called echo via previous_volume and reset all
  triggers:
  - event: start
    trigger: homeassistant
  - entity_id:
    - media_player.echo_show_buero
    - media_player.echo_dot_schlafzimmer
    - media_player.echo_4_wohnzimmer
    - media_player.echo_kueche
    - media_player.echo_bad
    attribute: previous_volume
    to:
    trigger: state
  actions:
  - choose:
    - conditions:
      - condition: template
        value_template: '{{ trigger.platform == ''state'' }}'
      sequence:
        - variables:
            echo_name: '{{ trigger.entity_id }}'
        - action: input_text.set_value
          data:
            entity_id: input_text.last_called_echo
            value: '{{ echo_name }}'
    - conditions:
        - condition: template
          value_template: '{{ trigger.platform == "homeassistant" }}'
      sequence:
        - delay: "00:00:15"
  - repeat:
      for_each:
      - media_player.echo_show_buero
      - media_player.echo_dot_schlafzimmer
      - media_player.echo_4_wohnzimmer
      - media_player.echo_kueche
      - media_player.echo_bad
      sequence:
      - data:
          entity_id: '{{ repeat.item }}'
          previous_volume: 1
        action: python_script.set_state
  mode: queued

Ich habe die Liste der Echos 2x hard-coded drin. Das geht vielleicht eleganter mit einer Liste nur oder gar dynamisch, war mir aber nicht so wichtig. Keep it simple.

Der Helper (configuration.yaml):

input_text:
  last_called_echo:
    name: Letzter angesprochener Echo
    initial: ""

Anwendungsbeispiel:
Abfrage der Radon-Konzentration über einen beliebigen Echo. Das Script wird von Alexa gestartet, die Ausgabe der Antwort erfolgt auf dem adressierten Echo.

script_query_radon_level:
  description: query radon level
  sequence:
  - action: notify.alexa_media
    data:
      target: '{{ states(''input_text.last_called_echo'') }}'
      data:
        type: tts
      message: Die Radonkonzentration beträgt {{ states('sensor.fb_ba_f6_15_1f_bc_radon_concentration')
        }} Becquerel pro Kubikmeter
  mode: single

Das Script muss unter Settings für Sprachassistenten (hier Alexa) zugänglich gemacht werden. Dann kann es aus einer Alexa Routine über SmartHome → Szenen ausgewählt und angesprochent werden.
Ich habe Nabu Casa. Kann sein, dass das dafür erforderlich ist.

Läuft bei mir jetzt etwa 3 Tage recht zuverlässig. :slight_smile:
Alexa-Antwort kommt innerhalb 2-3 Sekunden.

1 „Gefällt mir“

Kling gut. Werde ich heute Abend mal testen und bescheid geben.

Hier drüben hat jemand (guardiansbs) Änderungen vorgeschlagen, die Sinn machen:

I made a couple of changes to help the automation ignore the false results when triggered by the Alexa integration periodically polling the devices. I changed the ‘mode’ to ‘single’ with ‘max_exceeded: silent’ and put a 5 second delay in the automation (after recording last_called_echo) to keep the automation busy to ignore the spurious integration initiated invocations.

Die Automation sieht nun bei mir so aus:

- id: last_called_echo
  alias: Detect last called echo via previous_volume and reset all
  triggers:
  - event: start
    trigger: homeassistant
  - entity_id:
    - media_player.echo_show_buero
    - media_player.echo_dot_schlafzimmer
    - media_player.echo_4_wohnzimmer
    - media_player.echo_kueche
    - media_player.echo_bad
    attribute: previous_volume
    to:
    trigger: state
  actions:
  - choose:
    - conditions:
      - condition: template
        value_template: '{{ trigger.platform == ''state'' }}'
      sequence:
        - variables:
            echo_name: '{{ trigger.entity_id }}'
        - action: input_text.set_value
          data:
            entity_id: input_text.last_called_echo
            value: '{{ echo_name }}'
        - delay: "00:00:05"
    - conditions:
        - condition: template
          value_template: '{{ trigger.platform == "homeassistant" }}'
      sequence:
        - delay: "00:00:15"
  - repeat:
      for_each:
      - media_player.echo_show_buero
      - media_player.echo_dot_schlafzimmer
      - media_player.echo_4_wohnzimmer
      - media_player.echo_kueche
      - media_player.echo_bad

      sequence:
      - data:
          entity_id: '{{ repeat.item }}'
          previous_volume: 1
        action: python_script.set_state
  mode: single
  max_exceeded: silent

Es geht weiter mit Verbesserungen.
Drüben auf github hat User dpgh947 vorgeschlagen, statt vorhandene Attribute zu missbrauchen ein neues Attribut zu schaffen und mit set_state zu setzen. Dieses künstliche Attribut verschwindet wieder, wenn der Echo gerufen wird. Ich habe das Attribut ghost genannt und die Automation sieht nun so aus:

- id: last_called_echo
  alias: Detect last called echo via temporary media_player attribute named ghost
  triggers:
  - event: start
    trigger: homeassistant
  - entity_id:
    - media_player.echo_4_wohnzimmer
    - media_player.echo_kueche
    - media_player.echo_bad
    attribute: ghost
    from: 'I will vanish when called'
    trigger: state
  actions:
  - choose:
    - conditions:
      - condition: template
        value_template: '{{ trigger.platform == ''state'' }}'
      sequence:
        - variables:
            echo_name: '{{ trigger.entity_id }}'
        - action: input_text.set_value
          data:
            entity_id: input_text.last_called_echo
            value: '{{ echo_name }}'
        - delay: "00:00:05"
    - conditions:
        - condition: template
          value_template: '{{ trigger.platform == "homeassistant" }}'
      sequence:
        - delay: "00:00:15"
  - repeat:
      for_each:
      - media_player.echo_4_wohnzimmer
      - media_player.echo_kueche
      - media_player.echo_bad
      sequence:
      - data:
          entity_id: '{{ repeat.item }}'
          ghost: "I will vanish when called"
        action: python_script.set_state
  mode: single
  max_exceeded: silent

:crayon:by HarryP: Zusammenführung Doppelpost (bei Änderungen oder hinzufügen von Inhalten bitte die „Bearbeitungsfunktion“ anstatt „Antworten“ zu nutzen)

1 „Gefällt mir“

@ R2D2: So habe ich es auch umgesetzt nachdem der last_call von AMP immer wieder mal verschwunden ist. Klappt recht gut und bei mir auch deutlich schneller.

Freut mich :slightly_smiling_face:

Ich habe das nun umschaltbar, kann mit einem Schalter auf dem Dashboard zwischen der Methode mit dem Ghost-Attribut und AMP last_called umschalten.

Ich schalte immer mal wieder testweise auf last_called zurück, aber das ist einfach kaputt.

Der Geist arbeitet für mich auch zuverlässig.

geht seit dem neusten Update wohl nicht mehr oder?

sobald man Alexa anspricht wird kein Attribut-Update mehr ausgeführt

Kann ich nicht bestätigen.

Wie ein paar cm weiter oben geschrieben, habe ich auf dem Dashboard einen Schalter, mit dem ich die Methode der last_called-Bestimmung umschalten kann.

Der Schalter steht bei mir meist auf der ghost-attribute Methode, weil die 1-2 Sekunden schneller antwortet.

Ich habe aber eben mal auf die Media-Player Variante umgeschaltet und die funktioniert auch noch.

Komisch seit dem letzten update als es auth probleme gab, setzt ha kein Status mehr auf den alexa Geräten sobald man eine anspricht…

Du meinst AMP Version 5.8.1? Neustart gemacht?

Habe eben Update gemacht.
Der Geist braucht etwa 2 Sekunden um zu antworten, AMP last_called 3-4 Sekunden.

Welchen Status meinst du?

Es wurde hier eine Version zum Testen bereitgestellt, die das Problem mit last_called versucht zu lösen.
Bei mir funktioniert es super!

1 „Gefällt mir“

Perfekt damit geht es erstmal wieder zuverlässig!