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.

    MMM-Stock Cannot read property 'toLowerCase'

    Scheduled Pinned Locked Moved Troubleshooting
    34 Posts 2 Posters 10.2k Views 2 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.
    • S Offline
      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

      How to add modules

      learning how to use browser developers window for css changes

      B 2 Replies Last reply Reply Quote 0
      • B Offline
        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 Offline
          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 Offline
            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

            How to add modules

            learning how to use browser developers window for css changes

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

              @sdetweil yes, and I remember there being a delay before when it worked (around 5 mins) , but never this long as I am yet to see it, but here is the config
              {
              module: “MMM-Stock”,
              position: “bottom_right”,
              config: {
              companies: [“SPY”, “GME”, “AMC”, “NOK”, “BB”]
              }
              },

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

                @sdetweil Could you try running it with both my config entry and MMM-stock.js entry I’ve posted and let me know if it works for you?

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

                  @brendan_c23 I have been doing that… it worked before, and doesn’t work now…

                  the node_helper request for the stock info says that the response isn’t right…

                  Sam

                  How to add modules

                  learning how to use browser developers window for css changes

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

                    @sdetweil What do you think it could be? I am going to try copying original .js from hakanmhmd and make sure I didnt make any small changes I wasnt aware of , or maybe just delete and try to re download it

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

                      @brendan_c23

                      [06.03.2021 12:14.17.736] [LOG]   stock processing request urls=["https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&outputsize=compact&symbol=MSFT&apikey=xxxxxxxxxxxxxxxxx","https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&outputsize=compact&symbol=GOOG&apikey=xxxxxxxxxxxxxxxxx","https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&outputsize=compact&symbol=ORCL&apikey=xxxxxxxxxxxxxxxxx","https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&outputsize=compact&symbol=FB&apikey=xxxxxxxxxxxxxxxxx","https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&outputsize=compact&symbol=AAPL&apikey=xxxxxxxxxxxxxxxxx"]
                      [06.03.2021 12:14.17.828] [LOG]   stock received request response
                      [06.03.2021 12:14.17.828] [LOG]   stock request response no meta info
                      

                      the api is not returning the data expected… it was working for before with that one little change…

                      I have tried all kinds of updates, but nothing resolves this issue…
                      the module sent the request to the node helper, the helper is working thru the list, but never gets a good response

                      Sam

                      How to add modules

                      learning how to use browser developers window for css changes

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

                        @brendan_c23 Not completely sure on how to delete a module though, my Pi4 doesnt give me the option when right-clicking on the folder

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