• Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
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.

MagicMirror to msSQL

Scheduled Pinned Locked Moved Development
sqlconnectionproblemmagicmirrortodolist
8 Posts 6 Posters 3.4k Views 5 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.
  • E Offline
    E3V3A
    last edited by Mar 20, 2018, 2:00 PM

    My guess is that the remote query must be an asynchronous task and thus the values you get are just the object placeholders for the promise. Somehow, I suspect you need to wait to make sure there actually is any data in your results. (Unless this is already handles automagically in the mysql node package.)

    Alternatively, you could just put your sql query in a command line script (Bash or python) and execute that with your node_helper. In that way you could also “pre-format” your output data into CSV or JSON or what have you, and then present it using Tabulator (which doesn’t require any DOM coding, or at least extremely little, since it only need one HTML tag and some css.)

    "Everything I do (here) is for free – altruism is the way!"
    MMM-FlightsAbove, MMM-Tabulator, MMM-Assistant (co-maintainer)

    1 Reply Last reply Reply Quote 0
    • A Offline
      ales.krohne
      last edited by Mar 27, 2018, 5:48 AM

      Thank you for all the replies. I have now taken a look and changed my code into following, but still no success :(

      node_helper.js code:

      "use strict";
      
      const NodeHelper = require("node_helper");
      const sql = require('mssql');
      
      module.exports = NodeHelper.create({
          start: function() {
              console.log("Starting node helper for: " + this.name);
          },
      
          socketNotificationReceived: function(notification, payload) {
              if (notification === "CONFIG") {
      		this.sendSocketNotification("STARTED",true);
                  	this.config = payload;
                  	this.fetchTodos();
              }
          },
          
          fetchTodos : function() {
              var self = this;
      
              sql.connect('Server=10.1.150.17\SQLEXPRESS;Database=todo;User Id=rpi;Password=12345', function (err) {
      		if (err) {
      			return self.sendSocketNotification("TASKS", eval("Connection error"));;
      		}
      	
      		new sql.Request().query('SELECT task FROM todo', function (err, result) {
      			if (err) {
      				return self.sendSocketNotification("TASKS", eval("Query error"));;
      			}
      			
      			self.sendSocketNotification("TASKS", result);
      		});
      		
      	});
      
      
      	setTimeout(function() { self.fetchTodos(); }, 60*60*1000);
          }
      });
      

      And todolist.js code:

      Module.register("todolist", {
      
      	defaults: {
      	},
      
      	// Define required scripts.
      	getStyles: function() {
      		return ["MMM-Todoist.css"];
      	},
      
      
      	start: function() {
      		Log.info('Starting module: ' + this.name);
      
      		this.loaded = false;
      		this.sendSocketNotification('CONFIG', this.config);
      	},
      
      	
      	socketNotificationReceived: function(notification, payload) {
          		if (notification === "STARTED") {
      				this.updateDom();
      			}
      			else if (notification === "TASKS") {
      				this.data = JSON.parse(payload);
      				this.loaded = true;
      				this.updateDom();
          		}
      	},
      
      
      
      
      
      	getDom: function() {
      		var wrapper = document.createElement("div");
      		
      		if (!this.loaded) {
      			wrapper.innerHTML = 'LOADING';
      			return wrapper;
      		}
      
      		if (!this.data) {
      			wrapper.innerHTML = "No data";
      			return wrapper;
      		}
      
      		wrapper.innerHTML = JSON.stringify(this.data);
      		
      
      		return wrapper;
      	}
      });
      
      1 Reply Last reply Reply Quote 0
      • F Offline
        Fistandantilus
        last edited by Apr 23, 2018, 1:28 PM

        Hi, is it working now? I need to query a database as well to get some information from my home automation system. Currently I´m thinking about how to solve that best.

        F.

        1 Reply Last reply Reply Quote 0
        • A Offline
          ales.krohne
          last edited by May 1, 2018, 8:32 AM

          Fistandantilus hi!

          Yes I have managed to get the connection working. I have used Sequelize library and it works great now. If you want to know more, please write me to ales.krohne@hotmail.com. I can send you whole code there.

          Have a nice day.

          1 Reply Last reply Reply Quote 0
          • R Offline
            rsellmer
            last edited by Aug 6, 2018, 1:30 AM

            Hi, I’ve sent an e-mail to you because I am new in MM and I need to do something like yours.
            Please, help me.
            Tks,
            Renato

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