Alexa, was läuft (gerade) im Radio?

Ich habe hier was gebastelt (mit Hilfe von ChatGPT), womit ich über Alexa und Home Assistant abfragen kann, welche Musik gerade auf SWR1 RP läuft … und wollte das mal vorstellen.
Vielleicht hat sich das jemand von euch auch schon mal gewünscht.

Hintergrund:
Hört man Musik von Amazon Music über einen Echo, kann man fragen: “Alexa, was läuft” … und Alexa nennt Titel und Interpret des laufenden Songs.

Leider klappt das nicht beim Radiohören … und ich konnte auch keinen Skill finden, der das ermöglicht.
Da ich immer SWR1 RP höre, habe ich mir nun mit KI-Unterstützung eine Alexa-Abfrage “Alexa, was läuft im Radio” geschaffen.

Dafür braucht es:

  1. in der configuration.yaml diesen Eintrag:
rest_command:
  swr1_playerbar:
    url: "https://www.swr.de/~webradio/swr1/rp/swr1rp-playerbar-100~playerbarContainer.json"
    method: GET
    timeout: 10
    headers:
      User-Agent: "Mozilla/5.0"
      Accept: "application/json"

  swr1_playlist:
    url: "{{ feed_url }}"
    method: GET
    timeout: 10
    headers:
      User-Agent: "Mozilla/5.0"
      Accept: "application/json"
  1. dieses Script script.query_SWR1_musik
alias: SWR1 aktueller Titel
mode: single
sequence:
  - action: rest_command.swr1_playerbar
    response_variable: playerbar_response
    continue_on_error: true
  - variables:
      playerbar_ok: |-
        {{ playerbar_response is defined
           and playerbar_response.status is defined
           and playerbar_response.status >= 200
           and playerbar_response.status < 300
           and playerbar_response.content is defined }}
  - choose:
      - conditions:
          - condition: template
            value_template: '{{ playerbar_ok }}'
        sequence:
          - variables:
              feed_url: '{{ playerbar_response.content.playlist.feedUrl }}'
          - action: rest_command.swr1_playlist
            data:
              feed_url: '{{ feed_url }}'
            response_variable: swr_response
            continue_on_error: true
          - variables:
              playlist_ok: |-
                {{ swr_response is defined
                   and swr_response.status is defined
                   and swr_response.status >= 200
                   and swr_response.status < 300
                   and swr_response.content is defined }}
          - choose:
              - conditions:
                  - condition: template
                    value_template: '{{ playlist_ok }}'
                sequence:
                  - variables:
                      songs: '{{ swr_response.content }}'
                      current: |-
                        {{ songs
                           | selectattr('playingMode', 'eq', 1)
                           | list
                           | first
                           | default(none) }}
                  - choose:
                      - conditions:
                          - condition: template
                            value_template: '{{ current is not none }}'
                        sequence:
                          - variables:
                              titel: '{{ current.title }}'
                              interpret: '{{ current.artist }}'
                              minuten: >-
                                {{ ((as_timestamp(now()) - (current.starttime |
                                float)) / 60)
                                   | int(0) }}
                          - action: script.speak_on_echo
                            data:
                              message: >-
                                SWR1: {{ titel }} von {{ interpret }}{% if
                                minuten | int > 0 %}, läuft seit {{ minuten }}
                                {% if minuten | int == 1 %}Minute{% else
                                %}Minuten{% endif %}{% endif %}.
                    default:
                      - action: script.speak_on_echo
                        data:
                          message: >-
                            Die SWR1-Playlist wurde abgerufen, aber ich konnte
                            den aktuell laufenden Titel nicht ermitteln.
            default:
              - action: script.speak_on_echo
                data:
                  message: Die aktuelle SWR1-Playlist konnte nicht abgerufen werden.
    default:
      - action: script.speak_on_echo
        data:
          message: Die SWR1-Playerdaten konnten nicht abgerufen werden.
  1. und noch dieses Script script.speak_on_echo, das einfach nur Sprachausgaben auf dem last called echo macht:
description: Issue TTS-message on last called echo
fields:
  message:
    description: Your message
sequence:
  - action: alexa_media.update_last_called
  - delay:
      milliseconds: 500
  - action: notify.alexa_media_last_called
    data:
      message: '{{ message }}'
      data:
        type: tts

So läuft das dann:
Man richtet eine Alexa-Routine ein, die z.B. auf den Befehl “Alexa, was läuft im Radio” hört.
Die Routine startet das Script script.query_SWR1_musik (zu finden in Alexa unter Smart Home / Szenen, sofern man das Script unter Settings/Voice assistants für Alexa exposed hat). Hinweis: hierfür ist eine Alexa-Anbindung über Home Assistant Cloud (Nabu Casa) erforderlich.

Das Script holt sich nun aus den SWR-Seiten Titel und Interpret des gerade laufenden Songs und gibt diese Information schön formatiert über den Media Player an den Echo zurück.
Beispielantwort: “SWR1, Ziggy Stardust von David Bowie, läuft seit 2 Minuten”

Im Fehlerfall liefert das Script entsprechende Meldungen.

Wie gesagt, ist das für SWR1 RP gestrickt, lässt sich aber wahrscheinlich auf andere ARD-Sender umstricken.

4 „Gefällt mir“

Zufälle gibt es :slight_smile: Genau diese Idee hatte ich heute morgen, als ich wissen wollte, welcher Song gerade auf SWR1 (BW) gespielt wird. Ich wollte nachher meinen Hermes Agent beauftragen, das zu implementieren. Jetzt lese ich gerade dein Post und habe gleich die fertige Lösung :+1:

1 „Gefällt mir“

Ist ja lustig … und freut mich. Und sogar fast der gleiche Sender.

Wenn du nun einfach nach Rheinland-Pfalz umziehst, brauchst du am Code gar nichts zu ändern. :slightly_smiling_face:

Mit Alexa+ funktioniert das auch beim Radio.

Ja? Wie?

Nein, das tut es bei SWR1 (BW) oder BR3 mit Alexa+ nicht. Ich habe die Vermutung, dass das bei allen Radiosender, die über ARD Sounds abgespielt werden, so ist. Bei Sendern über TuneIn funktioniert es dagegen meistens. Aber das ist wegen der extrem nervigen und immer gleichen Werbung keine Alternative für mich.

Dann habe ich eventuell Glück mit meinem Sender. Ich werde es im laufe des Tages mal mit SWR1 und BR3 probieren.

Also bei BR3 funktioniert es definitiv, dass habe ich getestet. SWR1 konnte ich bisher nicht testen, da immer Werbung lief wenn ich aufm Pott saß.

Komisch. Habe es gerade nochmals probiert.

Alexa spiele BR3 → “Spiele Bayern 3 über ARD Sounds” → Welcher Song läuft → “Der aktuelle Titel auf Bayern 3 ist nicht bekannt” :exclamation_question_mark:

Spielst du BR3 auch über ARD Sounds ab oder über TuneIn?

Tatsächlich war es über ARD Sounds