Chromecast Radio with station and player selection

haha, ok thanks. Never heard that, I’ll remember now :wink:

2 Likes

Thanks Bob for making this. Is there a way to announce what station is going to be played? With local mp3 file or maybe with tts. I use xiaomi cube as remote control for input select and it would be nice if i know what station is going to be played.

2 Likes

@vladosam great idea. I’ll implement this next weekend ok?

1 Like

Sure.I think it would be nice addition to already great radio. Thanks.

For anyone that’s interested in iHeart Radio streams, I ran across these when looking for my local talk station. I’ve tried a couple and they seem to work fine.

https://pastebin.com/YYamKGgr
http://forums.slimdevices.com/showthread.php?90677-playing-iheartradio-individual-stations

3 Likes

For stop I added this as a script:

stop_playback:
  alias: Stop stream
  sequence:
    - service: media_player.media_stop
      data_template:
        entity_id: >
         {% if is_state("input_select.chromecast_radio", "Bedroom") %} media_player.castbedroom
         {% elif is_state("input_select.chromecast_radio", "Kitchen") %} media_player.castkitchen
         {% elif is_state("input_select.chromecast_radio", "Everywhere") %} media_player.flat
         {% endif %}

@Bob_NL it works really nice, except that I always need a few tries (click activate 3 times) to start streaming. In the states tab instead of “playing” the state is idle. Do you know what’s the problem there?

edit:
I tried it out a little more. It seems as if I’ve to change the station first. If I freshly started HA and just clicked on play, it goes into idle mode. If I choose another station, it plays the stream without problems

edit2:
So it seems as if we got a router update and some requests get blocked. Thus I guess it’s a router problem currently, not with the setup.

For people interested in adding tunein listed radius, there is quite an easy way to extract the url of tunein radio station decribed here.

Or if you’re using firefox, just start the station, pause it, at the bottom banner (where you control play / pause) rightclick and select “Sho siteinformation”, change to the media tab, then in the list there should be one item of type audio, that’s your stream.

I think I read this mozilla-guide somewhere here in the forum, but can’t find it anymore

1 Like

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