MagicMirror Forum
    • Recent
    • Tags
    • Unsolved
    • Solved
    • MagicMirror² Repository
    • Documentation
    • 3rd-Party-Modules
    • Donate
    • Discord
    • Register
    • Login
    1. Home
    2. tonkxy
    A New Chapter for MagicMirror: The Community Takes the Lead
    Read the statement by Michael Teeuw here.
    T
    Offline
    • Profile
    • Following 0
    • Followers 0
    • Topics 3
    • Posts 15
    • Groups 0

    tonkxy

    @tonkxy

    0
    Reputation
    1
    Profile views
    15
    Posts
    0
    Followers
    0
    Following
    Joined
    Last Online

    tonkxy Unfollow Follow

    Latest posts made by tonkxy

    • RE: How to Hide Modules After Start (using setTimeout)

      @sdetweil I’ve tried a few things and just am struggling with this notification received. Any advice with what I have so far?

      /grabs information needed for refresh
      notificationReceived: function (notification, payload, sender) {
      	  if (notification === 'MODULE_DOM_CREATED') {
      		var modules = MM.getModules();
      // Lists through all modules for testing.
      				for (var i = 0; i < modules.length; i++) {
      				// Check if the current module is the one.
      				if (modules[i].name === data.module) {
      					// Splits out the module number of the module with the same name.
      					var idnr = modules[i].data.identifier.split("_");
      					// Check if the idnum is an array or not
      					if (Array.isArray(data.idnum)) {
      						// If it's an array, check what numbers are in it.
      						var idnumber = data.idnum.find(function(element) {
      							// Number of the module is found in the array.
      							return element == idnr[1]; 
      						});
      					// If idnum is not an array.
      					} else {
      						// Set the module id to hide.
      						var idnumber = data.idnum;
      					}
      		// Hides the module.
      							modules[i].hide(self.config.animationSpeed, {force: self.config.allowForce});
      							// Sets the defined symbol for hidden module.
      							if (typeof data.symbol2 !== 'undefined') {
      								symbol.className = faclassName + data.symbol2;
      								// Set the size if it's set.
      								if (data.size) {
      									symbol.className += " fa-" + data.size;
      									symbol.className += data.size == 1 ? "g" : "x";
      								}
      							// Sets the defined image for hidden module.
      							} else if (typeof data.img2 !== 'undefined') {
      								image.className = "menubar-picture";
      								image.src = data.img2;
      							}
      							
      							// Prints in the console what just happened (adding the ID). 
      							console.log("Hiding "+modules[i].name+" ID: "+idnr[1]);
      		}}}
      },
      
      posted in Troubleshooting
      T
      tonkxy
    • RE: How to Hide Modules After Start (using setTimeout)

      @sdetweil I am wanting the mirror to start, and once it starts and after it builds the menu it will auto hide the modules instead of me having to click through the buttons. I am just trying to autohide them once without clicking the button. Then have the option to toggle on and off. I hope that makes more sense

      posted in Troubleshooting
      T
      tonkxy
    • How to Hide Modules After Start (using setTimeout)

      Hello!
      I am using the MMM-ModuleBar. It creates a menu of my modules and makes buttons I was trying to set up after the menu is built, it will hide the modules automatically instead of wating for an onclick scenario. I am unsure where to put the function… Here is what I am looking at so far, I have it trying to hide modules after the menu is built. Should I build a for loop like in the getDom? Thank you for your help!

      // Override dom generator.
      	getDom: function() {
      		var overlay = document.createElement("div");
      
      		var menu = document.createElement("span");
      		menu.className = "menubar-menu";
      		menu.id = this.identifier + "_menu";
      		menu.style.flexDirection = this.config.direction;
      		// Sends each button to the "createButton" function be created.
      		for (var num in this.config.buttons) {
      			menu.appendChild(this.createButton(this, num, this.config.buttons[num], 
      			this.config.picturePlacement, overlay));
      
      		}
      		menu.appendChild(overlay);
      		return menu;
      	},
      setTimeout(function(){
      menu.hide({self.config.animationSpeed, {force: self.config.allowForce});
      //modules[i].hide(self.config.animationSpeed, {force: self.config.allowForce});
      // Sets the defined symbol for hidden module.
      //if (typeof data.symbol2 !== 'undefined') {
      //symbol.className = faclassName + data.symbol2;
      	// Set the size if it's set.
      //	if (data.size) {
      //	symbol.className += " fa-" + data.size;
      //	symbol.className += data.size == 1 ? "g" : "x";
      //	}
      // Sets the defined image for hidden module.
      //	} else if (typeof data.img2 !== 'undefined') {
      //	image.className = "menubar-picture";
      //	image.src = data.img2;
      //	}					
      	// Prints in the console what just happened (adding the ID). 
      //	console.log("Hiding "+modules[i].name+" ID: "+idnr[1]);
      }, 15000);
      
      	// Creates the buttons.
      	createButton: function (self, num, data, placement, overlay) {
      		var hidden = true;
      		// Creates the span element to contain all the buttons.
      		var item = document.createElement("span");
      		// Builds a unique identity / button.
      		item.id = self.identifier + "_button_" + num;
      		// Sets a class to all buttons.
      		item.className = "menubar-button";
      		//takes awesome font icon name
      		var faclassName = "menubar-picture ";
      		// Makes sure the width and height is at least the defined minimum.
      		item.style.minWidth = self.config.minWidth;
      		item.style.minHeight = self.config.minHeight;
      		// Collects all modules loaded in MagicMirror.
      		var modules = MM.getModules();
      		// When a button is clicked, the module either gets hidden or shown depending on current module status.
      		item.addEventListener("click", function () {
      		
      				// Lists through all modules for testing.
      				for (var i = 0; i < modules.length; i++) {
      				// Check if the current module is the one.
      				if (modules[i].name === data.module) {
      					// Splits out the module number of the module with the same name.
      					var idnr = modules[i].data.identifier.split("_");
      					// Check if the idnum is an array or not
      					if (Array.isArray(data.idnum)) {
      						// If it's an array, check what numbers are in it.
      						var idnumber = data.idnum.find(function(element) {
      							// Number of the module is found in the array.
      							return element == idnr[1]; 
      						});
      					// If idnum is not an array.
      					} else {
      						// Set the module id to hide.
      						var idnumber = data.idnum;
      					}
      					// Checks if idnum is set in config.js. If it is, it only hides that modules with those numbers and name, if not hides all modules with the same name.
      					if (idnr[1] == idnumber || data.idnum == null) {
      						// Check if the module is hidden.
      						if (modules[i].hidden) {
      							// Shows the module.
      							modules[i].show(self.config.animationSpeed, {force: self.config.allowForce});
      							// Sets the defined symbol for shown module.
      							if (typeof data.symbol !== 'undefined') {
      								symbol.className = faclassName + data.symbol;
      								// Set the size if it's set.
      								if (data.size) {
      									symbol.className += " fa-" + data.size;
      									symbol.className += data.size == 1 ? "g" : "x";
      								}
      							// Sets the defined image for shown module.
      							} else if (typeof data.img !== 'undefined') {
      								image.className = "menubar-picture";
      								image.src = data.img;
      							}
      							
      							// Prints in the console what just happened (adding the ID). 
      							console.log("Showing "+modules[i].name+" ID: "+idnr[1]);
      							
      
      						} else {
      							// Hides the module.
      							modules[i].hide(self.config.animationSpeed, {force: self.config.allowForce});
      							// Sets the defined symbol for hidden module.
      							if (typeof data.symbol2 !== 'undefined') {
      								symbol.className = faclassName + data.symbol2;
      								// Set the size if it's set.
      								if (data.size) {
      									symbol.className += " fa-" + data.size;
      									symbol.className += data.size == 1 ? "g" : "x";
      								}
      							// Sets the defined image for hidden module.
      							} else if (typeof data.img2 !== 'undefined') {
      								image.className = "menubar-picture";
      								image.src = data.img2;
      							}
      							
      							// Prints in the console what just happened (adding the ID). 
      							console.log("Hiding "+modules[i].name+" ID: "+idnr[1]);
      							}
      						}
      					}
      			
      			}
      
      		});
      
      posted in Troubleshooting
      T
      tonkxy
    • RE: Connecting Modules to Each Other

      @sdetweil Great advice.

      I stepped through and you were right on two things. When it starts, it defaults with the else case, because it hasn’t fetched the type yet. Once it does fetch the type I was resetting it in the myJob() function causing it to be undefined again.

      I appreciate the break down on this. JS is definitely giving me a run for my money on learning it.

      posted in Troubleshooting
      T
      tonkxy
    • RE: Connecting Modules to Each Other

      @sdetweil when you say stop you mean in my debug to see where im losing the value?

      posted in Troubleshooting
      T
      tonkxy
    • RE: Connecting Modules to Each Other

      @sdetweil funny you say that. Ive been reading and you offered the solution on someone using compliments + weather. My issue is when i step through to set image, the type is back to undefined and not carried from the notification. Im wondering if its in my order as to why its going back to undefined

      posted in Troubleshooting
      T
      tonkxy
    • RE: Connecting Modules to Each Other

      @sdetweil that definitely was part of it.

      I am able to successfully see the payload in notifications. Just working a way to retain it and be able to use in setImage. Thank you!

      posted in Troubleshooting
      T
      tonkxy
    • RE: Connecting Modules to Each Other

      @sdetweil great callout! I did not know I could debug. I do get a type back. I did the break trick on where its in an if statement and the type is still undefined in setImage

      posted in Troubleshooting
      T
      tonkxy
    • RE: Connecting Modules to Each Other

      @mmrize I took some time to try and figure this one out… sadly a lot of weather API’s are falling out, so some references use darkskies and that is out. I did write this up and so far the only issue I am having is at setImage the type variable is not being filled with a value.

      When i run npm start dev and I have the log return the value of type it does say info undefined… so it seems im not pulling off currentweather correctly with openweather as my api

      defaults: {
              height: "600px",   // your display's resolution in pixels. Enter in config.js
              width: "1024px",    // your display's resolution in pixels. Enter in config.js
              updateInterval: 60 * 60 * 100,
          },
      //set current weather from moduel
      currentWeatherType: "weather, currentweather",
      //scripts
      getScripts: function(){
      	return ["moment.js" , "moment-timezone.js"];
      },
         
      	
      start: function () {
      	  this.timer = null
      	  this.url = null
      	  this.setImage()
      },
      
      getDom: function () {
      	  console.log(">", this.url)
      	  var dom = document.createElement('div')
      	  dom.style.backgroundImage = `url(${this.url})`
      	  dom.style.height = '100vh' // do in css
      	  dom.style.width = '100vw'
      	  dom.style.backgroundSize = 'cover'
      	  return dom
      },
      //From data currentweather set weather type
      	setCurrentWeatherType: function(type){
      	this.currentWeatherType = type;
      },
      
      notificationReceived: function (notification, payload, sender) {
      	  if (notification === 'DOM_OBJECTS_CREATED') {
      	    this.job()
      	  }
      //weather dom
      	if(notification === "CURRENTWEATHER_TYPE"){
      		this.setCurrentWeatherType(payload.type);
      	}
      },
      
      
      job: function () {
      	  clearTimeout(this.timer)
            	  this.updateDom()
           	  this.setImage()
        	  this.timer = setTimeout(() => {
          	  this.job()
        	}, this.config.updateInterval)
      },
      
      
      setImage: function () {
        let rand = Math.floor(Math.random() * 4)+1; //randomn number to pick gif
      	var day = new Date();
      	var hour = day.getHours();
      	var type = this.currentWeatherTemperature;
      //if criteria for folders
      //	if(hour >= 22 || hour <= 4){
      //	folder = "Night";
      //	}else
      //	if(hour <= 10){
      //	folder = "Morning";
      //	}else
      //	if(hour <= 17){
      //	folder = "Afternoon";
      
      	if(type = "rain"){ //testing weather to see if it passes if condition
      		folder = "Afternoon";
      	}else folder = "Morning";
      
      	this.url = "modules/MMM-MainScreen/images/" + folder +"/" + rand +".gif";
      	}
      
      });
      
      posted in Troubleshooting
      T
      tonkxy
    • Connecting Modules to Each Other

      Hello!

      I am wanting to take the variables from a weather module and use that to decide a background. Do I need to rebuild current weather in my module, or can i import it essentially in order to use the variables / gather temps?

      Thank you for your time!

      posted in Troubleshooting
      T
      tonkxy