Yop,
i did it :-)
@chrisyy i think you can list all the modules yes but how to attribut the good icon?
i will check for hide the module on startup tonight - i let you know if i find something
changed the CSS
for who want
.heating {
width: 130px;
height: 130px;
background: red;
background: radial-gradient(#571d1d, #b30000);
-moz-border-radius: 50px;
-webkit-border-radius: 50px;
border-radius: 70px;
line-height: 130px;
font-size: 50px;
text-align: center;
position: relative;
border: 4px solid #FFF;
}
.cooling {
width: 130px;
height: 130px;
background: blue;
background: radial-gradient(#0a237a, #436cc0);
-moz-border-radius: 50px;
-webkit-border-radius: 50px;
border-radius: 70px;
line-height: 130px;
font-size: 50px;
text-align: center;
position: relative;
border: 4px solid #FFF;
}
.heatingHC {
width: 130px;
height: 130px;
background: red;
background: radial-gradient(#571d1d, #b30000);
-moz-border-radius: 50px;
-webkit-border-radius: 50px;
border-radius: 70px;
line-height: 130px;
font-size: 40px;
text-align: center;
position: relative;
border: 4px solid #FFF;
}
.coolingHC {
width: 130px;
height: 130px;
background: blue;
background: radial-gradient(#0a237a, #436cc0);
-moz-border-radius: 50px;
-webkit-border-radius: 50px;
border-radius: 70px;
line-height: 130px;
font-size: 40px;
text-align: center;
position: relative;
border: 4px solid #FFF;
}
.off {
width: 130px;
height: 130px;
border: 4px solid white;
background: black;
-moz-border-radius: 50px;
-webkit-border-radius: 50px;
border-radius: 70px;
line-height: 130px;
font-size: 50px;
text-align: center;
position: relative;
}
.heatingText {
font-size:medium;
position: absolute;
top: -5px;
right: 40px;
width: 0;
}
.coolingText {
font-size:medium;
position: absolute;
top: -5px;
right: 40px;
width: 0;
}
.humidityText {
position:absolute;
font-size:large;
top: 35%;
width: 100%;
}
.nameText {
font-size:medium;
text-align:center;
width:33%;
}
.center {
text-align:center;
}
.heatingCell {
background:red;
background:linear-gradient(to right, #990000 , red, #990000);
}
.coolingCell {
background-color:blue;
background:linear-gradient(to right, #000099 , blue, #000099);
}
.fanIcon {
height:15px;
width:15px;
position:absolute;
top: 72%;
right: 42%;
}
Hey :D
little UP - im becoming crazy.
i read and read an read again - add… inside config.js (mirror module) or config.py (model tester)
so users : [‘kevin’]… and the config.py is needed if i want to test with the recognition-tools
right ?
i see if the MMM-Facial use “everyone” or “kevin” that doesnt work
Hello @Mitchfarino
Im trying to make your module “clickable” :-)
could you help me with that ?
Module.register(“MMM-Hue”, {
defaults: {
bridgeip: "",
userid: "",
colour: true
},
// Define required scripts.
getScripts: function () {
return [this.file("js/jquery.js")];
},
getStyles: function () {
return ["font-awesome.css", "MMM-Hue.css"];
},
// Define start sequence.
start: function () {
//These will be moved to config in a later release
this.lightsorgroups = "groups";
this.updateInterval = 60 * 100; // 10000 updates every 10 minutes
this.animationSpeed = 2 * 1000;
this.initialLoadDelay = 0;
//end
var result = false;
this.url = "http://" + this.config.bridgeip + "/api/" + this.config.userid + "/" + this.lightsorgroups;
this.getData();
setInterval(() => {
this.getData();
}, this.updateInterval);
},
// Override dom generator.
getDom: function () {
var wrapper = document.createElement("div");
//alert("http://" + this.config.bridgeip + "/api/" + this.config.userid + "/" + this.config.lightsorgroups);
if (this.result) {
var table = document.createElement("table");
table.classList.add("small", "table", "align-left");
table.appendChild(this.createLabelRow());
var lamps = Object.keys(this.result);
for (var i = 0; i < lamps.length; i++) {
var row = document.createElement("tr");
var room = document.createElement("td");
room.innerHTML = this.result[lamps[i]].name;;
row.appendChild(room);
var lightsallLabel = document.createElement("td");
lightsallLabel.classList.add("centered");
var lightstatus = document.createElement("i");
//lightstatus.classList.add(“fa”, this.result[lamps[i]].state.reachable ? (this.result[lamps[i]].state.on ? “fa-lightbulb-o” : “fa-adjust” ) : “fa-times”);
buttonlightstatus[i] = false; // CUSTOM
buttonlight[i] = document.createElement("span"); // CUSTOM
//var buttonlightstatus[i] = false; // CUSTOM
//var buttonlight[i] = document.createElement("span"); // CUSTOM
//weatherbutton.className = "wi wi-day-rain-mix navbar";
//var forecast = MM.getModules().withClass('weatherforecast');
if(this.result[lamps[i]].state.all_on)
{
lightstatus.classList.add("fa-lightbulb-o")
buttonlightstatus[i] = true;
}
else if (this.result[lamps[i]].state.any_on)
{
lightstatus.classList.add("fa-adjust")
buttonlightstatus[i] = true;
}
else {
lightstatus.classList.add("fa-times")
buttonlightstatus[i] = false;
};
// lightstatus.classList.add("fa", this.result[lamps[i]].state.all_on ? "fa-lightbulb-o" : (this.result[lamps[i]].state.any_on ? "fa-adjust" : "fa-times")); // CUSTOM
if (this.config.colour) {
if (this.result[lamps[i]].state.all_on) {
lightstatus.classList.add("lights-all-on")
}
else {
if (this.result[lamps[i]].state.any_on) {
lightstatus.classList.add("lights-partial-on")
}
}
}
;
lightsallLabel.appendChild(lightstatus);
wrapper.appendChild(buttonlight[i]); //CUSTOM
row.appendChild(lightsallLabel);
table.appendChild(row);
}
wrapper.appendChild(table);
//CUSTOM
$(buttonlight[i]).on("click", function(){
if(buttonlightstatus[i]){
alert('its work');
putJSON(t"http://" + this.config.bridgeip + "/api/" + this.config.userid + "/lights/" + buttonlightstatus[i] +"/state , ({'on':false});
buttonlightstatus[i] = false;
}else{
putJSON(t"http://" + this.config.bridgeip + "/api/" + this.config.userid + "/lights/" + buttonlightstatus[i] +"/state , ({'on':true});
buttonlightstatus[i] = true;
}
});
} else {
wrapper.innerHTML = "No Data returned";
}
return wrapper;
},
createLabelRow: function () {
var labelRow = document.createElement("tr");
var roomiconlabel = document.createElement("th");
var typeIcon = document.createElement("room");
typeIcon.classList.add("fa", "fa-home");
roomiconlabel.appendChild(typeIcon);
labelRow.appendChild(roomiconlabel);
var lightsonlabel = document.createElement("th");
lightsonlabel.classList.add("centered");
var typeIcon = document.createElement("lightson");
//typeIcon.classList.add("fa", "fa-lightbulb-o");
typeIcon.innerHTML = "Lights On";
lightsonlabel.appendChild(typeIcon);
labelRow.appendChild(lightsonlabel);
var lightsonlabel = document.createElement("th");
lightsonlabel.classList.add("centered");
return labelRow;
}
,
getData: function () {
$.getJSON(this.url, (data) => {
this.result = data;
this.updateDom();
});
},
});
my brigde is in Amsterdam and im in Belgium for Christmas :-)
Indeed - having the same issue.
i connected my spotify account to google home. And when you ask google home to play some music. it’s considered like an another account.
Hey everyone,
It’s solved \o/
somehow the @fortawesome wasnt created.
i downloaded font awesome and recreated the symbolic link
ln -s \home\pi\fontawesome @fortawesome fixed everything
@MichMich
i saw you had an open issue with the exact same error message
https://github.com/MichMich/MagicMirror/issues/1597
so i put that here :-)
fijne avond
Re: [MMM-ProfileSwitcher](A Profile/User/Layout Switching Module)
Hello everyone,
this module doesnt show the icon anymore. i followed all the post here about the font awesome issue. npm install etc etc but still ;-/ any idea ?
i checked and it seems that the code is correct.
getStyles: function() {
return [“font-awesome.css”, this.file(‘MMM-TouchNavigation.css’)];
},
Amazing job !!
did you plan to make your module tactile ready :-p
@raywo
control the volume, play pause next previous and maybe the playlist content ?
every morning I changing my playlist on my phone and this is my ultimate goal to have it in the screen :-)
Thanks!!! just amazing.
Any chance you work on an version for touch screen @Raywo?
This is my code
it’s based on 2 users (i badly commented the code)
/* Magic Mirror
* Fetcher
*
*
* By Michael Teeuw http://michaelteeuw.nl edited for Wunderlist by Paul-Vincent Roll
* Edited again for Todoist by Chris Brooker
*
* MIT Licensed.
*/
var request = require("request");
/* Fetcher
* Responsible for requesting an update on the set interval and broadcasting the data.
*
* attribute listID string - ID of the Wunderlist list.
* attribute reloadInterval number - Reload interval in milliseconds.
*/
function dateDiff(date1, date2){
var diff = {} // Initialisation du retour
var tmp = date2 - date1;
tmp = Math.floor(tmp/1000); // Nombre de secondes entre les 2 dates
diff.sec = tmp % 60; // Extraction du nombre de secondes
tmp = Math.floor((tmp-diff.sec)/60); // Nombre de minutes (partie entière)
diff.min = tmp % 60; // Extraction du nombre de minutes
tmp = Math.floor((tmp-diff.min)/60); // Nombre d'heures (entières)
diff.hour = tmp % 24; // Extraction du nombre d'heures
tmp = Math.floor((tmp-diff.hour)/24); // Nombre de jours restants
diff.day = tmp;
return diff;
}
var Fetcher = function(listID, reloadInterval, accessToken, clientID) {
var self = this;
if (reloadInterval < 1000) {
reloadInterval = 1000;
}
var reloadTimer = null;
var items = [];
var fetchFailedCallback = function() {};
var itemsReceivedCallback = function() {};
/* private methods */
/* fetchTodos()
* Request the new items.
*/
var fetchTodos = function() {
clearTimeout(reloadTimer);
reloadTimer = null;
request({
url: "https://todoist.com/API/v7/sync/",
method: "POST",
headers: {
'content-type': 'application/x-www-form-urlencoded',
'cache-control': 'no-cache'
},
form: {
token: accessToken,
sync_token: '*',
resource_types: '["items"]'
}
},
function(error, response, body) {
if (!error && response.statusCode == 200) {
items = [];
for (var i = 0; i < JSON.parse(body).items.length; i++) {
if (JSON.parse(body).items[i].project_id == listID) {
donneetableau = JSON.parse(body).items[i];
onbalance = [];
icontodo = [];
assignedname = [];
datedueretour = [];
contentretour = [];
assignedtodoname = [];
checkedretour = [];
if (donneetableau.priority == '1') {icontodo ='<i></i> '}
else if (donneetableau.priority == '2') {icontodo ='<i></i> '}
else if (donneetableau.priority == '3') {icontodo ='<i></i> '}
else {icontodo ='<i></i> '}
if (donneetableau.assigned_by_uid == 'XXXXXXXX') {assignedname ='(XXXXX)'}//TEST first XXX UID second XXXX yourname
else if (donneetableau.assigned_by_uid == 'XXXXXXX') {assignedname ='(XXXXXX)'}//TEST first XXX UID second XXXX yourname
else {assignedname ='Inconnu'};
if (donneetableau.due_date_utc)
{
date1 = new Date();
date2 = new Date(donneetableau.due_date_utc);
diff = dateDiff(date1, date2);
if (diff.day = '1') {datedueretour += diff.day + 'd <i></i> ';}
else if (diff.hour >= '1') {datedueretour += diff.hour + 'h <i></i> ';}
else {datedueretour += diff.min + 'min <i></i> ';};
}
else {datedueretour =''};
contentretour = donneetableau.content;
if (donneetableau.responsible_uid ) {
if (donneetableau.responsible_uid == 'XXXXXXX') {
assignedtodoname ='<i></i> '
} ////YOUR UID USER
else if (donneetableau.responsible_uid == 'XXXXXXX') {assignedtodoname ='<i></i> '}
else {assignedtodoname ='Inconnu'}; // YOUR UID USER
} else { assignedtodoname ='' };
checkedretour = donneetableau.checked;
onbalance +=assignedtodoname + icontodo + datedueretour + contentretour;
items.push(onbalance);
//items.split('\n');
//priority.push(JSON.parse(body).priority[i].priority);
//datedue.push(JSON.parse(body).datedue[i].due_date_utc);
}
}
self.broadcastItems();
scheduleTimer();
}
});
};
/* scheduleTimer()
* Schedule the timer for the next update.
*/
var scheduleTimer = function() {
//console.log('Schedule update timer.');
clearTimeout(reloadTimer);
reloadTimer = setTimeout(function() {
fetchTodos();
}, reloadInterval);
};
/* public methods */
/* setReloadInterval()
* Update the reload interval, but only if we need to increase the speed.
*
* attribute interval number - Interval for the update in milliseconds.
*/
this.setReloadInterval = function(interval) {
if (interval > 1000 && interval < reloadInterval) {
reloadInterval = interval;
}
};
/* startFetch()
* Initiate fetchTodos();
*/
this.startFetch = function() {
fetchTodos();
};
/* broadcastItems()
* Broadcast the exsisting items.
*/
this.broadcastItems = function() {
if (items.length
Hello
see here - i’m on holiday. Send that as soon as i’m back
https://forum.magicmirror.builders/topic/566/mmm-todoist-your-todoist-tasks-on-your-mirror/59?page=6
@djsunrise19 Hello
i’m on holiday. Can send you the files when i’m back. you need to change the fetcher indeed.
Have a nice day