Read the statement by Michael Teeuw here.
MMM-Spotify
-
I have the following recipies:
var recipe = { transcriptionHook: { HIDE_ALL_MODULES: { pattern: "standby mode", command: "HIDEMODULES" }, SHOW_ALL_MODULES: { pattern: "show modules", command: "SHOWMODULES" }, SCREEN_ON: { pattern: "turn on screen", command: "SCREENON" }, SCREEN_OFF: { pattern: "turn off screen", command: "SCREENOFF" }, REBOOT: { pattern: "reboot the mirror", command: "REBOOT" }, SHUTDOWN: { pattern: "extinction totale", command: "SHUTDOWN" }, STOP_PLAY: { pattern: "stop the video", // this is for youtube but it is preferable to have youtubeAutoplay: false, when running spotify so you don't get interaction with youtube player. command: "STOP_VID" }, SPOTIFY_PREVIOUS: { pattern: "previous song", command: "SPOTIFY_PREVIOUS" }, SPOTIFY_PAUSE: { pattern : "stop the music", command: "SPOTIFY_PAUSE" }, SPOTIFY_PLAY: { pattern : "music please", command: "SPOTIFY_PLAY" }, SPOTIFY_NEXT: { pattern: "next song", command: "SPOTIFY_NEXT" }, SPOTIFY_VOLUME: { pattern: "set music volume to ([0-9]{1,2}[0]?|100)", command: "SPOTIFY_VOLUME" }, SPOTIFY_SEARCH: { pattern: "play (.*) on Spotify", command: "SPOTIFY_SEARCH" }, SPOTIFY_SEARCH_PLAYLIST: { pattern: "playlist (.*) on Spotify", command: "SPOTIFY_SEARCH_PLAYLIST" }, SPOTIFY_MA_PLAYLIST: { pattern: "(.*) my playlist", // (.*) is an action eg: play my playlist / run my playlist etc... command: "SPOTIFY_MA_PLAYLIST" }, SPOTIFY_TRANSFER: { pattern: "play the music on (.*)", // (.*) is the name of your device command: "SPOTIFY_TRANSFER" }, VOLUME_UP: { pattern: "volume up", command: "CMD_VOLUME_UP" }, VOLUME_DOWN: { pattern: "volume down", command: "CMD_VOLUME_DOWN" }, SET_VOLUME: { pattern: "set master volume to ([0-9]{1,2}[0]?|100)", command: "CMD_VOLUME_SET" } }, command: { STOP_VID: { moduleExec: { module: ["MMM-AssistantMk2"], exec: (module, params, key) => { module.assistant.subdom.youtube.innerHTML = ""; module.assistant.subdom.youtube.style.display = "none"; module.youtubePlaying = false; } } }, SPOTIFY_TRANSFER: { notificationExec: { notification: "SPOTIFY_TRANSFER", payload: (params) => { console.log("SPOTIFY_TRANSFER @",params) return params[1]; } } }, SPOTIFY_PAUSE: { notificationExec: { notification: "SPOTIFY_PAUSE" } }, SPOTIFY_PLAY: { notificationExec: { notification: "SPOTIFY_PLAY" } }, SPOTIFY_MA_PLAYLIST: { notificationExec: { notification: "SPOTIFY_PLAY", payload: (params) => { console.log("SPOTIFY_MA_PLAYLIST") return { context_uri:"spotify:playlist:0ka8HWt4xXcnTK5OpOuN2k", // Uri of a personnal playlist or album } }, notification: "SPOTIFY_SHUFFLE", // added this to toogle shuffle notification: "SPOTIFY_NEXT" // added this to not always have the same song starting first } }, SPOTIFY_NEXT: { notificationExec: { notification: "SPOTIFY_NEXT" } }, SPOTIFY_PREVIOUS: { notificationExec: { notification: "SPOTIFY_PREVIOUS" } }, SPOTIFY_VOLUME: { notificationExec: { notification: "SPOTIFY_VOLUME", payload: (params) => { console.log("SPOTIFY_VOLUME @",params) return params[1]; } } }, SPOTIFY_SEARCH: { notificationExec: { notification: "SPOTIFY_SEARCH", payload: (params) => { console.log("SPOTIFY_SEARCH @",params) return { type: "artist,track,album,playlist", query: params[1], random:false, } } } }, SPOTIFY_SEARCH_PLAYLIST: { notificationExec: { notification: "SPOTIFY_SEARCH", payload: (params) => { console.log("SPOTIFY_SEARCH_PLAYLIST @",params) return { type: "playlist", query: params[1], random:true, } } } }, CMD_VOLUME_UP: { notificationExec: { notification: "VOLUME_UP" } }, CMD_VOLUME_DOWN: { notificationExec: { notification: "VOLUME_DOWN" } }, CMD_VOLUME_SET: { notificationExec: { notification: "VOLUME_SET", payload: (params, key) => { console.log("@", params); return params[1]; } } }, } } exports.recipe = recipe // Don't remove this line.However, the
SPOTIFY_PLAY: { pattern : "music please", command: "SPOTIFY_PLAY" },Doesn’t work. It recognizes the command, but nothing happens. Playback from the mirror (raspotify) doesn’t happen. If I switch the source from my desktop/phone spotify app to Raspotify, then everything is fine (e.g. I renamed the player from Raspotify to MagicMirror if that matters).
There are no errors in the logs as far as I can see.
Any thoughts?
-
@Ivanov_d
Only that command doesn’t work? Other’s OK?
Raspotify should be already running when you use this module. (This module cannot boot up Raspotify itself) -
@Sean yes, the other commands work. I can skip the song, increase/decrease the volume and etc. Also Raspotify is running, because I can start the playback on the mirror from my Desktop/Smartphone app.

-
@Sean, I did some more testing and I can confirm that this is the only command that doesn’t work. Maybe I am not understanding it correctly.
My expected results would be:
- Raspotify is running in the background (but no music is playing)
- When I say “music please” spotify will start a random song and play it on the MagicMirror
The result however is:
- Raspotify is running in the background and no music is playing
- When I say “music please” I see no errors in the logs, however, no music is starting as well
- To workaround this I start the music from my smartphone or desktop app and switch the player to MagicMirror, after that I can control the player via AssistankMK2
-
@Ivanov_d
There could be 2(or 3)kinds of possibility about your issue;- AssistantMk2 cannot catch your word “music please”
- AssistantMk2 could catch “music please” but cannot emit “SPOTIFY_PLAY” notification
- Spotify cannot receive (or understand) SPOTIFY_PLAY notification. (hmmm… I can’t agree about this)
Well, I’ll test from last third issue. Wait for a while.
-
@Ivanov_d
I just tested 3rd case, and there is no problem to work. I think yourmusic pleasephrase is not hooked, becausemusicis reserved word for default Music feature of Assistant itself(for Youtube Music or Spotify on Google Home itself, but not yet supported by SDK for devices - only allowed for Google Home or some genuine devices). Some keywords or phrases are reserved for Google itself. Unless you override the keywords byCustom Action for Assistant(And even though, cannot guarantee it will work), yourmusickeyword couldn’t work.
Can you try other phrase? like “stay tune.” or any phrase you like. -
@Sean I will try that and report back. Thanks for the suggestion.
-
Hi Guys need some help with this module - newbie :smirking_face:
I have the following loaded succesfully:
AssistantMk2
Hotword
Raspotify
Change device name in Raspotify :to Mirror
Created a spotify.json - recipe(code from here) in recipes file this is it:
Added the recipe to the Mk2.js
recipes:[“hide_and_show_all_modules.js”, “reboot.js”, “screen_onoff.js”, “shutdown.js”, “spotify.js”],
Dont know what i missed - any assistance please …var recipe = { transcriptionHook: { STOP_PLAY: { pattern: "stop the video", // this is for youtube but it is preferable to have youtubeAutoplay: false, when running spotify so you don't get interaction with youtube player. command: "STOP_VID" }, // STOP_PLAY2: { // pattern: "arrête la musique", // command: "STOP_VID" // }, SPOTIFY_PREVIOUS: { pattern: "previous song", command: "SPOTIFY_PREVIOUS" }, SPOTIFY_PAUSE: { pattern : "stop the musique", command: "SPOTIFY_PAUSE" }, SPOTIFY_PLAY: { pattern : "music please", command: "SPOTIFY_PLAY" }, SPOTIFY_NEXT: { pattern: "next song", command: "SPOTIFY_NEXT" }, SPOTIFY_VOLUME: { pattern: "set music volume to ([0-9]{1,2}[0]?|100)", command: "SPOTIFY_VOLUME" }, SPOTIFY_SEARCH: { pattern: "play (.*) on Spotify", command: "SPOTIFY_SEARCH" }, SPOTIFY_SEARCH_PLAYLIST: { pattern: "playlist (.*) on Spotify", command: "SPOTIFY_SEARCH_PLAYLIST" }, SPOTIFY_MA_PLAYLIST: { pattern: "(.*) my playlist", // (.*) is an action eg: play my playlist / run my playlist etc... command: "SPOTIFY_MA_PLAYLIST" }, SPOTIFY_TRANSFER: { pattern: "play the music on (.*)", // (.*) is the name of your device command: "SPOTIFY_TRANSFER" }, VOLUME_UP: { pattern: "volume up", command: "CMD_VOLUME_UP" }, VOLUME_DOWN: { pattern: "volume down", command: "CMD_VOLUME_DOWN" }, SET_VOLUME: { pattern: "set master volume to ([0-9]{1,2}[0]?|100)", command: "CMD_VOLUME_SET" } }, command: { STOP_VID: { moduleExec: { module: ["MMM-AssistantMk2"], exec: (module, params, key) => { module.assistant.subdom.youtube.innerHTML = ""; module.assistant.subdom.youtube.style.display = "none"; module.youtubePlaying = false; } } }, SPOTIFY_TRANSFER: { notificationExec: { notification: "SPOTIFY_TRANSFER", payload: (params) => { console.log("SPOTIFY_TRANSFER @",params) return params[1]; } } }, SPOTIFY_PAUSE: { notificationExec: { notification: "SPOTIFY_PAUSE" } }, SPOTIFY_PLAY: { notificationExec: { notification: "SPOTIFY_PLAY" } }, SPOTIFY_MA_PLAYLIST: { notificationExec: { notification: "SPOTIFY_PLAY", payload: (params) => { console.log("SPOTIFY_MA_PLAYLIST") return { context_uri:"spotify:playlist:0bdByehKVfdsfdsfdsOhF5t", // Uri of a personnal playlist or album } }, notification: "SPOTIFY_SHUFFLE", // added this to toogle shuffle notification: "SPOTIFY_NEXT" // added this to not always have the same song starting first } }, SPOTIFY_NEXT: { notificationExec: { notification: "SPOTIFY_NEXT" } }, SPOTIFY_PREVIOUS: { notificationExec: { notification: "SPOTIFY_PREVIOUS" } }, SPOTIFY_VOLUME: { notificationExec: { notification: "SPOTIFY_VOLUME", payload: (params) => { console.log("SPOTIFY_VOLUME @",params) return params[1]; } } }, SPOTIFY_SEARCH: { notificationExec: { notification: "SPOTIFY_SEARCH", payload: (params) => { console.log("SPOTIFY_SEARCH @",params) return { type: "artist,track,album,playlist", query: params[1], random:false, } } } }, SPOTIFY_SEARCH_PLAYLIST: { notificationExec: { notification: "SPOTIFY_SEARCH", payload: (params) => { console.log("SPOTIFY_SEARCH_PLAYLIST @",params) return { type: "playlist", query: params[1], random:true, } } } }, CMD_VOLUME_UP: { notificationExec: { notification: "VOLUME_UP" } }, CMD_VOLUME_DOWN: { notificationExec: { notification: "VOLUME_DOWN" } }, CMD_VOLUME_SET: { notificationExec: { notification: "VOLUME_SET", payload: (params, key) => { console.log("@", params); return params[1]; } } } }, exports.recipe = recipe // Don't remove this line.This is the error
AMK2] Recipe is loaded: shutdown.js Whoops! There was an uncaught exception... /home/pi/MagicMirror/modules/MMM-AssistantMk2/recipes/spotify.js:183 exports.recipe = recipe // Don't remove this line. ^ SyntaxError: Unexpected token . at new Script (vm.js:74:7) at createScript (vm.js:246:10) at Object.runInThisContext (vm.js:298:10) at Module._compile (internal/modules/cjs/loader.js:678:28) at Object.Module._extensions..js (internal/modules/cjs/loader.js:722:10) at Module.load (internal/modules/cjs/loader.js:620:32) at tryModuleLoad (internal/modules/cjs/loader.js:559:12) at Function.Module._load (internal/modules/cjs/loader.js:551:3) at Module.require (internal/modules/cjs/loader.js:658:17) at require (internal/modules/cjs/helpers.js:20:18) MagicMirror will not quit, but it might be a good idea to check why this happened. -
@Faiek
you might have missed closing brace somewhere. check to count opening and closung pairs. -
@Sean Thanks for the response - i m lost - no programming knowledge whats so ever
trail and error got me thus far- and everything’s working great except spotify, still learning.
Can’t i get a completed (recipe.json) with any other require details, for voice activation on this module that could assist me, once i have one, ill probably be able to see my error.
Stomped for days now … online json checkers… really need to learn the basics …Thanks -
@Faiek
Just add}overexports....} exports.recipe = recipe // Don't remove this line. -
@Sean Thanks A Million - - working :grinning_face:
-
@Sean I have changed the hook phrase to “showtime” and it still doesn’t work.
SPOTIFY_PLAY: { pattern : "showtime", command: "SPOTIFY_PLAY" },[HOTWORD] Final Result: { detected: true, hotword: 'assistant', file: null } [AMK2] assistant ready [AMK2] Conversation starts. [AMK2] Assistant Text Response: [AMK2] Transcription: show --- Done: false [AMK2] Transcription: shut --- Done: false [AMK2] Transcription: showtime --- Done: false [AMK2] Transcription: showtime --- Done: false [AMK2] end-of-utterance [AMK2] Transcription: showtime --- Done: true { requestId: '5d433446-0000-2772-8141-089e0827c3f4' } { profileFile: 'default.json', lang: 'en-US' } [AMK2] Device Action: { requestId: '5d433446-0000-2772-8141-089e0827c3f4' } [AMK2] Assistant Text Response: [AMK2] Conversation Completed null [HOTWORD] begins. [HOTWORD] Detector starts listening. -
This post is deleted! -
@menanr
Check your firewall or network setting. And check also your MM is running on port 8888. You can try to connect “https://localhost:8888/callback” outside of your home network to check whether it is accessible from outside. -
i can only see spotify logo and hear music . But nothing to show !!
What can i do ? and how to config onStart: { ??
Here is error logs[AMK2] Temporal storage directory is clearing.
Whoops! There was an uncaught exception…
TypeError: Cannot read property ‘getCurrentPlayback’ of null
at Class.updatePulse (/home/pi/MagicMirror/modules/MMM-Spotify/node_helper.js:30:18)
at Class.initAfterLoading (/home/pi/MagicMirror/modules/MMM-Spotify/node_helper.js:26:10)
at Class.socketNotificationReceived (/home/pi/MagicMirror/modules/MMM-Spotify/node_helper.js:44:12)
at Socket. (/home/pi/MagicMirror/modules/node_modules/node_helper/index.js:113:11)
at Socket.emit (events.js:182:13)
at /home/pi/MagicMirror/node_modules/socket.io/lib/socket.js:528:12
at process._tickCallback (internal/process/next_tick.js:61:11) -
@t-architecture99
Maybe your ‘spotify.config.json’ would be wrong. Check it again. -
Hi did you figure this out, I’m stuck at this very same issue, I have Spotify working . how do I get voice assistant to integrate, do I modify the config.js file or the AssistantMK2.json file…??
-
Having an issue with the song info showing up on the MM.
I have everything installed correctly ( to my knowledge, or else it would work right?) and have the white Spotify symbol.
I entered my Client ID and Secret.
Callback and port are in there. I authorized through Spotify…
Not sure what i am missing…Help?
{ module: "MMM-Spotify", position: "bottom_left", config: { style: "mini", // "default" or "mini" available control: "default", //"default", "hidden" available updateInterval: 1000, onStart: null, // disable onStart feature with `null` allowDevices: [], //If you want to limit devices to display info, use this. // allowDevices: ["RASPOTIFY", "My iPhoneX", "My Home speaker"], } },{ "CLIENT_ID" : "xxxx", "CLIENT_SECRET" : "xxxx", "AUTH_DOMAIN" : "http://localhost", "AUTH_PATH" : "/callback", "AUTH_PORT" : "8888", "SCOPE" : "user-read-private app-remote-control playlist-read-private streaming user-read-playback-state user-modify-playback-state", "TOKEN" : "./token.json" } -
@bminer1
Tell me more details. What happens on MagicMirror when you activate your spotify app on your smartphone?
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login