MagicMirror Forum
    • Recent
    • Tags
    • Unsolved
    • Solved
    • MagicMirror² Repository
    • Documentation
    • 3rd-Party-Modules
    • Donate
    • Discord
    • Register
    • Login
    A New Chapter for MagicMirror: The Community Takes the Lead
    Read the statement by Michael Teeuw here.

    MMM-Spotify

    Scheduled Pinned Locked Moved Entertainment
    249 Posts 51 Posters 276.3k Views 54 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • L Offline
      larrougos @Guest
      last edited by

      @Sean said in MMM-Spotify:

      @larrougos

      Also another problem that i have is that if spotify is not already playing in the background i am not able to play anything. whatever command i give. and the frontend does not even show the spotify logo. it just disappears on after one sec on start.

      In that case, maybe, the module cannot find available active devices. It doesn’t mean you have no device. But by default, Spotify doesn’t know which device is yours unless it is powered and logged as your account.
      So at least one of your devices need to be activated when this SDK is used. I recommend to install Raspotify, that could makes your spotify always on.

      i am running from ubuntu laptop with Spotify application! i tried with raspotify to install but from what i understood it does not support the laptop arch!

      1 Reply Last reply Reply Quote 0
      • R Offline
        rabbit83ka @kwaeksler
        last edited by rabbit83ka

        First of all thanks for the module and the effort you put in it.

        @Sean said in MMM-Spotify:

        updated

        1.1.0 (2019-03-25)

        • Device Limitation : Now you can allow or limit devices to display its playing on MM.

        One question regarding the device limitation: if I leave it empty, the module shows the cover etc. as it should. If I try to limit it to my echo dot with

         allowDevices: ["myechodot"],
        

        the spotify logo appears if I start playback on the echo dot, but no cover etc. is shown. Any hints?

        ? 1 Reply Last reply Reply Quote 0
        • ? Offline
          A Former User @rabbit83ka
          last edited by

          @rabbit83ka
          When you play something on your echodot, nothing been displayed?

          R 1 Reply Last reply Reply Quote 0
          • R Offline
            rabbit83ka @Guest
            last edited by rabbit83ka

            @Sean
            If I comment out

            //allwoeDevices: ["myechodot" ]
            

            it shows the album cover/etx/progress etc. when I play something on my echo dot. With

             allowDevices: ["myechodot"],
            

            the spotify logo appears when something is played on the echodot, but no cover/text/progress etc. is shown.

            1 Reply Last reply Reply Quote 0
            • I Offline
              Ivanov_d
              last edited by

              This post is deleted!
              1 Reply Last reply Reply Quote 0
              • I Offline
                Ivanov_d
                last edited by

                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?

                ? 1 Reply Last reply Reply Quote 0
                • ? Offline
                  A Former User @Ivanov_d
                  last edited by

                  @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)

                  1 Reply Last reply Reply Quote 0
                  • I Offline
                    Ivanov_d
                    last edited by

                    @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.0_1563467613897_Untitled20190718193321.png

                    1 Reply Last reply Reply Quote 0
                    • I Offline
                      Ivanov_d
                      last edited by

                      @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:

                      1. Raspotify is running in the background (but no music is playing)
                      2. When I say “music please” spotify will start a random song and play it on the MagicMirror

                      The result however is:

                      1. Raspotify is running in the background and no music is playing
                      2. When I say “music please” I see no errors in the logs, however, no music is starting as well
                      3. 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
                      ? 2 Replies Last reply Reply Quote 0
                      • ? Offline
                        A Former User @Ivanov_d
                        last edited by

                        @Ivanov_d
                        There could be 2(or 3)kinds of possibility about your issue;

                        1. AssistantMk2 cannot catch your word “music please”
                        2. AssistantMk2 could catch “music please” but cannot emit “SPOTIFY_PLAY” notification
                        3. 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.

                        1 Reply Last reply Reply Quote 0
                        • ? Offline
                          A Former User @Ivanov_d
                          last edited by A Former User

                          @Ivanov_d
                          I just tested 3rd case, and there is no problem to work. I think your music please phrase is not hooked, because music is 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 by Custom Action for Assistant (And even though, cannot guarantee it will work), your music keyword couldn’t work.
                          Can you try other phrase? like “stay tune.” or any phrase you like.

                          1 Reply Last reply Reply Quote 0
                          • I Offline
                            Ivanov_d
                            last edited by

                            @Sean I will try that and report back. Thanks for the suggestion.

                            1 Reply Last reply Reply Quote 0
                            • F Offline
                              Faiek
                              last edited by

                              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.
                              ? 1 Reply Last reply Reply Quote 0
                              • ? Offline
                                A Former User @Faiek
                                last edited by

                                @Faiek
                                you might have missed closing brace somewhere. check to count opening and closung pairs.

                                F 1 Reply Last reply Reply Quote 0
                                • F Offline
                                  Faiek @Guest
                                  last edited by

                                  @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

                                  ? 1 Reply Last reply Reply Quote 0
                                  • ? Offline
                                    A Former User @Faiek
                                    last edited by

                                    @Faiek
                                    Just add } over exports....

                                    }
                                    
                                    exports.recipe = recipe // Don't remove this line.
                                    
                                    F 1 Reply Last reply Reply Quote 0
                                    • F Offline
                                      Faiek @Guest
                                      last edited by

                                      @Sean Thanks A Million - - working :grinning_face:

                                      1 Reply Last reply Reply Quote 0
                                      • I Offline
                                        Ivanov_d
                                        last edited by

                                        @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.
                                        
                                        1 Reply Last reply Reply Quote 0
                                        • M Offline
                                          menanr
                                          last edited by

                                          This post is deleted!
                                          ? 1 Reply Last reply Reply Quote 0
                                          • ? Offline
                                            A Former User @menanr
                                            last edited by

                                            @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.

                                            1 Reply Last reply Reply Quote 0

                                            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
                                            • 1
                                            • 2
                                            • 3
                                            • 4
                                            • 5
                                            • 6
                                            • 7
                                            • 12
                                            • 13
                                            • 5 / 13
                                            • First post
                                              Last post
                                            Enjoying MagicMirror? Please consider a donation!
                                            MagicMirror created by Michael Teeuw.
                                            Forum managed by Sam, technical setup by Karsten.
                                            This forum is using NodeBB as its core | Contributors
                                            Contact | Privacy Policy