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-MirrorMirrorOnTheWall installation issue

    Scheduled Pinned Locked Moved Unsolved Troubleshooting
    138 Posts 11 Posters 171.1k Views 10 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.
    • richland007R Offline
      richland007
      last edited by

      Here it is

      'use strict';
      /**
       * A Lambda function for handling Alexa Skill MirrorMirrorOnTheWall requests.
       *
       * Examples:
       * One-shot model:
       *  User: "Alexa On The Wall, find Snow White."
       *  Alexa: "Yes my Queen, showing images of Snow White."
       */
      
      const Alexa = require('alexa-sdk');
      
      /**
       * App ID for the skill
       * 
       * replace with your app ID 
       */
      const appId = "amzn1.ask.skill.XXXXXXXXXX-48bd-9b1c-3d309a950fcf";
      
      const MirrorMirror = require('./MirrorMirror');
      MirrorMirror.setup();
      
      const Keys = require("./certs/keys.json");
      const GoogleImages = require('google-images');
      var googleImages = new GoogleImages(Keys.cse.ID, Keys.cse.API_key);
      
      const YouTube = require('youtube-node');
      var youTube = new YouTube();
      youTube.setKey(Keys.youtube.API_key);
      
      exports.handler = function(event, context, callback) {
          let alexa = Alexa.handler(event, context);
          alexa.appId = appId;
          // To enable string internationalization (i18n) features, set a resources object.
          alexa.resources = languageStrings;
          alexa.registerHandlers(handlers);
          alexa.execute();
      };
      
      var languageStrings = {
          "en-US": {
              "translation": {
                  "WELCOME_MESSAGE": "Hello my Queen, what can I do for you? ",
                  "WELCOME_REPROMPT": "I can show you text and images, if you give me commands like 'say you are the fairest of them all' or 'find Snow White'. I can also open or close a magic mirror module, if you say commands like 'open compliments', or 'close weather forecast'. What can I do for you, my Queen?",
                  "WELCOME_CARD": "Hello",
                  "HELP_MESSAGE": "Hello my Queen, I can show you text and images, if you give me commands like 'say you are the fairest of them all' or 'find Snow White'. I can also open or close a magic mirror module, if you say commands like 'open compliments', or 'close weather forecast'. What can I do for you, my Queen?",
                  "HELP_CARD": "Help",
                  "STOP_MESSAGE": "See you next time, my Queen!",
                  "STOP_CARD": "Goodbye",
                  "SHOW_TEXT": "Yes, my Queen. %s.",
                  "SHOW_TEXT_ERR": "Sorry, my Queen, I didn't get that. You can give me commands like 'display text of hello', or 'say you are the fairest of them all'. What can I do for you, my Queen?",
                  "SHOW_TEXT_CARD": "Display Text",
                  "SHOW_IMAGE": "Yes, my Queen, showing images of %s.",
                  "SHOW_IMAGE_ERR": "Sorry, my Queen, I didn't get that. You can give me commands like 'find Snow White' or 'show me images of Bill Gates'. What can I do for you, my Queen?",
                  "SHOW_IMAGE_CARD": "Show Image",
                  "TURN_ON_MODULE": "Yes, my Queen, opening module %s.",
                  "TURN_ON_MODULE_ERR": "Sorry, my Queen, I didn't get that. You can give me commands like 'open current weather' or 'turn on compliments'. What can I do for you, my Queen?",
                  "TURN_ON_MODULE_CARD": "Open Module",
                  "TURN_ON_ALL_MODULES": "Yes, my Queen, opening all modules.",
                  "TURN_ON_ALL_MODULES_CARD": "Open All Modules",
                  "TURN_OFF_MODULE": "Yes, my Queen, closing module %s.",
                  "TURN_OFF_MODULE_ERR": "Sorry, my Queen, I didn't get that. You can give me commands like 'close current weather' or 'turn off compliments'. What can I do for you, my Queen?",
                  "TURN_OFF_MODULE_CARD": "Close Module",
                  "TURN_OFF_ALL_MODULES": "Yes, my Queen, closing all modules.",
                  "TURN_OFF_ALL_MODULES_CARD": "Close All Modules",
                  "SHOW_VIDEO": "Yes, my Queen, showing a video of %s.",
                  "SHOW_VIDEO_ERR": "Sorry, my Queen, I didn't get that. You can give me commands like 'find a video of Snow White' or 'show me a video of Bill Gates'. What can I do for you, my Queen?",
                  "SHOW_VIDEO_CARD": "Play Video",
                  "ERROR_CARD": "Error"
              }
          },
          "en-GB": {
              "translation": {
                  "WELCOME_MESSAGE": "Hello my Queen, what can I do for you? ",
                  "WELCOME_REPROMPT": "I can show you text and images, if you give me commands like 'say you are the fairest of them all' or 'find Snow White'. I can also open or close a magic mirror module, if you say commands like 'open compliments', or 'close weather forecast'. What can I do for you, my Queen?",
                  "WELCOME_CARD": "Hello",
                  "HELP_MESSAGE": "Hello my Queen, I can show you text and images, if you give me commands like 'say you are the fairest of them all' or 'find Snow White'. I can also open or close a magic mirror module, if you say commands like 'open compliments', or 'close weather forecast'. What can I do for you, my Queen?",
                  "HELP_CARD": "Help",
                  "STOP_MESSAGE": "See you next time, my Queen!",
                  "STOP_CARD": "Goodbye",
                  "SHOW_TEXT": "Yes, my Queen. %s.",
                  "SHOW_TEXT_ERR": "Sorry, my Queen, I didn't get that. You can give me commands like 'display text of hello', or 'say you are the fairest of them all'. What can I do for you, my Queen?",
                  "SHOW_TEXT_CARD": "Display Text",
                  "SHOW_IMAGE": "Yes, my Queen, showing images of %s.",
                  "SHOW_IMAGE_ERR": "Sorry, my Queen, I didn't get that. You can give me commands like 'find Snow White' or 'show me images of Bill Gates'. What can I do for you, my Queen?",
                  "SHOW_IMAGE_CARD": "Show Image",
                  "TURN_ON_MODULE": "Yes, my Queen, opening module %s.",
                  "TURN_ON_MODULE_ERR": "Sorry, my Queen, I didn't get that. You can give me commands like 'open current weather' or 'turn on compliments'. What can I do for you, my Queen?",
                  "TURN_ON_MODULE_CARD": "Open Module",
                  "TURN_ON_ALL_MODULES": "Yes, my Queen, opening all modules.",
                  "TURN_ON_ALL_MODULES_CARD": "Open All Modules",
                  "TURN_OFF_MODULE": "Yes, my Queen, closing module %s.",
                  "TURN_OFF_MODULE_ERR": "Sorry, my Queen, I didn't get that. You can give me commands like 'close current weather' or 'turn off compliments'. What can I do for you, my Queen?",
                  "TURN_OFF_MODULE_CARD": "Close Module",
                  "TURN_OFF_ALL_MODULES": "Yes, my Queen, closing all modules.",
                  "TURN_OFF_ALL_MODULES_CARD": "Close All Modules",
                  "SHOW_VIDEO": "Yes, my Queen, showing a video of %s.",
                  "SHOW_VIDEO_ERR": "Sorry, my Queen, I didn't get that. You can give me commands like 'find a video of Snow White' or 'show me a video of Bill Gates'. What can I do for you, my Queen?",
                  "SHOW_VIDEO_CARD": "Play Video",
                  "ERROR_CARD": "Error"
              }
          }
      };
      
      var handlers = {
          'LaunchRequest': function() {
              this.emit('SayHello');
          },
          'MirrorMirrorHelloIntent': function() {
              this.emit('SayHello');
          },
          'SayHello': function() {
              this.emit(':askWithCard', this.t("WELCOME_MESSAGE"), this.t("WELCOME_REPROMPT"), this.t("WELCOME_CARD"), this.t("WELCOME_MESSAGE") + this.t("WELCOME_REPROMPT"));
          },
          'AMAZON.HelpIntent': function() {
              this.emit(':askWithCard', this.t("HELP_MESSAGE"), this.t("HELP_MESSAGE"), this.t("HELP_CARD"), this.t("HELP_MESSAGE"));
          },
          'AMAZON.StopIntent': function() {
              this.emit('StopCommand');
          },
          'AMAZON.CancelIntent': function() {
              this.emit('StopCommand');
          },
          'StopCommand': function() {
              this.emit(':tellWithCard', this.t("STOP_MESSAGE"), this.t("STOP_CARD"), this.t("STOP_MESSAGE"));
          },
          'ShowTextIntent': function() {
              let displayText = this.event.request.intent.slots.displayText.value;
              if (displayText) {
                  let alexa = this
      
                  // Alexa voice/card response to invoke after text is published to AWS IoT successfully
                  let alexaEmit = function() {
                      alexa.emit(':tellWithCard', alexa.t("SHOW_TEXT", displayText), alexa.t("SHOW_TEXT_CARD"), displayText)
                  }
      
                  // Send publish attempt to AWS IoT
                  MirrorMirror.displayText(displayText, alexaEmit);
              } else {
                  this.emit(':askWithCard', this.t("SHOW_TEXT_ERR"), this.t("SHOW_TEXT_ERR"), this.t("ERROR_CARD"), this.t("SHOW_TEXT_ERR"))
              }
          },
          'ShowImagesIntent': function() {
              let searchTerm = this.event.request.intent.slots.searchTerm.value;
              if (searchTerm) {
                  let alexa = this
      
                  // Search for images
                  googleImages.search(searchTerm).then(function(images) {
                      // Only https urls are allowed for the Alexa cards
                      let imageObj = {
                          smallImageUrl: images[0].thumbnail.url,
                          largeImageUrl: images[0].thumbnail.url
                      };
                      let alexaEmit = function() {
                          alexa.emit(':tellWithCard', alexa.t("SHOW_IMAGE", searchTerm), alexa.t("SHOW_IMAGE_CARD"), searchTerm, imageObj)
                      }
      
                      // Send publish attempt to AWS IoT
                      MirrorMirror.showImages(images, searchTerm, alexaEmit);
                  })
              } else {
                  this.emit(':askWithCard', this.t("SHOW_IMAGE_ERR"), this.t("SHOW_IMAGE_ERR"), this.t("ERROR_CARD"), this.t("SHOW_IMAGE_ERR"))
              }
          },
          'TurnOnModuleIntent': function() {
              let moduleName = this.event.request.intent.slots.moduleName.value;
              if (moduleName) {
                  let alexa = this
                  let alexaEmit = function() {
                      alexa.emit(':tellWithCard', alexa.t("TURN_ON_MODULE", moduleName), alexa.t("TURN_ON_MODULE_CARD"), alexa.t("TURN_ON_MODULE", moduleName))
                  }
      
                  // Send publish attempt to AWS IoT
                  MirrorMirror.changeModule(moduleName, true, alexaEmit);
              } else {
                  this.emit(':askWithCard', this.t("TURN_ON_MODULE_ERR"), this.t("TURN_ON_MODULE_ERR"), this.t("ERROR_CARD"), this.t("TURN_ON_MODULE_ERR"))
              }
          },
          'TurnOnAllModuleIntent': function() {
              let alexa = this
              let alexaEmit = function() {
                  alexa.emit(':tellWithCard', alexa.t("TURN_ON_ALL_MODULES"), alexa.t("TURN_ON_ALL_MODULES_CARD"), alexa.t("TURN_ON_ALL_MODULES"))
              }
              MirrorMirror.changeModule('all_modules', true, alexaEmit);
      
          },
          'TurnOffModuleIntent': function() {
              let moduleName = this.event.request.intent.slots.moduleName.value;
              if (moduleName) {
                  let alexa = this
                  let alexaEmit = function() {
                      alexa.emit(':tellWithCard', alexa.t("TURN_OFF_MODULE", moduleName), alexa.t("TURN_OFF_MODULE_CARD"), alexa.t("TURN_OFF_MODULE", moduleName))
                  }
      
                  // Send publish attempt to AWS IoT
                  MirrorMirror.changeModule(moduleName, false, alexaEmit);
              } else {
                  this.emit(':askWithCard', this.t("TURN_OFF_MODULE_ERR"), this.t("TURN_OFF_MODULE_ERR"), this.t("ERROR_CARD"), this.t("TURN_OFF_MODULE_ERR"))
              }
          },
          'TurnOffAllModuleIntent': function() {
              let alexa = this
              let alexaEmit = function() {
                  alexa.emit(':tellWithCard', alexa.t("TURN_OFF_ALL_MODULES"), alexa.t("TURN_OFF_ALL_MODULES_CARD"), alexa.t("TURN_OFF_ALL_MODULES"))
              }
              MirrorMirror.changeModule('all_modules', false, alexaEmit);
      
          },
          'ShowVideoIntent': function() {
              let searchTerm = this.event.request.intent.slots.searchTermVideo.value;
              if (searchTerm) {
                  let alexa = this
      
                  // search for Youtube video
                  youTube.search(searchTerm, 1, function(error, result) {
                      if (error) {
                          console.log(error);
                      } else {
                          console.log(JSON.stringify(result, null, 2));
      
                          let imageObj = {
                              smallImageUrl: result.items[0].snippet.thumbnails.default.url,
                              largeImageUrl: result.items[0].snippet.thumbnails.high.url
                          };
                          let alexaEmit = function() {
                              alexa.emit(':tellWithCard', alexa.t("SHOW_VIDEO", searchTerm), alexa.t("SHOW_VIDEO_CARD"), searchTerm, imageObj)
                          }
      
                          // Send publish attempt to AWS IoT
                          MirrorMirror.showVideo(result.items[0].id.videoId, searchTerm, alexaEmit);
                      }
                  });
              } else {
                  this.emit(':askWithCard', this.t("SHOW_VIDEO_ERR"), this.t("SHOW_VIDEO_ERR"), this.t("ERROR_CARD"), this.t("SHOW_VIDEO_ERR"))
              }
          },
          'Unhandled': function () {
              this.emit(':ask', 'Sorry I didnt understand that. Say help for assistance.');
          }
      };
      

      Remember to change the appId

      1 Reply Last reply Reply Quote 0
      • richland007R Offline
        richland007
        last edited by

        As far as the “alexa-skills-kit-sdk-for-nodejs” goes… it wont hurt to try i guess… but i remember i have gone before and “npm install” individually all those 4 most important dependencies listed on section 2 of instructions (granted that we had many other errors before that would have ruined anything good) but that made no difference than.

        As far as hard coding the paths of certs in the mirrormirro.js file in the Skill before zipping it up…i have read it too that it should be done there also but it makes absolutely no sense to me. Because when the zip file gets unzipped in Lambda servers everything gets stored in “/var/task/…” (node_modules or etc etc directories) after /task/ so basically we are telling it to look at /pi/home/MirrorMirrorskill or whatever that does not exist. That does not exist in Lambda, unless it mirrors a mini Rpi server or whatever, but i doubt it because if you look at the other previous error logs the node_modules and its under diretories are now at /var/task/ not where we all have it locally respectively. However that syntax __dirname + “/certs/MagicMirror.private.key” in our case, means the directory stored plus the file name in nodejs as far as i can tell from a quick search since i do not know nodejs other than from here. So what i am trying to say it seems to me like its the right thing to have.
        D

        1 Reply Last reply Reply Quote 0
        • O Offline
          OceanK
          last edited by OceanK

          I tried your index file and replaced my key but I still get errors from the lamda test. So strange!

          I have to check more when I get home.
          .

          1 Reply Last reply Reply Quote 0
          • O Offline
            OceanK
            last edited by

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

              hey again!

              I googled for some info abt this part in the index.js

              let alexa = Alexa.handler(event, context);
              alexa.appId = appId;

              I found a site from 2018 7th march stating this:

              alexa.appId = APP_ID;

              so what do you think abt that?

              1 Reply Last reply Reply Quote 0
              • O Offline
                OceanK
                last edited by

                OK!

                so now I have exatly like you. My lamda functions are OK. I test my alexa skill. She answers “what can I do for you my queen”

                I then ask to turn off all modules. And then square on, there is a pronlem with the skill response!!! GAAAAH!

                when you ask for videon on how to make slime for example. can you check your cloudwatch?

                is yours looking on youtube for video but then error on throwing it back to the mirror?

                richland007R 1 Reply Last reply Reply Quote 0
                • richland007R Offline
                  richland007
                  last edited by

                  I have to check when i get home but i have been tired, long work hours and no patience left on me anymore lol but i feel optimistic like we are getting close like our keys are not matching now or the api
                  i will check and let you know

                  1 Reply Last reply Reply Quote 0
                  • richland007R Offline
                    richland007
                    last edited by

                    Without testing anything new today …still at work. just from the old ones i went on google developer console where we got our api and cse key and i find absolutely no logs whatsoever the api and keys have never been used so they are not being hit by Alexa or the mirror the data tables have no data at all all clean and clear
                    so that means that there is no communication between them i will verify again once i get home if i am not to tired

                    1 Reply Last reply Reply Quote 0
                    • O Offline
                      OceanK
                      last edited by

                      yes you are correct. I checked mine aswell, nothing.

                      interesting though, I cheked my IoT core and that has been hit 8 times sucessfully.

                      so that would mean that the connection kit we used to create the cert and root.ca woorks right?

                      1 Reply Last reply Reply Quote 0
                      • richland007R Offline
                        richland007 @OceanK
                        last edited by

                        @oceank Where on cloudWatch do you see the error or the log for youtube videos throwing an error??

                        O 1 Reply Last reply Reply Quote 0
                        • O Offline
                          OceanK @richland007
                          last edited by yawns

                          @richland007 OK! so first you need to sign into your skills site for alexa. you know where you test the skill, on the wall.

                          typ on the wall
                          and then she replys back …Hello etc…

                          then type Find video of how to make slime for example. Then head over to cloudwatch in the log section.

                          search for video content it should look like this:

                          09:12:37
                          2018-09-09T09:12:37.673Z	7e6f7486-b410-11e8-a41b-3fa2ca23765c	{ "kind": "youtube#searchListResponse", "etag": "\"XI7nbFXulYBIpL0ayR_gDh3eu1k/trfpcxzuGVnn32QncnihWoxjjgs\"", "nextPageToken": "CAEQAA", "regionCode": "US", "pageInfo": { "totalResults": 1000000, "resultsPerPage": 1 }, "items": [ { "kind": "youtube#searchResult", "etag": "\"XI7nbFXulYBIpL0ayR_gDh3e
                          2018-09-09T09:12:37.673Z	7e6f7486-b410-11e8-a41b-3fa2ca23765c
                          {
                              "kind": "youtube#searchListResponse",
                              "etag": "\"XI7nbFXulYBIpL0ayR_gDh3eu1k/trfpcxzuGVnn32QncnihWoxjjgs\"",
                              "nextPageToken": "CAEQAA",
                              "regionCode": "US",
                              "pageInfo": {
                                  "totalResults": 1000000,
                                  "resultsPerPage": 1
                              },
                              "items": [
                                  {
                                      "kind": "youtube#searchResult",
                                      "etag": "\"XI7nbFXulYBIpL0ayR_gDh3eu1k/BqgWo2mCqNCYN8WncT1NMhRM7VE\"",
                                      "id": {
                                          "kind": "youtube#video",
                                          "videoId": "eaALjlyKDZI"
                                      },
                                      "snippet": {
                                          "publishedAt": "2017-04-11T19:00:03.000Z",
                                          "channelId": "UCIze4Pldy_KjXhYHqBwMLDQ",
                                          "title": "How to Make SLIME for Beginners! Best EASY Way to Make Slime!",
                                          "description": "YOU CAN NOW BUY MY SLIME ON ETSY: https://goo.gl/9GMmWA Hey guys! Today I'll be showing you the best, easiest way to make slime. Check out my other ...",
                                          "thumbnails": {
                                              "default": {
                                                  "url": "https://i.ytimg.com/vi/eaALjlyKDZI/default.jpg",
                                                  "width": 120,
                                                  "height": 90
                                              },
                                              "medium": {
                                                  "url": "https://i.ytimg.com/vi/eaALjlyKDZI/mqdefault.jpg",
                                                  "width": 320,
                                                  "height": 180
                                              },
                                              "high": {
                                                  "url": "https://i.ytimg.com/vi/eaALjlyKDZI/hqdefault.jpg",
                                                  "width": 480,
                                                  "height": 360
                                              }
                                          },
                                          "channelTitle": "Courtney Lundquist",
                                          "liveBroadcastContent": "none"
                                      }
                                  }
                              ]
                          }
                          
                          1 Reply Last reply Reply Quote 0
                          • O Offline
                            OceanK
                            last edited by yawns

                            next part, in the alexa skills section where you test the skills you can see logs aswell:

                            I can see its triggering the :

                            "name": "ShowVideoIntent",
                                                        "confirmationStatus": "NONE",
                                                        "slots": {
                                                            "searchTermVideo": {
                                                                "name": "searchTermVideo",
                                                                "value": "how to make slime",
                                                                "confirmationStatus": "NONE"
                            

                            so its looking for the video and then…nothing. check the whole log section for the alexa skill…its ALLOT and maybe you can figure something out from it.

                            1 Reply Last reply Reply Quote 0
                            • richland007R Offline
                              richland007
                              last edited by

                              Yeap exactly like yours …so does that mean that Lambda is not communicating back with Alexa and why not is the million dollar question question??
                              Another thing i noticed when you ask for images or display text no errors get recorded on Lambda …does this mean that our Api are missing for searches we have something wrong
                              I really don’t know at this point

                              O 1 Reply Last reply Reply Quote 0
                              • O Offline
                                OceanK @richland007
                                last edited by

                                @richland007 Hey!

                                that is exactly what im trying to figure out. For some reason the lamda is not talking to the mirror.

                                As you say abt the picture search I have the sam “problem”

                                Can you check your iot core(the monitor), on my iot core I can see successful connections.

                                So I guess it means that the root.ca is working and talking to the iot core.

                                1 Reply Last reply Reply Quote 0
                                • richland007R Offline
                                  richland007
                                  last edited by

                                  Any progress on this at all i have not done anything i was out of town since last Wednesday.
                                  I don’t know which direction we should look towards … maybe the api keys and requests are the one messing up
                                  i went back on the google developer console and i see my YouTube api hit a few times and with zero errors i also see the CSE (custom search engine) api hit also but with 100% errors …why ??
                                  Since it is presenting the data by api numbers that means that the keys are working right but what is the error about??? where do you read more info about that???

                                  D

                                  1 Reply Last reply Reply Quote 0
                                  • richland007R Offline
                                    richland007
                                    last edited by

                                    Well here it is the 100% Error on CSE is this
                                    "400 badRequest

                                    Indicates that the query was invalid. E.g., parent ID was missing or the combination of dimensions or metrics requested was not valid.

                                    Do not retry without fixing the problem. You need to make changes to the API query in order for it to work."

                                    How do we fix this??

                                    1 Reply Last reply Reply Quote 0
                                    • O Offline
                                      OceanK
                                      last edited by

                                      Hey!

                                      well I havent tryed for a week or so with this project. Im out of ideas for now =(, I can see that the coder has done some minor changes at github but not likley to help us I guess.

                                      have you seen the new updates at github?

                                      1 Reply Last reply Reply Quote 0
                                      • O Offline
                                        OceanK
                                        last edited by

                                        I did check my CSE and I have actually 8 sucessful picture search…

                                        1 Reply Last reply Reply Quote 0
                                        • O Offline
                                          OceanK
                                          last edited by

                                          OK si I checked My CSE again after my test yesterday, I can see its hitting my gse everytime I ask for searching of pictures…but the mirror ansers there is a problem…but the statistics showing its working.

                                          so the bad link is between the mirror and the lamda funtions. Because the video and picture search are all fine. But all functions like ask to turn all modules off etc is not working at all.

                                          1 Reply Last reply Reply Quote 0
                                          • richland007R Offline
                                            richland007
                                            last edited by

                                            Ok so may be it is the Magic Mirrors configuration fault the keys copied to the magic mirror config etc?? maybe we need to redo that one more time
                                            have you tried reinstalling (delete completely, download again and reinstall) the MMM- MirrorMirrorOnTheWall part only?? than play around with the key paths and files again etc.
                                            Because there is zero communication back with the mirror… all we are doing so far is fine tuning a skill within Alexa…but what worries me the most is why isn’t Alexa showing any videos or images on my Echo Spot …although now that i think about it is that i have not tested it with the Echo Spot since I made the code changes.

                                            If you got the MMM module on github the readme file was updated 15 hours ago but i see no other changes since the 3 months ago for mirrormirror.js file
                                            anyhow all we got to do is keep trying

                                            O 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
                                            • 5 / 7
                                            • 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