Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@ MagicMirror
===========

The super magic interface of my personal Magic Mirror. More information about this project can be found on my [blog](http://michaelteeuw.nl/tagged/magicmirror).

Modify js/config.js to change some general variables (language, wather location, compliments) and calendar.php to add your own ICS calendar
1 change: 1 addition & 0 deletions index.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
<script src="js/jquery.feedToJSON.js"></script>
<script src="js/ical_parser.js"></script>
<script src="js/moment-with-langs.min.js"></script>
<script src="js/config.js"></script>
<script src="js/main.js?nocache=<?php echo md5(microtime()) ?>"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js"></script>

Expand Down
23 changes: 23 additions & 0 deletions js/config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// for navigator language
var lang = window.navigator.language;
// you can change the language
//var lang = 'en';

//change weather params here:
var weatherParams = {
'q':'Baarn,Netherlands',
'units':'metric',
'lang':lang
};

// compliments:
var compliments = [
'Hey, handsome!',
'Hi, sexy!',
'Hello, beauty!',
'You look sexy!',
'Wow, you look hot!',
'Looking good today!',
'You look nice!',
'Enjoy your day!'
];
135 changes: 38 additions & 97 deletions js/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ jQuery.fn.updateWithText = function(text, speed)
$(this).html(text);
$(this).fadeIn(speed/2, function() {
//done
});
});
});
}
}
}

jQuery.fn.outerHTML = function(s) {
return s
Expand Down Expand Up @@ -46,49 +46,7 @@ jQuery(document).ready(function($) {
var lastCompliment;
var compliment;

// multi-langugage support according to browser-lang
var lang = window.navigator.language;
switch (lang)
{
case 'de':
var days = ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'];
var months = ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'];
var dayAbbr = ['So','Mo','Di','Mi','Do','Fr','Sa'];
var today = 'heute';
var tomorrow = 'morgen';
var in_days = 'Tage';
break;
case 'nl':
var days = ['zondag','maandag','dinsdag','woensdag','donderdag','vrijdag','zaterdag'];
var months = ['januari','februari','maart','april','mei','juni','juli','augustus','september','oktober','november','december'];
var dayAbbr = ['zo','ma','di','wo','do','vr','za'];
var today = 'vandaag';
var tomorrow = 'morgen';
var in_days = 'dagen';
break;
case 'fr':
var days = ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'];
var months = ['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre'];
var dayAbbr = ['dim','lun','mar','mer','jeu','ven','sam'];
var today = 'aujourd\'hui';
var tomorrow = 'demain';
var in_days = 'jour(s)';
break;
case 'no':
var days = ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'];
var months = ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'];
var dayAbbr = ['søn','man','tirs','ons','tors','fre','lør'];
var today = 'i dag';
var tomorrow = 'i morgen';
var in_days = 'dager';
default:
var days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
var dayAbbr = ['Sun','Mon','Tues','Wed','Thur','Fri','Sat'];
var today = 'Today';
var tomorrow = 'Tomorrow';
var in_days = 'days';
}
moment.lang(lang);

//connect do Xbee monitor
var socket = io.connect('http://rpi-development.local:8080');
Expand All @@ -98,17 +56,11 @@ jQuery(document).ready(function($) {
$('.lower-third').fadeOut(2000);
} else {
$('.dishwasher').fadeOut(2000);
$('.lower-third').fadeIn(2000);
$('.lower-third').fadeIn(2000);
}
});


var weatherParams = {
'q':'Baarn,Netherlands',
'units':'metric',
'lang':lang
};

(function checkVersion()
{
$.getJSON('githash.php', {}, function(json, textStatus) {
Expand All @@ -126,18 +78,12 @@ jQuery(document).ready(function($) {

(function updateTime()
{
var now = new Date();

var day = now.getDay();
var date = now.getDate();
var month = now.getMonth();
var year = now.getFullYear();

var date = days[day] + ', ' + date+' ' + months[month] + ' ' + year;

var now = moment();
var date = now.format('LLLL').split(' ',4);
date = date[0] + ' ' + date[1] + ' ' + date[2] + ' ' + date[3];

$('.date').html(date);
$('.time').html(now.toTimeString().substring(0,5) + '<span class="sec">'+now.toTimeString().substring(6,8)+'</span>');
$('.time').html(now.format('HH') + ':' + now.format('mm') + '<span class="sec">'+now.format('ss')+'</span>');

setTimeout(function() {
updateTime();
Expand Down Expand Up @@ -168,22 +114,34 @@ jQuery(document).ready(function($) {
dt = new Date(value.substring(0,4), value.substring(4,6) - 1, value.substring(6,8), value.substring(9,11), value.substring(11,13), value.substring(13,15));
}

if (mainKey == 'DTSTART') e.startDate = dt;
if (mainKey == 'DTEND') e.endDate = dt;
if (mainKey == 'DTSTART') e.startDate = dt;
if (mainKey == 'DTEND') e.endDate = dt;
}
}


var now = new Date();
var today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
var days = moment(e.startDate).diff(moment(today), 'days');

//only add fututre events
if (days >= 0) {
eventList.push({'description':e.SUMMARY,'days':days});
if (e.startDate == undefined){
//some old events in Gmail Calendar is "start_date"
//FIXME: problems with Gmail's TimeZone
var days = moment(e.DTSTART).diff(moment(), 'days');
var seconds = moment(e.DTSTART).diff(moment(), 'seconds');
var startDate = moment(e.DTSTART);
} else {
var days = moment(e.startDate).diff(moment(), 'days');
var seconds = moment(e.startDate).diff(moment(), 'seconds');
var startDate = moment(e.startDate);
}

//only add fututre events, days doesn't work, we need to check seconds
if (seconds >= 0) {
if (seconds <= 60*60*5 || seconds >= 60*60*24*2) {
var time_string = moment(startDate).fromNow();
}else {
var time_string = moment(startDate).calendar()
}
eventList.push({'description':e.SUMMARY,'seconds':seconds,'days':time_string});
}
};
eventList.sort(function(a,b){return a.days-b.days});
eventList.sort(function(a,b){return a.seconds-b.seconds});

setTimeout(function() {
updateCalendarData();
Expand All @@ -199,16 +157,10 @@ jQuery(document).ready(function($) {

for (var i in eventList) {
var e = eventList[i];
var days = e.days;

var daysString = (days == 1) ? tomorrow : days + ' ' + in_days;
if (days == 0) {
daysString = today;
}

var row = $('<tr/>').css('opacity',opacity);
row.append($('<td/>').html(e.description).addClass('description'));
row.append($('<td/>').html(daysString).addClass('days dimmed'));
row.append($('<td/>').html(e.days).addClass('days dimmed'));
table.append(row);

opacity -= 1 / eventList.length;
Expand All @@ -223,18 +175,7 @@ jQuery(document).ready(function($) {

(function updateCompliment()
{

var compliments = [
'Hey, handsome!',
'Hi, sexy!',
'Hello, beauty!',
'You look sexy!',
'Wow, you look hot!',
'Looking good today!',
'You look nice!',
'Enjoy your day!'
];

//see compliments.js
while (compliment == lastCompliment) {
compliment = Math.floor(Math.random()*compliments.length);
}
Expand Down Expand Up @@ -269,9 +210,9 @@ jQuery(document).ready(function($) {
'10n':'wi-night-rain',
'11n':'wi-night-thunderstorm',
'13n':'wi-night-snow',
'50n':'wi-night-alt-cloudy-windy'
'50n':'wi-night-alt-cloudy-windy'
}


$.getJSON('http://api.openweathermap.org/data/2.5/weather', weatherParams, function(json, textStatus) {

Expand Down Expand Up @@ -324,7 +265,7 @@ jQuery(document).ready(function($) {
};
} else {
forecastData[dateKey]['temp_min'] = (forecast.main.temp < forecastData[dateKey]['temp_min']) ? forecast.main.temp : forecastData[dateKey]['temp_min'];
forecastData[dateKey]['temp_max'] = (forecast.main.temp > forecastData[dateKey]['temp_max']) ? forecast.main.temp : forecastData[dateKey]['temp_max'];
forecastData[dateKey]['temp_max'] = (forecast.main.temp > forecastData[dateKey]['temp_max']) ? forecast.main.temp : forecastData[dateKey]['temp_max'];
}

}
Expand All @@ -337,7 +278,7 @@ jQuery(document).ready(function($) {
var dt = new Date(forecast.timestamp);
var row = $('<tr />').css('opacity', opacity);

row.append($('<td/>').addClass('day').html(dayAbbr[dt.getDay()]));
row.append($('<td/>').addClass('day').html(moment.weekdaysShort(dt.getDay())));
row.append($('<td/>').addClass('temp-max').html(roundVal(forecast.temp_max)));
row.append($('<td/>').addClass('temp-min').html(roundVal(forecast.temp_min)));

Expand Down Expand Up @@ -382,5 +323,5 @@ jQuery(document).ready(function($) {
showNews();
}, 5500);
})();

});