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
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