mirror of
https://github.com/beestat/app.git
synced 2025-05-24 02:14:03 -04:00
248 lines
6.1 KiB
JavaScript
248 lines
6.1 KiB
JavaScript
/**
|
|
* Load layer.
|
|
*/
|
|
beestat.layer.load = function() {
|
|
beestat.layer.apply(this, arguments);
|
|
};
|
|
beestat.extend(beestat.layer.load, beestat.layer);
|
|
|
|
beestat.layer.load.prototype.decorate_ = function(parent) {
|
|
$('body').style({
|
|
'overflow-y': 'scroll',
|
|
'background': beestat.style.color.bluegray.light,
|
|
'padding': '0 ' + beestat.style.size.gutter + 'px'
|
|
});
|
|
|
|
var logo_container = $.createElement('div');
|
|
logo_container.style({
|
|
'margin': '100px auto 32px auto',
|
|
'text-align': 'center'
|
|
});
|
|
parent.appendChild(logo_container);
|
|
|
|
(new beestat.component.logo()).render(logo_container);
|
|
|
|
var loading_text = $.createElement('div');
|
|
loading_text.style({
|
|
'font-weight': '500',
|
|
'margin': '0 auto 16px auto',
|
|
'text-align': 'center'
|
|
});
|
|
parent.appendChild(loading_text);
|
|
|
|
(new beestat.component.loading()).render(loading_text);
|
|
|
|
var api = new beestat.api();
|
|
|
|
api.add_call(
|
|
'thermostat',
|
|
'sync',
|
|
{},
|
|
'thermostat_sync'
|
|
);
|
|
|
|
api.add_call(
|
|
'sensor',
|
|
'sync',
|
|
{},
|
|
'sensor_sync'
|
|
);
|
|
|
|
api.add_call(
|
|
'user',
|
|
'read_id',
|
|
{},
|
|
'user'
|
|
);
|
|
|
|
api.add_call(
|
|
'thermostat',
|
|
'read_id',
|
|
{
|
|
'attributes': {
|
|
'inactive': 0
|
|
}
|
|
},
|
|
'thermostat'
|
|
);
|
|
|
|
api.add_call(
|
|
'thermostat_group',
|
|
'read_id',
|
|
{},
|
|
'thermostat_group'
|
|
);
|
|
|
|
api.add_call(
|
|
'sensor',
|
|
'read_id',
|
|
{
|
|
'attributes': {
|
|
'inactive': 0
|
|
}
|
|
},
|
|
'sensor'
|
|
);
|
|
|
|
api.add_call(
|
|
'ecobee_thermostat',
|
|
'read_id',
|
|
{
|
|
'attributes': {
|
|
'inactive': 0
|
|
}
|
|
},
|
|
'ecobee_thermostat'
|
|
);
|
|
|
|
api.add_call(
|
|
'ecobee_sensor',
|
|
'read_id',
|
|
{
|
|
'attributes': {
|
|
'inactive': 0
|
|
}
|
|
},
|
|
'ecobee_sensor'
|
|
);
|
|
|
|
api.add_call(
|
|
'address',
|
|
'read_id',
|
|
{},
|
|
'address'
|
|
);
|
|
|
|
api.add_call(
|
|
'announcement',
|
|
'read_id',
|
|
{},
|
|
'announcement'
|
|
);
|
|
|
|
api.add_call(
|
|
'runtime_thermostat_summary',
|
|
'read_id',
|
|
{},
|
|
'runtime_thermostat_summary'
|
|
);
|
|
|
|
api.set_callback(function(response) {
|
|
beestat.cache.set('user', response.user);
|
|
|
|
Sentry.configureScope(function(scope) {
|
|
scope.setUser({
|
|
'id': beestat.user.get().user_id
|
|
});
|
|
});
|
|
|
|
beestat.cache.set('thermostat', response.thermostat);
|
|
beestat.cache.set('thermostat_group', response.thermostat_group);
|
|
beestat.cache.set('sensor', response.sensor);
|
|
|
|
beestat.cache.set('ecobee_thermostat', response.ecobee_thermostat);
|
|
beestat.cache.set('ecobee_sensor', response.ecobee_sensor);
|
|
beestat.cache.set('address', response.address);
|
|
beestat.cache.set('announcement', response.announcement);
|
|
beestat.cache.set('runtime_thermostat_summary', response.runtime_thermostat_summary);
|
|
|
|
// Set the active thermostat_id if this is your first time visiting.
|
|
if (beestat.setting('thermostat_id') === undefined) {
|
|
beestat.setting(
|
|
'thermostat_id',
|
|
$.values(beestat.cache.thermostat)[0].thermostat_id
|
|
);
|
|
}
|
|
|
|
// Change the active thermostat_id if the one you have is no longer valid.
|
|
if (response.thermostat[beestat.setting('thermostat_id')] === undefined) {
|
|
beestat.setting('thermostat_id', Object.keys(response.thermostat)[0]);
|
|
}
|
|
|
|
var thermostat = beestat.cache.thermostat[
|
|
beestat.setting('thermostat_id')
|
|
];
|
|
var ecobee_thermostat = beestat.cache.ecobee_thermostat[
|
|
thermostat.ecobee_thermostat_id
|
|
];
|
|
|
|
// Set the active temperature unit.
|
|
beestat.setting('temperature_unit', thermostat.temperature_unit);
|
|
|
|
// Rename series if only one stage is available.
|
|
if (ecobee_thermostat.settings.coolStages === 1) {
|
|
beestat.series.sum_compressor_cool_1.name = 'Cool';
|
|
}
|
|
if (ecobee_thermostat.settings.heatStages === 1) {
|
|
beestat.series.sum_compressor_heat_1.name = 'Heat';
|
|
}
|
|
|
|
// Fix some other stuff for non-heat-pump.
|
|
if (ecobee_thermostat.settings.hasHeatPump === false) {
|
|
beestat.series.auxiliary_heat_1.name =
|
|
beestat.series.sum_compressor_heat_1.name;
|
|
beestat.series.auxiliary_heat_1.color =
|
|
beestat.series.sum_compressor_heat_1.color;
|
|
beestat.series.sum_auxiliary_heat_2.name =
|
|
beestat.series.compressor_heat_2.name;
|
|
beestat.series.sum_auxiliary_heat_2.color =
|
|
beestat.series.compressor_heat_2.color;
|
|
}
|
|
|
|
/*
|
|
* Fire off an API call to sync. The cron job will eventually run but this
|
|
* ensures things get moving quicker.
|
|
*/
|
|
new beestat.api()
|
|
.add_call(
|
|
'runtime',
|
|
'sync',
|
|
{
|
|
'thermostat_id': thermostat.thermostat_id
|
|
}
|
|
)
|
|
.send();
|
|
|
|
// Enable polling for live updates
|
|
beestat.enable_poll();
|
|
|
|
(new beestat.layer.dashboard()).render();
|
|
|
|
beestat.ecobee.notify_if_down();
|
|
|
|
/*
|
|
* If never seen an announcement, or if there is an unread important
|
|
* announcement, show the modal.
|
|
*/
|
|
var last_read_announcement_id = beestat.setting('last_read_announcement_id');
|
|
|
|
var most_recent_important_announcement_id;
|
|
var announcements = $.values(beestat.cache.announcement).reverse();
|
|
for (var i = 0; i < announcements.length; i++) {
|
|
if (announcements[i].important === true) {
|
|
most_recent_important_announcement_id = announcements[i].announcement_id;
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Show the first run modal or the announcements modal if there are unread
|
|
* important announcements.
|
|
*/
|
|
if (beestat.setting('first_run') === true) {
|
|
beestat.setting('first_run', false);
|
|
(new beestat.component.modal.newsletter()).render();
|
|
} else if (
|
|
last_read_announcement_id === undefined ||
|
|
(
|
|
most_recent_important_announcement_id !== undefined &&
|
|
last_read_announcement_id < most_recent_important_announcement_id
|
|
)
|
|
) {
|
|
(new beestat.component.modal.announcements()).render();
|
|
}
|
|
});
|
|
|
|
api.send();
|
|
};
|