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:
- 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"
- 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.
- 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.
