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
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()};
}
});