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.

    Need Help Changing Background Image Based on Time

    Scheduled Pinned Locked Moved Solved Troubleshooting
    16 Posts 4 Posters 2.6k Views 4 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.
    • T Offline
      tonkxy @MMRIZE
      last edited by

      @mmrize Thank you so much for the guidance!
      I am still really new to messing around in this area so I may not fully grasp your solution. I have been using the EasyBack as a guide to adjusting to what I want. I am unable to now get any kind of a background to show up.

      defaults: {
          bgName: "",         // .jpg, .gif, .png, Full screen animated gifs too!
          videoName: " ",     // your local picture files go in "images" folder of MMM-EasyBack
          youTubeID: "",      // YouTube ID from the YouTube url
          height: "600px",   // your display's resolution in pixels. Enter in config.js
          width: "1024px",    // your display's resolution in pixels. Enter in config.js
          animationSpeed: "0",
          updateInterval: 60 * 60 * 1000,
      },
      
      start: function() {
      
          this.timer = null;
      },
      
      notificationReceived: function(notification, payload, sender){
      
          if (notification === 'DOM_OBJECTS_CREATED'){
              self = this;
              this.url ='';
              
              this.myJob();
          }
      },
          myJob: function(){
              clearTimeout(this.timer);
              let rand = Math.floor(Math.random()*2)+1;
              let hour = (new Date()).getHours();
      
              if(hour <= 16){
                  folder="Afternoon";
                  } else if(hour >= 16 ){ folder = "Late";
              }
              if (this.config.bgName != "") {
                  this.url = "modules/MMM-EasyBack/images/" + folder +"/" + rand +".gif";
              } else if (this.config.vidoeName != "") {
                  this.url = "modules/MMM-EasyBack/videos/" + this.config.video;
              }
              this.timer = setTimeout(myJob, 1000) {
                 
                  this.myJob();
      
              }, this.config.updateInterval);
          },
      
      
      
      
      getStyles: function() {
          return ["MMM-EasyBack.css"]
      },
      
      // Override dom generator.
      getDom: function() {
      
        if (this.config.youTubeID != '') {
      
          var iframe = document.createElement("IFRAME");
          iframe.classList.add("iframe");
          iframe.style = "border: 0 none transparent ";
          iframe.width = this.config.width;
          iframe.height = this.config.height;
          type="text/javascript";
          iframe.src="https://www.youtube.com/embed/" + this.config.youTubeID + "?autoplay=1&loop=1&playlist=" + this.config.youTubeID;
      
          return iframe;
      
        } else
      
          var wrapper = document.createElement("div");
      
          var image = document.createElement("img");
          if (this.config.bgName != '') {
              image.src = this.url;
              image.className = "photo";
              console.log("MMM-EasyBack: Now showing image background")
              wrapper.appendChild(image);
      
          }else {
              console.log("MMM-EasyBack error: Please enter either image OR video in config.js NOT BOTH");
          }
      
          return wrapper;
      },
      });
      
      M 1 Reply Last reply Reply Quote 0
      • M Offline
        MMRIZE @tonkxy
        last edited by MMRIZE

        @tonkxy
        You’ve missed this.updateDom(). It needs to be called when you want to redraw your module’s output.
        Whenever you call “updateDom()”, your “getDom()” will be executed.

        T 1 Reply Last reply Reply Quote 1
        • T Offline
          tonkxy @MMRIZE
          last edited by

          Good catch! I accidentally removed that. So, I have added it back in and tried a few spots before reaching out again. I am still not getting a background to populate… I am not sure if maybe a variable is missing or what else I could be lacking in this. Thank you for your help!

          defaults: {
              bgName: "",         // .jpg, .gif, .png, Full screen animated gifs too!
              videoName: " ",     // your local picture files go in "images" folder of MMM-EasyBack
              youTubeID: "",      // YouTube ID from the YouTube url
              height: "600px",   // your display's resolution in pixels. Enter in config.js
              width: "1024px",    // your display's resolution in pixels. Enter in config.js
              animationSpeed: "0",
              updateInterval: 60 * 60 ,
          },
          
          start: function() {
              self = this;
              this.timer = null;
             	
          },
          
          notificationReceived: function(notification, payload, sender){
          
              if (notification === 'DOM_OBJECTS_CREATED'){
          
                  this.myJob();
              }
          },self.updateDom();
              myJob: function(){
           	clearTimeout = (this.timer);
          	let rand = Math.floor(Math.random()*2)+1;
                  let hour = (new Date()).getHours();
          
          	if(hour <= 16){
                      folder="Afternoon";
                      } else if(hour >= 16 ){ folder = "Late";
                  }
          
          	this.timer = setTimeout(() => {	
          	this.updateDom();
          	if (this.config.bgName != "") {
                      this.url = "modules/MMM-MainScreen/images/" + folder +"/" + rand +".gif";
                  } else if (this.config.vidoeName != "") {
                      this.url = "modules/MMM-MainScreen/videos/" + this.config.video;
                  }
          	
          	this.myJob();
          	},this.config.updateInterval);
          },
          
          
          getStyles: function() {
              return ["MMM-EasyBack.css"]
          },
          
          // Override dom generator.
          getDom: function() {
          
            if (this.config.youTubeID != '') {
          
              var iframe = document.createElement("IFRAME");
              iframe.classList.add("iframe");
              iframe.style = "border: 0 none transparent ";
              iframe.width = this.config.width;
              iframe.height = this.config.height;
              type="text/javascript";
              iframe.src="https://www.youtube.com/embed/" + this.config.youTubeID + "?autoplay=1&loop=1&playlist=" + this.config.youTubeID;
          
              return iframe;
          
            } else
          
              var wrapper = document.createElement("div");
          
              var image = document.createElement("img");
              if (this.config.bgName != '') {
                  image.src = this.url;
                  image.className = "photo";
                  console.log("MMM-EasyBack: Now showing image background")
                  wrapper.appendChild(image);
          
              }else {
                  console.log("MMM-EasyBack error: Please enter either image OR video in config.js NOT BOTH");
              }
          
              return wrapper;
          },
          });
          
          
          S M 2 Replies Last reply Reply Quote 0
          • S Offline
            sdetweil @tonkxy
            last edited by

            @tonkxy u need to update the url before u call updatedDom()

            Sam

            How to add modules

            learning how to use browser developers window for css changes

            1 Reply Last reply Reply Quote 1
            • M Offline
              MMRIZE @tonkxy
              last edited by

              @tonkxy

              start: function () {
                this.timer = null
                this.targetURL = null
                this.setImageURL()
              },
              
              getDom: function () {
                console.log(">", this.targetURL)
                var dom = document.createElement('div')
                dom.style.backgroundImage = `url(${this.targetURL})`
                dom.style.height = '100vh' // I recommend to control this through CSS, but in this example, I just hardcode it.
                dom.style.width = '100vw'
                dom.style.backgroundSize = 'cover'
                return dom
              },
              
              notificationReceived: function (notification, payload, sender) {
                if (notification === 'DOM_OBJECTS_CREATED') {
                  this.job()
                }
              },
              
              
              job: function () {
                clearTimeout(this.timer)
                this.updateDom()
                this.setImageURL()
                this.timer = setTimeout(() => {
                  this.job()
                }, this.config.updateInterval)
              },
              
              setImageURL: function () {
                // do your logic for picking image. Here I pick the random unsplash image instead for example.
                let rand = Math.floor(Math.random() * 100000)
                this.targetURL = `https://source.unsplash.com/random?seed=${rand}`
              }
              
              S 1 Reply Last reply Reply Quote 1
              • S Offline
                sdetweil @MMRIZE
                last edited by

                @mmrize said in Need Help Changing Background Image Based on Time:

                job: function () {
                clearTimeout(this.timer)
                this.updateDom()
                this.setImageURL()

                still backwards.
                update url,
                then call updatedDom,
                which calls getDom
                which uses the url

                Sam

                How to add modules

                learning how to use browser developers window for css changes

                M 1 Reply Last reply Reply Quote 1
                • T Offline
                  tonkxy
                  last edited by tonkxy

                  @MMRIZE @sdetweil
                  Thank you both so much! That did work by the way! It worked once I moved the dom AND I was missing Module: (name), which is just dumb on my part. I appreciate the help and for solving my issue with this!!!

                  Question, do you guys have a favorite beginners place for Magic Mirror? I feel I am missing some fundamentals and would love to take a recommendation.

                  S E 2 Replies Last reply Reply Quote 0
                  • S Offline
                    sdetweil @tonkxy
                    last edited by sdetweil

                    @tonkxy really no design type stuff

                    you can look at my sample module which does all this…
                    https://github.com/sdetweil/SampleModule

                    Sam

                    How to add modules

                    learning how to use browser developers window for css changes

                    1 Reply Last reply Reply Quote 1
                    • M Offline
                      MMRIZE @sdetweil
                      last edited by

                      @sdetweil
                      First url was set in start(), so I put that next of update in recursive.

                      S 1 Reply Last reply Reply Quote 0
                      • E Offline
                        easty @tonkxy
                        last edited by

                        @tonkxy

                        Time based background is a great idea. Are you planning on releasing this as a module?

                        T 1 Reply Last reply Reply Quote 0
                        • 1
                        • 2
                        • 2 / 2
                        • 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