Node Red - Sonos select source and "join"

HI
I am giving Node Red a go and want to start with my morning rutine for music on my Sonos speakers.

My problem is how to select a source and how to join a group.

[{"id":"3f33f9fb.b248a6","type":"tab","label":"Sonos morgenflow (Arbejdsdag)","disabled":false,"info":""},{"id":"b38903ef.fc913","type":"api-call-service","z":"3f33f9fb.b248a6","name":"Afspil P1 på Badeværelset","server":"8e8c318.b5f5dd","version":1,"debugenabled":true,"service_domain":"media_player","service":"select_source","entityId":"media_player.badevaerelset","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":840,"y":160,"wires":[["cfcc732e.ea399"]]},{"id":"aa2dcfc2.cee21","type":"inject","z":"3f33f9fb.b248a6","name":"Klokken er 06:45","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"45 06 * * *","once":false,"onceDelay":0.1,"x":230,"y":160,"wires":[["1e43730e.717c7d"]]},{"id":"30e6ac9f.830ea4","type":"inject","z":"3f33f9fb.b248a6","name":"Klokken er 07:00","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"00 07 * * *","once":false,"onceDelay":0.1,"x":230,"y":220,"wires":[["b624533e.9243b"]]},{"id":"81f36e91.ac54f","type":"api-call-service","z":"3f33f9fb.b248a6","name":"Køkken join  Badeværelse","server":"8e8c318.b5f5dd","version":1,"debugenabled":false,"service_domain":"sonos","service":"sonos.join","entityId":"media_player.kokken","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":850,"y":220,"wires":[["cfcc732e.ea399"]]},{"id":"cfcc732e.ea399","type":"debug","z":"3f33f9fb.b248a6","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":1150,"y":300,"wires":[]},{"id":"1e43730e.717c7d","type":"api-current-state","z":"3f33f9fb.b248a6","name":"Er det arbejdsdag?","server":"8e8c318.b5f5dd","version":1,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"binary_sensor.er_det_arbejdsdag","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":450,"y":160,"wires":[["b38903ef.fc913"],[]]},{"id":"4a5c90bc.47a4a","type":"api-call-service","z":"3f33f9fb.b248a6","name":"Badeværelse unjoin Køkken","server":"8e8c318.b5f5dd","version":1,"debugenabled":false,"service_domain":"sonos","service":"unjoin","entityId":"media_player.badevaerelset","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":840,"y":280,"wires":[["cfcc732e.ea399"]]},{"id":"47d8b988.a0fb68","type":"inject","z":"3f33f9fb.b248a6","name":"Klokken er 07:30","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"30 07 * * *","once":false,"onceDelay":0.1,"x":230,"y":340,"wires":[["d01ec0c0.f9153"]]},{"id":"21cabd6c.f75532","type":"api-call-service","z":"3f33f9fb.b248a6","name":"Badeværelse Pause","server":"8e8c318.b5f5dd","version":1,"debugenabled":false,"service_domain":"media_player","service":"media_pause","entityId":"media_player.badevaerelset","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":860,"y":340,"wires":[["cfcc732e.ea399"]]},{"id":"2570a8f3.806ea8","type":"api-call-service","z":"3f33f9fb.b248a6","name":"Afspil P3 i køkkenet","server":"8e8c318.b5f5dd","version":1,"debugenabled":false,"service_domain":"media_player","service":"select_source","entityId":"media_player.badevaerelset","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":870,"y":400,"wires":[["cfcc732e.ea399"]]},{"id":"1ae263b5.57f55c","type":"inject","z":"3f33f9fb.b248a6","name":"Klokken er 08:00","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"00 08 * * *","once":false,"onceDelay":0.1,"x":230,"y":460,"wires":[["51715858.2d19d8"]]},{"id":"3575d4fe.981fac","type":"api-call-service","z":"3f33f9fb.b248a6","name":"Pause Køkken","server":"8e8c318.b5f5dd","version":1,"debugenabled":false,"service_domain":"media_player","service":"media_pause","entityId":"media_player.kokken","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":880,"y":460,"wires":[["cfcc732e.ea399"]]},{"id":"51715858.2d19d8","type":"api-current-state","z":"3f33f9fb.b248a6","name":"Er det arbejdsdag?","server":"8e8c318.b5f5dd","version":1,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"binary_sensor.er_det_arbejdsdag","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":450,"y":460,"wires":[["3575d4fe.981fac"],[]]},{"id":"d01ec0c0.f9153","type":"api-current-state","z":"3f33f9fb.b248a6","name":"Er det arbejdsdag?","server":"8e8c318.b5f5dd","version":1,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"binary_sensor.er_det_arbejdsdag","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":450,"y":340,"wires":[["2570a8f3.806ea8","4a5c90bc.47a4a","fb6285b4.90da98"],[]]},{"id":"b624533e.9243b","type":"api-current-state","z":"3f33f9fb.b248a6","name":"Er det arbejdsdag?","server":"8e8c318.b5f5dd","version":1,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"binary_sensor.er_det_arbejdsdag","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":450,"y":220,"wires":[["81f36e91.ac54f"],[]]},{"id":"fb6285b4.90da98","type":"delay","z":"3f33f9fb.b248a6","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":680,"y":340,"wires":[["21cabd6c.f75532"]]},{"id":"73a619ab.987878","type":"api-current-state","z":"3f33f9fb.b248a6","name":"Er det arbejdsdag?","server":"8e8c318.b5f5dd","version":1,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"binary_sensor.er_det_arbejdsdag","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":450,"y":340,"wires":[[],[]]},{"id":"ea82edc7.3472e","type":"api-current-state","z":"3f33f9fb.b248a6","name":"Er det arbejdsdag?","server":"8e8c318.b5f5dd","version":1,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"binary_sensor.er_det_arbejdsdag","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":450,"y":460,"wires":[[],[]]},{"id":"8e8c318.b5f5dd","type":"server","z":"","name":"Home Assistant","addon":true}]

I had an old script that I reuse by calling it in node-red, but this should give you an example of what data you need to provide. You can get the name of the source by playing something on your speakers and looking at the source_list attribute of your media_player entity in the developer tools. To get a source to show up, you need to navigate to it in the sonos app and use the 3 dots to “Add to My Sonos”

sonos_play_npr:
  alias: Sonos - Play NPR
  sequence:
  - data:
      entity_id: media_player.kitchen
      source: NPR
    service: media_player.select_source
  - data:
      entity_id:
        - media_player.bathroom
        - media_player.bedroom
        - media_player.living_room
      master: media_player.kitchen
    service: sonos.join

Hi fahr.

Thank you for taken time to answer my post.
Althought your reply did not answer my initial question, it gave my inspiration to else it could be solved.

:+1:

Hi Christian,

I try to do the same.
How did you solve it?

I have abandoned Nodered. I just nevergot the hang of it.
Here is the automation and the script i use instead.

Autmonation:


alias: SONOS morgenrutine
description: ''
trigger:
  - platform: time
    at: '06:45:00'
condition:
  - condition: state
    entity_id: binary_sensor.workday_sensor
    state: 'on'
  - condition: and
    conditions:
      - condition: template
        value_template: '{{ now().isocalendar()[1] not in [1,7,26,27,28,29,30,31,42,52,53] }}'
action:
  - service: script.sonos_morgenrutine
    data: {}
mode: single

Script:


alias: Sonos Morgenrutine
sequence:
  - service: media_player.select_source
    data:
      source: DR P1
    entity_id: media_player.badevaerelset
  - service: media_player.volume_set
    data:
      volume_level: 0.35
    entity_id: media_player.badevaerelset
  - delay: '00:05:00'
  - service: sonos.join
    data:
      master: media_player.badevaerelset
      entity_id: media_player.playone_kokken
    entity_id: media_player.playone_kokken
  - service: media_player.volume_set
    data:
      volume_level: 0.2
    entity_id: media_player.playone_kokken
  - delay: '00:20:00'
  - service: sonos.unjoin
    data:
      entity_id: media_player.playone_kokken
    entity_id: media_player.playone_kokken
  - service: media_player.select_source
    data:
      source: DR P3
    entity_id: media_player.playone_kokken
  - delay: '00:05:00'
  - service: media_player.media_pause
    data: {}
    entity_id: media_player.badevaerelset
mode: single