mirror of
https://github.com/beestat/app.git
synced 2025-07-09 03:04:07 -04:00
Added ability to customize profile start date
This commit is contained in:
parent
2da6822ce2
commit
7b4cbfee1d
@ -10,8 +10,8 @@
|
|||||||
class profile extends cora\api {
|
class profile extends cora\api {
|
||||||
|
|
||||||
public static $exposed = [
|
public static $exposed = [
|
||||||
'private' => [],
|
'private' => ['generate'],
|
||||||
'public' => ['generate']
|
'public' => []
|
||||||
];
|
];
|
||||||
|
|
||||||
public static $cache = [];
|
public static $cache = [];
|
||||||
@ -126,6 +126,14 @@ class profile extends cora\api {
|
|||||||
'get_setting',
|
'get_setting',
|
||||||
'thermostat.' . $thermostat_id . '.profile.ignore_solar_gain'
|
'thermostat.' . $thermostat_id . '.profile.ignore_solar_gain'
|
||||||
);
|
);
|
||||||
|
/**
|
||||||
|
* Allow a custom start date.
|
||||||
|
*/
|
||||||
|
$custom_range_begin = $this->api(
|
||||||
|
'user',
|
||||||
|
'get_setting',
|
||||||
|
'thermostat.' . $thermostat_id . '.profile.range_begin'
|
||||||
|
);
|
||||||
|
|
||||||
if($thermostat['system_type']['reported']['heat']['equipment'] !== null) {
|
if($thermostat['system_type']['reported']['heat']['equipment'] !== null) {
|
||||||
$system_type_heat = $thermostat['system_type']['reported']['heat']['equipment'];
|
$system_type_heat = $thermostat['system_type']['reported']['heat']['equipment'];
|
||||||
@ -152,7 +160,15 @@ class profile extends cora\api {
|
|||||||
// Figure out all the starting and ending times. Round begin/end to the
|
// Figure out all the starting and ending times. Round begin/end to the
|
||||||
// nearest 5 minutes to help with the looping later on.
|
// nearest 5 minutes to help with the looping later on.
|
||||||
$end_timestamp = time();
|
$end_timestamp = time();
|
||||||
$begin_timestamp = strtotime('-1 year', $end_timestamp);
|
|
||||||
|
if($custom_range_begin !== null) {
|
||||||
|
$begin_timestamp = max(
|
||||||
|
strtotime($custom_range_begin),
|
||||||
|
strtotime('-1 year', $end_timestamp)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$begin_timestamp = strtotime('-1 year', $end_timestamp);
|
||||||
|
}
|
||||||
|
|
||||||
// Round to 5 minute intervals.
|
// Round to 5 minute intervals.
|
||||||
$begin_timestamp = floor($begin_timestamp / 300) * 300;
|
$begin_timestamp = floor($begin_timestamp / 300) * 300;
|
||||||
|
@ -116,10 +116,20 @@ beestat.api.prototype.send = function(opt_api_call) {
|
|||||||
* @param {string=} opt_alias Optional alias (required for batch API calls).
|
* @param {string=} opt_alias Optional alias (required for batch API calls).
|
||||||
* @param {boolean=} opt_bypass_cache_read Optional bypass of cache read.
|
* @param {boolean=} opt_bypass_cache_read Optional bypass of cache read.
|
||||||
* @param {boolean=} opt_bypass_cache_write Optional bypass of cache write.
|
* @param {boolean=} opt_bypass_cache_write Optional bypass of cache write.
|
||||||
|
* @param {boolean=} opt_clear_cache Optional flag to just clear the cache for
|
||||||
|
* an API call.
|
||||||
*
|
*
|
||||||
* @return {beestat.api} This.
|
* @return {beestat.api} This.
|
||||||
*/
|
*/
|
||||||
beestat.api.prototype.add_call = function(resource, method, opt_args, opt_alias, opt_bypass_cache_read, opt_bypass_cache_write, opt_clear_cache) {
|
beestat.api.prototype.add_call = function(
|
||||||
|
resource,
|
||||||
|
method,
|
||||||
|
opt_args,
|
||||||
|
opt_alias,
|
||||||
|
opt_bypass_cache_read,
|
||||||
|
opt_bypass_cache_write,
|
||||||
|
opt_clear_cache
|
||||||
|
) {
|
||||||
var api_call = {
|
var api_call = {
|
||||||
'resource': resource,
|
'resource': resource,
|
||||||
'method': method,
|
'method': method,
|
||||||
|
@ -60,7 +60,10 @@ beestat.component.card.settings.prototype.decorate_contents_ = function(parent)
|
|||||||
|
|
||||||
parent.appendChild(
|
parent.appendChild(
|
||||||
$.createElement('p')
|
$.createElement('p')
|
||||||
.style('font-weight', '400')
|
.style({
|
||||||
|
'font-weight': '400',
|
||||||
|
'margin-top': (beestat.style.size.gutter * 2) + 'px'
|
||||||
|
})
|
||||||
.innerText('Temperature Profiles')
|
.innerText('Temperature Profiles')
|
||||||
);
|
);
|
||||||
const ignore_solar_gain = new beestat.component.input.checkbox();
|
const ignore_solar_gain = new beestat.component.input.checkbox();
|
||||||
@ -76,6 +79,10 @@ beestat.component.card.settings.prototype.decorate_contents_ = function(parent)
|
|||||||
ignore_solar_gain_key,
|
ignore_solar_gain_key,
|
||||||
ignore_solar_gain.get_value(),
|
ignore_solar_gain.get_value(),
|
||||||
function() {
|
function() {
|
||||||
|
/**
|
||||||
|
* Clear the API call cache and delete the profile so it regenerates
|
||||||
|
* next time you go to the page.
|
||||||
|
*/
|
||||||
new beestat.api()
|
new beestat.api()
|
||||||
.add_call(
|
.add_call(
|
||||||
'thermostat',
|
'thermostat',
|
||||||
@ -117,6 +124,96 @@ beestat.component.card.settings.prototype.decorate_contents_ = function(parent)
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Temperature profile begin/end
|
||||||
|
const temperature_profiles_range_begin_key = 'thermostat.' + thermostat.thermostat_id + '.profile.range_begin';
|
||||||
|
|
||||||
|
parent.appendChild(
|
||||||
|
$.createElement('p')
|
||||||
|
.innerText('Custom Start Date')
|
||||||
|
);
|
||||||
|
|
||||||
|
var temperature_profiles_range_begin = new beestat.component.input.text()
|
||||||
|
.set_style({
|
||||||
|
'width': 110,
|
||||||
|
'text-align': 'center',
|
||||||
|
'border-bottom': '2px solid ' + beestat.style.color.lightblue.base
|
||||||
|
})
|
||||||
|
.set_attribute({
|
||||||
|
'maxlength': 10
|
||||||
|
})
|
||||||
|
.set_icon('calendar');
|
||||||
|
|
||||||
|
var temperature_profiles_range_begin_m =
|
||||||
|
moment(beestat.setting(temperature_profiles_range_begin_key));
|
||||||
|
|
||||||
|
if (temperature_profiles_range_begin_m.isValid() === true) {
|
||||||
|
temperature_profiles_range_begin.set_value(
|
||||||
|
temperature_profiles_range_begin_m.format('M/D/YYYY')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
temperature_profiles_range_begin.addEventListener('change', function() {
|
||||||
|
var m = moment(this.get_value());
|
||||||
|
var temperature_profiles_range_begin_value;
|
||||||
|
if (m.isValid() === true) {
|
||||||
|
this.set_value(m.format('M/D/YYYY'));
|
||||||
|
temperature_profiles_range_begin_value = m.format('YYYY-MM-DD');
|
||||||
|
} else {
|
||||||
|
this.set_value('');
|
||||||
|
temperature_profiles_range_begin_value = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
beestat.setting(
|
||||||
|
temperature_profiles_range_begin_key,
|
||||||
|
temperature_profiles_range_begin_value,
|
||||||
|
function() {
|
||||||
|
/**
|
||||||
|
* Clear the API call cache and delete the profile so it regenerates
|
||||||
|
* next time you go to the page.
|
||||||
|
*/
|
||||||
|
new beestat.api()
|
||||||
|
.add_call(
|
||||||
|
'thermostat',
|
||||||
|
'generate_profile',
|
||||||
|
{
|
||||||
|
'thermostat_id': thermostat.thermostat_id
|
||||||
|
},
|
||||||
|
undefined,
|
||||||
|
undefined,
|
||||||
|
undefined,
|
||||||
|
// Clear cache
|
||||||
|
true
|
||||||
|
)
|
||||||
|
.add_call(
|
||||||
|
'thermostat',
|
||||||
|
'update',
|
||||||
|
{
|
||||||
|
'attributes': {
|
||||||
|
'thermostat_id': thermostat.thermostat_id,
|
||||||
|
'profile': null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.add_call(
|
||||||
|
'thermostat',
|
||||||
|
'read_id',
|
||||||
|
{
|
||||||
|
'attributes': {
|
||||||
|
'inactive': 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'thermostat'
|
||||||
|
)
|
||||||
|
.set_callback(function(response) {
|
||||||
|
beestat.cache.set('thermostat', response.thermostat);
|
||||||
|
})
|
||||||
|
.send();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
temperature_profiles_range_begin.render(parent);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -20,6 +20,10 @@ beestat.component.input.text = function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.input_.addEventListener('change', function() {
|
||||||
|
self.dispatchEvent('change');
|
||||||
|
});
|
||||||
|
|
||||||
beestat.component.input.apply(this, arguments);
|
beestat.component.input.apply(this, arguments);
|
||||||
};
|
};
|
||||||
beestat.extend(beestat.component.input.text, beestat.component.input);
|
beestat.extend(beestat.component.input.text, beestat.component.input);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user