Chromecast Radio with station and player selection

There is no way we could add Spotify playlists as a stream option right?

Any progress on radio announcement? :smiley:

Nope, sorry I’ve been very busy. I can make a simple TTS addition if you like. Hang on.

@vladosam try this:

  radio538:
    alias: Play Radio on Chromecast Audio
    sequence:
      - service: media_player.volume_set
        data_template:
          entity_id: >
            {% if is_state("input_select.chromecast_radio", "Livingroom") %} media_player.ca_livingroom
            {% elif is_state("input_select.chromecast_radio", "Hall") %} media_player.ca_hall
            {% elif is_state("input_select.chromecast_radio", "Bedroom") %} media_player.bed_room
            {% elif is_state("input_select.chromecast_radio", "Bathroom") %} media_player.ca_bathroom
            {% elif is_state("input_select.chromecast_radio", "Everywhere") %} media_player.home_group
            {% endif %}
          volume_level: '{{  states.input_slider.volume_radio.state  }}' 
      - service: tts.amazon_polly_say
        data_template:
          entity_id: >
            {% if is_state("input_select.chromecast_radio", "Livingroom") %} media_player.ca_livingroom
            {% elif is_state("input_select.chromecast_radio", "Hall") %} media_player.ca_hall
            {% elif is_state("input_select.chromecast_radio", "Bedroom") %} media_player.bed_room
            {% elif is_state("input_select.chromecast_radio", "Bathroom") %} media_player.ca_bathroom
            {% elif is_state("input_select.chromecast_radio", "Everywhere") %} media_player.home_group
            {% endif %}
          message: "Next station: {{ states.input_select.radio_station.state  }}"
      - delay: '00:00:08'   
      -  service: media_player.play_media
         data_template:
           entity_id: >
            {% if is_state("input_select.chromecast_radio", "Livingroom") %} media_player.ca_livingroom
            {% elif is_state("input_select.chromecast_radio", "Hall") %} media_player.ca_hall
            {% elif is_state("input_select.chromecast_radio", "Bedroom") %} media_player.bed_room
            {% elif is_state("input_select.chromecast_radio", "Bathroom") %} media_player.ca_bathroom
            {% elif is_state("input_select.chromecast_radio", "Everywhere") %} media_player.home_group
            {% endif %}
           media_content_id: >
            {% if is_state("input_select.radio_station", "Radio 538") %} http://vip-icecast.538.lw.triple-it.nl:80/RADIO538_MP3
            {% elif is_state("input_select.radio_station", "Q-Music") %} http://icecast-qmusic.cdp.triple-it.nl/Qmusic_nl_live_96.mp3
            {% elif is_state("input_select.radio_station", "3FM") %} http://icecast.omroep.nl/3fm-bb-mp3
            {% elif is_state("input_select.radio_station", "100% NL") %} http://stream.100p.nl/100pctnl.mp3
            {% elif is_state("input_select.radio_station", "Veronica") %} http://8543.live.streamtheworld.com/VERONICACMP3
            {% elif is_state("input_select.radio_station", "Sky Radio") %} http://8623.live.streamtheworld.com:80/SKYRADIOAAC_SC
            {% elif is_state("input_select.radio_station", "Arrow Classic Rock") %} http://91.221.151.155/listen.mp3
            {% elif is_state("input_select.radio_station", "Classic FM") %} http://19143.live.streamtheworld.com/CLASSICFM_SC
            {% elif is_state("input_select.radio_station", "BNR Nieuwsradio") %} http://icecast-bnr.cdp.triple-it.nl/bnr_mp3_96_03
            {% elif is_state("input_select.radio_station", "Smooth Jazz Tampa") %} http://us3.internet-radio.com:8007/listen.mp3           
            {% elif is_state("input_select.radio_station", "Classic Rock Florida") %} http://listen.shoutcast.com/Classic-RockFlorida
            {% elif is_state("input_select.radio_station", "Bob Sinclar Radio") %} http://listen.shoutcast.com/prysmradio09-mp3            
            {% elif is_state("input_select.radio_station", "Chill Out Zone") %} http://air.chillout.zone:8000/radio           
            {% elif is_state("input_select.radio_station", "SLAM! Hardstyle") %} http://stream.radiocorp.nl/web11_mp3
            {% elif is_state("input_select.radio_station", "Sleep Radio") %} http://37.59.28.208:8722/stream
            {% elif is_state("input_select.radio_station", "Ambient Sleeping Pill") %} http://perseus.shoutca.st:8447/h
            {% elif is_state("input_select.radio_station", "Radio Art - Sleep") %} http://live.radioart.com/fSleep.mp3
            {% elif is_state("input_select.radio_station", "Ambi Nature Radio") %} http://94.23.252.14:8067/stream
            {% elif is_state("input_select.radio_station", "Calm Radio - Sleep") %} http://streams.calmradio.com/api/39/128/stream
            {% elif is_state("input_select.radio_station", "Dinamo.FM Sleep") %} http://channels.dinamo.fm/sleep-aac
            {% endif %}
           media_content_type: 'audio/mp4'

I you don’t have Amazin Polly setup, use Google TTS instead.
Also, the delay of 8 seconds is just an estimate, change if needed.

Update:
You can also try this for the delay:

      - delay: > 
            {% if is_state("input_select.chromecast_radio", "Livingroom") %} '00:00:{{ states.media_player.ca_livingroom.attributes.media_duration | int }}'
            {% elif is_state("input_select.chromecast_radio", "Hall") %}  '00:00:{{ states.media_player.ca_hall.attributes.media_duration | int }}'
            {% elif is_state("input_select.chromecast_radio", "Bedroom") %}  '00:00:{{ states.media_player.media_player.bed_room.attributes.media_duration | int }}'
            {% elif is_state("input_select.chromecast_radio", "Bathroom") %}  '00:00:{{ states.media_player.media_player.ca_bathroom.attributes.media_duration | int }}'
            {% elif is_state("input_select.chromecast_radio", "Everywhere") %}  '00:00:{{ states.media_player.media_player.home_group.attributes.media_duration | int }}'
            {% endif %}

I’m not sure if templating is possible in the delay section though.

2 Likes

Works like a charm with google tts. :smiley: Thanks Bob.

1 Like

I love this Chromecast Radio integration! Thanks @Bob_NL :+1:

I made a radio station list mixing in stations from my RTL-SDR using rtl_fm_streamer for some Internet-free streaming local radio stations.

It would be made even easier if input_select supported a data payload like in the Feature Request linked below. Consider voting on it to greatly simplify this type of scripting.

1 Like

Did you put script.radio538 in the group for viewing?

from where did you get stream links? i want to get some arabic channel.

I have actually made a spotify version of this - it works fine - the only problem is that the spotify component have a bad memory when it comes to sources, especially if you use multiple chromecasts - rendering it useless to me at the moment. However if anybody have better luck with spotify i’ll love to share.

UPDATE:
The spotify version can be found here: Spotify Playlist Player :slight_smile:

I’m assuming that all these multi speakers solutions requires to keep the speakers powered all the time. I mean, you are not using home assistant to turn on the speaker. Am I right?
I would like to make something similar, but the fact that it will drain power while not in use really annoys me… :yum:

You can, but it will depend on what your speaker setup. With my yamaha AVR I have auto on and off working with squeezebox, chromecasts, mibox and you can use it with any media player that reports its state to hass.

Have a look at the last part of the first post in this thread.

1 Like

Hi,

This is my first ever try with HA, i installed it manually on my RBP3, the aim of this is that I wanted to say hey google good morning, it would dim the lights (already done through smartthings) AND play music on chromecast (I have the 2nd gen chromecast not audio) <- this i got told can only be done with HA

So now i installed it and i used the following in my configurations.yaml:

 radio538:
alias: Play Radio on Chromecast Audio
sequence:
  - service: media_player.volume_set
    data_template:
      entity_id: >
        {% if is_state("input_select.chromecast_radio", "Livingroom") %} media_player.ca_livingroom
        {% elif is_state("input_select.chromecast_radio", "Hall") %} media_player.ca_hall
        {% elif is_state("input_select.chromecast_radio", "Bedroom") %} media_player.bed_room
        {% elif is_state("input_select.chromecast_radio", "Bathroom") %} media_player.ca_bathroom
        {% elif is_state("input_select.chromecast_radio", "Everywhere") %} media_player.home_group
        {% endif %}
      volume_level: '{{  states.input_slider.volume_radio.state  }}' 
  -  service: media_player.play_media
     data_template:
       entity_id: >
        {% if is_state("input_select.chromecast_radio", "Livingroom") %} media_player.ca_livingroom
        {% elif is_state("input_select.chromecast_radio", "Hall") %} media_player.ca_hall
        {% elif is_state("input_select.chromecast_radio", "Bedroom") %} media_player.bed_room
        {% elif is_state("input_select.chromecast_radio", "Bathroom") %} media_player.ca_bathroom
        {% elif is_state("input_select.chromecast_radio", "Everywhere") %} media_player.home_group
        {% endif %}
       media_content_id: >
        {% if is_state("input_select.radio_station", "Radio 538") %} http://vip-icecast.538.lw.triple-it.nl:80/RADIO538_MP3
        {% elif is_state("input_select.radio_station", "Q-Music") %} http://icecast-qmusic.cdp.triple-it.nl/Qmusic_nl_live_96.mp3
        {% elif is_state("input_select.radio_station", "3FM") %} http://icecast.omroep.nl/3fm-bb-mp3
        {% elif is_state("input_select.radio_station", "100% NL") %} http://stream.100p.nl/100pctnl.mp3
        {% elif is_state("input_select.radio_station", "Veronica") %} http://8543.live.streamtheworld.com/VERONICACMP3
        {% elif is_state("input_select.radio_station", "Sky Radio") %} http://8623.live.streamtheworld.com:80/SKYRADIOAAC_SC
        {% elif is_state("input_select.radio_station", "Arrow Classic Rock") %} http://91.221.151.155/listen.mp3
        {% elif is_state("input_select.radio_station", "Classic FM") %} http://19143.live.streamtheworld.com/CLASSICFM_SC
        {% elif is_state("input_select.radio_station", "BNR Nieuwsradio") %} http://icecast-bnr.cdp.triple-it.nl/bnr_mp3_96_03
        {% elif is_state("input_select.radio_station", "Smooth Jazz Tampa") %} http://us3.internet-radio.com:8007/listen.mp3           
        {% elif is_state("input_select.radio_station", "Classic Rock Florida") %} http://listen.shoutcast.com/Classic-RockFlorida
        {% elif is_state("input_select.radio_station", "Bob Sinclar Radio") %} http://listen.shoutcast.com/prysmradio09-mp3            
        {% elif is_state("input_select.radio_station", "Chill Out Zone") %} http://air.chillout.zone:8000/radio           
        {% elif is_state("input_select.radio_station", "SLAM! Hardstyle") %} http://stream.radiocorp.nl/web11_mp3
        {% elif is_state("input_select.radio_station", "Sleep Radio") %} http://37.59.28.208:8722/stream
        {% elif is_state("input_select.radio_station", "Ambient Sleeping Pill") %} http://perseus.shoutca.st:8447/h
        {% elif is_state("input_select.radio_station", "Radio Art - Sleep") %} http://live.radioart.com/fSleep.mp3
        {% elif is_state("input_select.radio_station", "Ambi Nature Radio") %} http://94.23.252.14:8067/stream
        {% elif is_state("input_select.radio_station", "Calm Radio - Sleep") %} http://streams.calmradio.com/api/39/128/stream
        {% elif is_state("input_select.radio_station", "Dinamo.FM Sleep") %} http://channels.dinamo.fm/sleep-aac
        {% endif %}
       media_content_type: 'audio/mp4'

I now get the activate but nothing happens…

I can see my Chromecast widget and my Google home widget as well, the logs shows this:

2017-09-24 18:42:12 INFO (MainThread) [homeassistant.helpers.script] Script Play Radio on Chromecast: Executing step call service
2017-09-24 18:42:12 INFO (MainThread) [homeassistant.core] Bus:Handling <Event call_service[L]: service_call_id=1972524368-57, domain=media_player, service_data=entity_id=, media_content_id=, media_content_type=audio/mp4, service=play_media>
2017-09-24 18:42:12 ERROR (MainThread) [homeassistant.core] Invalid service data for media_player.play_media: Entity ID is an invalid entity id for dictionary value @ data[‘entity_id’]. Got ‘’
2017-09-24 18:42:12 INFO (MainThread) [homeassistant.core] Bus:Handling <Event service_executed[L]: service_call_id=1972524368-57>
2017-09-24 18:42:12 INFO (MainThread) [homeassistant.core] Bus:Handling <Event service_executed[L]: service_call_id=1972524368-55>
2017-09-24 18:42:12 INFO (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=script.radio538, old_state=<state script.radio538=off; last_triggered=2017-09-24T20:36:52.562368+02:00, friendly_name=Play Radio on Chromecast @ 2017-09-24T20:34:24.628233+02:00>, new_state=<state script.radio538=off; last_triggered=2017-09-24T20:42:12.046148+02:00, friendly_name=Play Radio on Chromecast @ 2017-09-24T20:34:24.628233+02:00>>

Any help is appreciated

Some things to try:

  • collapse whitespace. use a - after the > and remove the space after the curly brace that closes the if/elif statement. indentation is significant. the extra space could cause trouble
  • test everything in the template dev tool, just to make sure that your if/elif returns what you expect it to return.
    entity_id: >-
        {% if is_state("input_select.chromecast_radio", "Livingroom") %}media_player.ca_livingroom
        ...

Very thankful for reaching this topic. I use to play on a speaker connected do the raspberry pi aux port. My custom implementation was:

Changed the script
From: media_content_type: ‘audio/mp4’
To: media_content_type: ‘audio/mp3’

I also created a intent script to start the radio by voice commands (api.ai / actions on google):

ListenToRadio:
speech:
text: >
{%- if OnOff == “on” -%}
You are listening to {{ RadioStation }}
{%- else -%}
Turning off the radio
{%- endif -%}
action:
- service: input_select.select_option
data_template:
entity_id: input_select.chromecast_radio
option: OrangePi
- service: input_select.select_option
data_template:
entity_id: input_select.radio_station
option: >
{%- if OnOff == “on” -%}
{{ RadioStation }}
{%- else -%}
Stop
{%- endif -%}
- service: script.radio_start

1 Like

Change the entity_id’s to your media player id’s, I see you are using my exact same names which would be very coincidental :slight_smile:

That’s correct. I’m using a couple of simple ball speakers which hardly use any power but you’re right it is a drain.

Ok so now I have this in my config:

script:
radio538:
alias: Play Radio on Chromecast Audio
sequence:
- service: media_player.volume_set
data:
entity_id: media_player.chromecast
volume_level: ‘0.35’
- service: media_player.volume_set
data:
entity_id: media_player.chromecast
volume_level: ‘0.20’
- service: media_player.volume_set
data:
entity_id: media_player.chromecast
volume_level: ‘0.30’
- service: media_player.chromecast
data_template:
entity_id: >
{% if is_state(“input_select.chromecast_radio”, “Livingroom”) %} media_player.chromecast
{% elif is_state(“input_select.chromecast_radio”, “Hall”) %} media_player.chromecast
{% elif is_state(“input_select.chromecast_radio”, “Bedroom”) %} media_player.chromecast
{% elif is_state(“input_select.chromecast_radio”, “Bathroom”) %} media_player.chromecast
{% elif is_state(“input_select.chromecast_radio”, “Everywhere”) %} media_player.chromecast
{% endif %}
media_content_id: >
{% if is_state(“input_select.radio_station”, “Radio 538”) %} http://vip-icecast.538.lw.triple-it.nl:80/RADIO538_MP3
{% elif is_state(“input_select.radio_station”, “Q-Music”) %} http://icecast-qmusic.cdp.triple-it.nl/Qmusic_nl_live_96.mp3
{% elif is_state(“input_select.radio_station”, “3FM”) %} http://icecast.omroep.nl/3fm-bb-mp3
{% elif is_state(“input_select.radio_station”, “100% NL”) %} http://stream.100p.nl/100pctnl.mp3
{% elif is_state(“input_select.radio_station”, “Veronica”) %} http://8543.live.streamtheworld.com/VERONICACMP3
{% elif is_state(“input_select.radio_station”, “Sky Radio”) %} http://8623.live.streamtheworld.com:80/SKYRADIOAAC_SC
{% elif is_state(“input_select.radio_station”, “Arrow Classic Rock”) %} http://91.221.151.155/listen.mp3
{% elif is_state(“input_select.radio_station”, “Classic FM”) %} http://19143.live.streamtheworld.com/CLASSICFM_SC
{% elif is_state(“input_select.radio_station”, “BNR Nieuwsradio”) %} http://icecast-bnr.cdp.triple-it.nl/bnr_mp3_96_03
{% elif is_state(“input_select.radio_station”, “SLAM! Hardstyle”) %} http://vip-icecast.538.lw.triple-it.nl/WEB17_MP3
{% elif is_state(“input_select.radio_station”, “Sleep Radio”) %} http://37.59.28.208:8722/stream
{% elif is_state(“input_select.radio_station”, “Ambient Sleeping Pill”) %} http://perseus.shoutca.st:8447/h
{% elif is_state(“input_select.radio_station”, “Radio Art - Sleep”) %} http://live.radioart.com/fSleep.mp3
{% elif is_state(“input_select.radio_station”, “Ambi Nature Radio”) %} http://94.23.252.14:8067/stream
{% elif is_state(“input_select.radio_station”, “Calm Radio - Sleep”) %} http://streams.calmradio.com/api/39/128/stream
{% elif is_state(“input_select.radio_station”, “Dinamo.FM Sleep”) %} http://channels.dinamo.fm/sleep-aac
{% endif %}
media_content_type: ‘audio/mp4’

and now i get this, not sure exactly what to change:

2017-09-25 20:28:33 WARNING (MainThread) [homeassistant.core] Unable to find service media_player/chromecast

Please use blockquotes or preformatted text when posting code so we can debug. This is unreadable. Thanks.

done, apologies

I Also never get past the Activate widget…i never seen a drop down menu to choose speakers or stations…
however, if i click activate, the volume slider appears on TV and thats the best it went…