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.
    • 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
                      • S Offline
                        sdetweil @MMRIZE
                        last edited by

                        @mmrize ok. my experience and training on maintaining software teaches me never to do this. you have two places where state is set.

                        Sam

                        How to add modules

                        learning how to use browser developers window for css changes

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