MagicMirror Forum

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unsolved
    • Solved
    • MagicMirror² Repository
    • Documentation
    • Donate
    • Discord

    MMM-Stock Cannot read property 'toLowerCase'

    Troubleshooting
    2
    34
    336
    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.
    • B
      brendan_c23 @sdetweil last edited by

      @sdetweil //if another currency is required - usd is default
      var differentCurrency = false;
      if(that.config.currency.toLowerCase() != “usd”){
      differentCurrency = true;
      var requiredCurrency = this.config.currency.toUpperCase();
      }

      	for (var key in data) {
      		if (!data.hasOwnProperty(key)) {continue;}
      		var symbol = key;
      		var obj = data[key];
      		var current = obj[0];
      		var prev = obj[1];
      		var price = current["4. close"];
      		var change = prev["4. close"] - current["4. close"];
      
      		var html = "";
      		var priceClass = "greentext", priceIcon="up_green";
      		if(change < 0) {
      			priceClass = "redtext";
      			priceIcon="down_red";
      		}
      
      S 1 Reply Last reply Reply Quote 0
      • S
        sdetweil @brendan_c23 last edited by

        @brendan_c23 no, these, around line 90

        	scheduleUpdate: function(delay) {
        		var loadTime = this.config.updateInterval;
        		if (typeof delay !== "undefined" && delay >= 0) {
        			loadTime = delay;
        		}
        
        		var that = this;
        		setInterval(function() {
        			that.getStocks();
        			if(that.config.currency.toLowerCase() != "usd"){ // line 90 changed
        				that.getExchangeRate();
        			}
        		}, loadTime);
        	},
        

        Sam

        Create a working config
        How to add modules

        B 1 Reply Last reply Reply Quote 0
        • B
          brendan_c23 @sdetweil last edited by

          @sdetweil Ok, I changed the ‘this’ to ‘that’ some lines above! not on those lines, going to try running it after changing the line you just sent

          S 1 Reply Last reply Reply Quote 0
          • S
            sdetweil @brendan_c23 last edited by

            @brendan_c23 just the ONE line, line 90…

            Sam

            Create a working config
            How to add modules

            B 1 Reply Last reply Reply Quote 1
            • B
              brendan_c23 last edited by

              @sdetweil still waiting to see if it will display, theres a big delay, but no errors have popped up yet

              scheduleUpdate: function(delay) {
              var loadTime = this.config.updateInterval;
              if (typeof delay !== “undefined” && delay >= 0) {
              loadTime = delay;
              }

              	var that = this;
              	setInterval(function() {
              		that.getStocks();
              		if(that.config.currency.toLowerCase() != "usd"){
              			that.getExchangeRate();
              		}
              	}, loadTime);
              },
              
              1 Reply Last reply Reply Quote 0
              • B
                brendan_c23 @sdetweil last edited by

                @sdetweil No errors have come up, but it also has not displayed, have been waiting for around 10 minutes

                S 1 Reply Last reply Reply Quote 0
                • S
                  sdetweil @brendan_c23 last edited by

                  @brendan_c23 did u change the other lines back?

                  open the developers window ctrl-shift-i, console tab, ‘stock’ in the filter field (no quotes)

                  Sam

                  Create a working config
                  How to add modules

                  B 2 Replies Last reply Reply Quote 0
                  • B
                    brendan_c23 @sdetweil last edited by

                    @sdetweil They should be, but just in case Im missing something…

                    Module.register(“MMM-Stock”, {
                    result: {},
                    defaults: {
                    updateInterval: 60000,
                    fadeSpeed: 1000,
                    companies: [“GOOGL”, “YHOO”],
                    currency: “usd”,
                    baseURL: “https://www.alphavantage.co/”,
                    apikey: “IPWULBT54Y3LHJME”
                    },

                    getStyles: function() {
                    	return ["MMM-Stock.css"];
                    },
                    
                    getTranslations: function() {
                    	return false;
                    },
                    
                    start: function() {
                    	this.getStocks();
                    	if(this.config.currency.toLowerCase() != "usd"){
                    		this.getExchangeRate();
                    	}
                    	this.scheduleUpdate();
                    },
                    
                    getDom: function() {
                    	var wrapper = document.createElement("div");
                    	wrapper.className = "quotes";
                    	var list = document.createElement("ul");
                    
                    	var data = this.result;
                    	// the data is not ready
                    	if(Object.keys(data).length === 0 && data.constructor === Object){
                    		return wrapper;
                    	}
                    
                    	//if another currency is required - usd is default
                    	var differentCurrency = false;
                    	if(this.config.currency.toLowerCase() != "usd"){
                    		differentCurrency = true;
                    		var requiredCurrency = this.config.currency.toUpperCase();
                    	}
                    
                    	for (var key in data) {
                    		if (!data.hasOwnProperty(key)) {continue;}
                    		var symbol = key;
                    		var obj = data[key];
                    		var current = obj[0];
                    		var prev = obj[1];
                    		var price = current["4. close"];
                    		var change = prev["4. close"] - current["4. close"];
                    
                    		var html = "";
                    		var priceClass = "greentext", priceIcon="up_green";
                    		if(change < 0) {
                    			priceClass = "redtext";
                    			priceIcon="down_red";
                    		}
                    		html = html + "<span class='" + priceClass + "'>";
                    		html = html + "<span class='quote'> (" + symbol + ")</span> ";
                    		html = html + parseFloat(price).toFixed(2) + " USD";
                    		html = html + "<span class='" + priceIcon + "'></span>" + parseFloat(Math.abs(change)).toFixed(2);
                    
                    		var stock = document.createElement("span");
                    		stock.className = "stockTicker";
                    		stock.innerHTML = html;
                    
                    		var listItem = document.createElement("li");
                    		listItem.innerHTML = html;
                    		list.appendChild(listItem);
                    	}
                    
                    	wrapper.appendChild(list);
                    	return wrapper;
                    },
                    
                    scheduleUpdate: function(delay) {
                    	var loadTime = this.config.updateInterval;
                    	if (typeof delay !== "undefined" && delay >= 0) {
                    		loadTime = delay;
                    	}
                    
                    	var that = this;
                    	setInterval(function() {
                    		that.getStocks();
                    		if(that.config.currency.toLowerCase() != "usd"){
                    			that.getExchangeRate();
                    		}
                    	}, loadTime);
                    },
                    
                    getStocks: function () {
                    	var allCompanies = this.config.companies;
                    	var urls = [];
                    	for(var company in allCompanies){
                    		var url = this.config.baseURL + "query?function=TIME_SERIES_DAILY&outputsize=compact&symbol=" + allCompanies[company] + "&apikey=" + this.config.apikey;
                    		urls.push(url);
                    	}
                    	this.sendSocketNotification("GET_STOCKS", urls);
                    },
                    
                    getExchangeRate: function () {
                    	var url = this.config.baseURL + "?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20('USD" + this.config.currency + "')&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback="
                    	this.sendSocketNotification("GET_EXCHANGE_RATE", url);
                    },
                    socketNotificationReceived: function(notification, payload) {
                    	if (notification === "STOCK_RESULT") {
                    		this.result = payload;
                    		this.updateDom(self.config.fadeSpeed);
                    	} else if(notification === "EXCHANGE_RATE"){
                    		this.rate = payload;
                    	}
                    }
                    

                    });

                    1 Reply Last reply Reply Quote 0
                    • B
                      brendan_c23 @sdetweil last edited by

                      @sdetweil Load script: modules/MMM-Stock//MMM-Stock.js
                      module.js:517 Module registered: MMM-Stock
                      loader.js:148 Bootstrapping module: MMM-Stock
                      loader.js:153 Scripts loaded for: MMM-Stock
                      loader.js:195 Load stylesheet: modules/MMM-Stock/MMM-Stock.css
                      loader.js:155 Styles loaded for: MMM-Stock
                      loader.js:157 Translations loaded for: MMM-Stock

                      S 1 Reply Last reply Reply Quote 0
                      • S
                        sdetweil @brendan_c23 last edited by

                        @brendan_c23 so, no errors

                        does the config entry have a position:

                        if not the content is thrown away

                        Sam

                        Create a working config
                        How to add modules

                        B 1 Reply Last reply Reply Quote 0
                        • 1
                        • 2
                        • 3
                        • 4
                        • 2 / 4
                        • First post
                          Last post
                        Enjoying MagicMirror? Please consider a donation!
                        MagicMirror created by Michael Teeuw.
                        Forum managed by Paul-Vincent Roll and Rodrigo Ramírez Norambuena.
                        This forum is using NodeBB as its core | Contributors
                        Contact | Privacy Policy