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

    Posts

    Recent Best Controversial
    • RE: Stocks

      Ok, so I think i figured it out. Still not sure why it worked, but for some reason, running a console.log("descriptive text " + this) seems to corrupt or change the type of “this”. If I put two consecutive console.log() calls–first with descriptive text, second with just “this”–then it works. Basically in the example above, if I just comment out the first two console.log() calls, then it no longer prints “undefined” and instead prints “MSFT”. Sorry for all the trouble!

      posted in Utilities
      Z
      ZTA0796
    • RE: Stocks

      @alexyak So that’s what I expected as well. Unfortunately, it is somehow getting messed up between the “socketNotificationReceived” function and the “getDom” function.

      socketNotificationReceived: function(notification, payload) {
          if (notification === "STOCKS_RESULT") {
              this.result = payload;
              console.log(this.result);  //prints my JSON correctly console
              this.updateDom(self.config.fadeSpeed);
          }       
      

      So the above works correctly. Below, however, it doesn’t seem to maintain and I can’t figure out why.

      getDom: function() {
      
          var wrapper = document.createElement("table");
          wrapper.className = 'normal regular small';
          
          var count = 0;
      
          var _this = this;
      
      	console.log("result is " + this.result); //prints "result is [object Object]"
      	console.log("result length is " + this.result.length); //prints "result length is 0"
      	console.log(this.symbol);  //prints "undefined"
          }
      

      I apologize if I’m being thick, but I can’t figure out why it’s not working…

      posted in Utilities
      Z
      ZTA0796
    • RE: Stocks

      Upon looking at it further-- in the “socketNotificationReceived: function(notification, payload)” function in the module.js file, it seems that when I run console.log(this.result), it outputs my JSON:

      Object { symbol: “MSFT”, price: “62.30”, date: “12/16/2016”, time: “4:00pm”, change: “-0.28”, col1: “62.95”, high: “62.95”, low: “62.12”, col2: “42453083” }

      When I go to the “getDom” function and run “console.log(this.result)”, I get:

      [object Object]

      I’m just not sure why that change occurs, but that seems to be my issue. Any help is massively appreciated!

      posted in Utilities
      Z
      ZTA0796
    • RE: Stocks

      @alexyak Sure…see below.

      In the node_helper.js:

      getStocks: function (url) {
      var self = this;

        request({ url: url, method: 'GET' }, function (error, response, body) {
            if (!error && response.statusCode == 200) {
              
                var result = JSON.parse(body);
                console.log(result.query.results.row);  //prints the JSON as expected to the terminal
                self.sendSocketNotification('STOCKS_RESULT', result);
            }
        });
      

      },

      //Subclass socketNotificationReceived received.
      socketNotificationReceived: function(notification, payload) {
      if (notification === ‘GET_STOCKS’) {
      this.getStocks(payload);
      }
      }

      });

      in stocks.js:

      getDom: function() {
      
          var wrapper = document.createElement("table");
          wrapper.className = 'normal regular small';
          
          var count = 0;
      
          var _this = this;
      
      	console.log("in the DOM function");
      	console.log("result is " + this);  //prints [object Object]
      	console.log("result is " + _this); //prints [object Object]
      	console.log("result length is " + this.result.length); //prints 0
      
          if (this.result.length > 0){
              this.result.forEach(function(stock) {
      			//since length=0, it never gets in this loop
                                 //
      			//
      },
      
      scheduleUpdate: function(delay) {
      	console.log("scheduled update check");
      	var nextLoad = this.config.updateInterval;
      	if (typeof delay !== "undefined" && delay >= 0) {
      		nextLoad = delay;
      	}
      
      	var self = this;
      	setInterval(function() {
      		self.getStocks();
      	}, nextLoad);
      },
      
      roundValue: function(value) {
         return Math.round(value*100)/100; 
      },
      
      getStocks: function () {
          var url = 'https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20csv%20where%20url%3D%27http%3A%2F%2Fdownload.finance.yahoo.com%2Fd%2Fquotes.csv%3Fs%3D' + this.config.stocks + '%26f%3Dsl1d1t1c1ohgv%26e%3D.csv%27%20and%20columns%3D%27symbol%2Cprice%2Cdate%2Ctime%2Cchange%2Ccol1%2Chigh%2Clow%2Ccol2%27&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys';
          this.sendSocketNotification('GET_STOCKS', url);
      },
      
      
      socketNotificationReceived: function(notification, payload) {
          if (notification === "STOCKS_RESULT") {
      		console.log("notification received");
      		console.log(payload);  //prints Object { query: Object }
              this.result = payload;
              this.updateDom(self.config.fadeSpeed);
          }    
      },
      
      posted in Utilities
      Z
      ZTA0796
    • RE: Stocks

      @alexyak Thanks! I have one more question about syntax that I’m having trouble with.

      I can pull the Yahoo JSON into the node_helper file and print it to the terminal without a problem. But when I try to reference it in the “getDom” function, I get nothing. I haven’t changed the code at the start of that function at all. But when it runs “this.result.length”, the length returned is 0.

      I’m not super-familiar with the “this” syntax, but was hoping you or someone else might have an idea of why the JSON you pass would work, but not the JSON that I pass?

      Thanks!

      posted in Utilities
      Z
      ZTA0796
    • RE: Printing to output Terminal

      @mochman Now I get it! Thanks so much for laying out the basics for me! First time dealing in server/client stuff and I’m starting to make sense of it in my head.

      posted in Troubleshooting
      Z
      ZTA0796
    • RE: Printing to output Terminal

      @LukeCodewalker Thanks for helping me understand that. After poking around a bit, I found this topic: https://forum.magicmirror.builders/topic/86/how-to-troubleshoot

      Am I correct in understanding that if I call a “console.log()” in a module.js, I should be able to see the output in the pm2 logs? Because right now I am having trouble with that.

      I have no problem running the mirror with pm2, and I can pull the logs no problem. But all the logs show are just the typical startup stuff. None of the random text outputs I have tried to put in with “console.log()” command. Please help!

      Thanks!

      posted in Troubleshooting
      Z
      ZTA0796
    • RE: How to Troubleshoot

      If I am debugging code I am writing, is the easiest way to:
      -save the module.js files
      -run “pm2 restart mm”
      -run “pm2 logs mm”

      Or is there a different command that will update the code and how the system in running on the fly without having to restart the mirror each time?

      Thanks!

      posted in Troubleshooting
      Z
      ZTA0796
    • Printing to output Terminal

      I’m currently trying to modify some modules and can’t figure out how to consistently output to the terminal for my own debugging process.

      I use console.log(“xxxxx”) in a “node_helper.js” file and it seems to print just fine. But when I go to the actual “module.js” file, nothing i put in the console.log(“xxxx”) goes to the terminal. Help please!

      posted in Troubleshooting
      Z
      ZTA0796
    • 1
    • 2
    • 1 / 2