So im trying to build my own module without any real programming experence. With help from This post and MagicMirror-Module-Template i have gotten really really far but right now im stuck, im getting the results from the api in the console instead of it printing on the screen ![](https://i.imgur.com/pKaj3rR.png)
Any help would be greatly appreciated
SHL.js
Module.register("SHL", {
defaults: {
updateInterval: 60000,
retryDelay: 5000
},
requiresVersion: "2.1.0", // Required version of MagicMirror
start: function() {
var self = this;
var dataRequest = null;
var dataNotification = null;
//Flag for check if module is loaded
this.loaded = false;
// Schedule update timer.
this.getData();
setInterval(function() {
self.updateDom();
}, this.config.updateInterval);
},
/*
* getData
* function example return data and show it in the module wrapper
* get a URL request
*
*/
getData: function() {
var self = this;
var urlApi = "https://jsonplaceholder.typicode.com/posts/1";
var retry = true;
var dataRequest = new XMLHttpRequest();
dataRequest.open("GET", urlApi, true);
dataRequest.onreadystatechange = function() {
console.log(this.readyState);
if (this.readyState === 4) {
console.log(this.status);
if (this.status === 200) {
self.processData(JSON.parse(this.response));
} else if (this.status === 401) {
self.updateDom(self.config.animationSpeed);
Log.error(self.name, this.status);
retry = false;
} else {
Log.error(self.name, "Could not load data.");
}
if (retry) {
self.scheduleUpdate((self.loaded) ? -1 : self.config.retryDelay);
}
}
};
dataRequest.send();
},
/* scheduleUpdate()
* Schedule next update.
*
* argument delay number - Milliseconds before next update.
* If empty, this.config.updateInterval is used.
*/
scheduleUpdate: function(delay) {
var nextLoad = this.config.updateInterval;
if (typeof delay !== "undefined" && delay >= 0) {
nextLoad = delay;
}
nextLoad = nextLoad ;
var self = this;
setTimeout(function() {
self.getData();
}, nextLoad);
},
getDom: function() {
var self = this;
// create element wrapper for show into the module
var wrapper = document.createElement("div");
// If this.dataRequest is not empty
if (this.dataRequest) {
var wrapperDataRequest = document.createElement("div");
// check format https://jsonplaceholder.typicode.com/posts/1
wrapperDataRequest.innerHTML = this.dataRequest.title;
var labelDataRequest = document.createElement("label");
// Use translate function
// this id defined in translations files
labelDataRequest.innerHTML = this.translate("TITLE");
wrapper.appendChild(labelDataRequest);
wrapper.appendChild(wrapperDataRequest);
}
// Data from helper
if (this.dataNotification) {
var wrapperDataNotification = document.createElement("div");
// translations + datanotification
wrapperDataNotification.innerHTML = this.translate("UPDATE") + ": " + this.dataNotification.date;
wrapper.appendChild(wrapperDataNotification);
}
return wrapper;
},
getScripts: function() {
return [];
},
getStyles: function () {
return [
"SHL.css",
];
},
start: function () {
this.sendSocketNotification("GET_STANDINGS")
},
// Load translations files
getTranslations: function() {
//FIXME: This can be load a one file javascript definition
return {
en: "translations/en.json",
es: "translations/es.json"
};
},
processData: function(data) {
var self = this;
this.dataRequest = data;
if (this.loaded === false) { self.updateDom(self.config.animationSpeed) ; }
this.loaded = true;
// the data if load
// send notification to helper
this.sendSocketNotification("SHL-NOTIFICATION_TEST", data);
},
// socketNotificationReceived from helper
socketNotificationReceived: function (notification, payload) {
if(notification === "STANDINGS"){
// set dataNotification
this.dataNotification = payload;
this.updateDom();
}
},
});
node_helper.js
var NodeHelper = require("node_helper");
const shl = require("open-shl");
const client = shl.connect({
clientId:"XXXX",
clientSecret:"XXXX"
});
module.exports = NodeHelper.create({
teamStandings: function() {
client.season(2017).statistics.teams.standings({teamIds: []})
.then(teams => {
for (i = 0; i < 14; i++) {
a = i + 1;
console.log(a + ": " + teams[i].team_code);
};
var standings = {};
this.sendSocketNotification('STANDINGS', standings);
});
},
// Override socketNotificationReceived method.
/* socketNotificationReceived(notification, payload)
* This method is called when a socket notification arrives.
*
* argument notification string - The identifier of the noitication.
* argument payload mixed - The payload of the notification.
*/
socketNotificationReceived: function(notification, payload) {
if (notification === "SHL-NOTIFICATION_TEST") {
// console.log("Working notification system. Notification:", notification, "payload: ", payload);
console.log("Working notification system.", notification)
}
if (notification === "GET_STANDINGS"){
this.teamStandings();
}
},
// this you can create extra routes for your module
extraRoutes: function() {
var self = this;
this.expressApp.get("/SHL/extra_route", function(req, res) {
// call another function
values = self.anotherFunction();
res.send(values);
});
},
// Test another function
anotherFunction: function() {
return {date: new Date()};
}
});