Sure.
As I mounted the music folder from an SMB share, Iāve mounted the folder to /config/media directly.
and the URL to outside from HA seems like /media/media/xxx.mp3
The folder in /config/ can be shared with any other docker which also accessible from the host, I mounted it in my host machine (ubuntu) with /etc/rc.local, as there is root issue in core docker.
HA Conf
homeassistant:
media_dirs:
media: /config/media
Please notice that you may also need to configure the external_url and internal_url if the music doesnāt play, more info to turn on debugging logs for media_player and related components.
Steps
- Install node-red-contrib-dir2files in node-red, the version I installed is 0.3.0.
- Create the input_boolean.music_time switch button in HA ā Configuration ā Helpers.
- Parse the node-red code below (N-R) to your node-red.
- Change the media_player entity to yours.
- Change the JS replace funcation content in ādeal with urlā function to your local media folder.
Feature
- Shuffling music / Stop playing to Google Home / Nest by toggle the music_time button.
- Shuffling music / Stop playing by telling Google Home / Nest to turn on/off āMusic Timeā (google_assistant linked with HA required).
- Stop the music playing (e.g āHey Google, Stopā) to media_player will stop shuffling music automatically.
- Pause the music playing (e.g. āHey Google, pause musicā) to media_player will shuffling the next song automatically.
- Play the next song by simply calling service media_player.media_stop or media_player.media_pause
Tell google to stop playing by voice will turn off the media player, it is different with media_stop. Thatās why it is no conflicts above features. The whole setup is perfect for me, hope it could solve your shuffling local music problem.
Play next song button card
type: 'custom:button-card'
tap_action:
action: call-service
service: media_player.media_stop
service_data:
entity_id: media_player.home_group
size: 50px
icon: 'hass:fast-forward'
name: Next Song
N-R
[{"id":"13ac7585.18210a","type":"tab","label":"media player","disabled":false,"info":""},{"id":"73ed9992.5411b8","type":"dir2files","z":"13ac7585.18210a","name":"","dirname":"/config/media","pathRegex":"","isRecursive":false,"findDir":false,"isArray":true,"x":340,"y":100,"wires":[["58ff70b9.a6b58"]]},{"id":"776d310e.5979f","type":"debug","z":"13ac7585.18210a","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":860,"y":100,"wires":[]},{"id":"58ff70b9.a6b58","type":"random-item","z":"13ac7585.18210a","name":"","input":"payload","inputType":"msg","output":"payload","outputType":"msg","number":1,"x":510,"y":60,"wires":[["143859dc.b68516"]]},{"id":"a1220b1d.bf98d8","type":"api-call-service","z":"13ac7585.18210a","name":"","server":"f25fc2a7.50d81","version":1,"debugenabled":false,"service_domain":"media_player","service":"play_media","entityId":"media_player.home_group","data":"post_data","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":820,"y":240,"wires":[["776d310e.5979f"]]},{"id":"143859dc.b68516","type":"function","z":"13ac7585.18210a","name":"deal with url","func":"file_name = msg.payload;\nsong_title = file_name\n .replace(\"/config/\",\"\")\n .replace(\"media/\",\"\")\n .replace(\".mp3\",\"\")\nfile_name = file_name.replace(\"/config/\",\"/media/\")\nmsg.post_data = {\"media_content_id\":file_name,\"media_content_type\":\"audio/mp3\"}\nmsg.post_data[\"extra\"] ={\"metadata\": {\"metadataType\":3,\"title\":song_title}}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":580,"y":140,"wires":[["a1220b1d.bf98d8","776d310e.5979f"]]},{"id":"3c129312.d5241c","type":"server-state-changed","z":"13ac7585.18210a","name":"","server":"f25fc2a7.50d81","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"media_player.home_group","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"idle","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"x":210,"y":280,"wires":[["f4ccfdb9.d779d","776d310e.5979f"],["3c06a1df.f5ea0e"]]},{"id":"f4ccfdb9.d779d","type":"api-current-state","z":"13ac7585.18210a","name":"","server":"f25fc2a7.50d81","version":1,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"input_boolean.music_time","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":230,"y":200,"wires":[["73ed9992.5411b8"],[]]},{"id":"49b79303.897c5c","type":"server-state-changed","z":"13ac7585.18210a","name":"","server":"f25fc2a7.50d81","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"input_boolean.music_time","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"on","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"x":210,"y":340,"wires":[["73ed9992.5411b8"],["52d23ddf.ff4954"]]},{"id":"52d23ddf.ff4954","type":"api-call-service","z":"13ac7585.18210a","name":"","server":"f25fc2a7.50d81","version":1,"debugenabled":false,"service_domain":"media_player","service":"media_stop","entityId":"media_player.home_group","data":"","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":600,"y":300,"wires":[[]]},{"id":"3c06a1df.f5ea0e","type":"switch","z":"13ac7585.18210a","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"paused","vt":"str"},{"t":"eq","v":"off","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":470,"y":420,"wires":[["73ed9992.5411b8"],["a232d975.043968"]]},{"id":"a232d975.043968","type":"api-call-service","z":"13ac7585.18210a","name":"off music","server":"f25fc2a7.50d81","version":1,"debugenabled":false,"service_domain":"input_boolean","service":"turn_off","entityId":"input_boolean.music_time","data":"","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":650,"y":420,"wires":[[]]},{"id":"f25fc2a7.50d81","type":"server","name":"Home Assistant"}]