mirror of
https://github.com/beestat/app.git
synced 2025-06-23 15:30:43 -04:00
Added storage for historical profiles
This commit is contained in:
parent
bded3a278b
commit
56995a04eb
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
* @author Jon Ziebell
|
* @author Jon Ziebell
|
||||||
*/
|
*/
|
||||||
class profile extends cora\api {
|
class profile extends cora\crud {
|
||||||
|
|
||||||
public static $exposed = [
|
public static $exposed = [
|
||||||
'private' => ['generate'],
|
'private' => ['generate'],
|
||||||
@ -884,6 +884,16 @@ class profile extends cora\api {
|
|||||||
$deltas_raw[$sample['type']][$sample['outdoor_temperature']]['deltas_per_hour'][] = $sample['delta_per_hour'];
|
$deltas_raw[$sample['type']][$sample['outdoor_temperature']]['deltas_per_hour'][] = $sample['delta_per_hour'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get the raw thermostat with the generated columns to store the data in
|
||||||
|
// the profile. The CRUD read doesn't return them.
|
||||||
|
$thermostat_database = $this->database->read(
|
||||||
|
'thermostat',
|
||||||
|
[
|
||||||
|
'thermostat_id' => $thermostat_id
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$thermostat_database = end($thermostat_database);
|
||||||
|
|
||||||
// Generate the final profile and save it.
|
// Generate the final profile and save it.
|
||||||
$profile = [
|
$profile = [
|
||||||
'temperature' => [
|
'temperature' => [
|
||||||
@ -931,8 +941,22 @@ class profile extends cora\api {
|
|||||||
'resist' => null
|
'resist' => null
|
||||||
],
|
],
|
||||||
'property' => [
|
'property' => [
|
||||||
'age' => null,
|
'age' => $thermostat_database['property_age'],
|
||||||
'square_feet' => null
|
'square_feet' => $thermostat_database['property_square_feet'],
|
||||||
|
'stories' => $thermostat_database['property_stories'],
|
||||||
|
'structure_type' => $thermostat_database['property_structure_type']
|
||||||
|
],
|
||||||
|
'system_type' => [
|
||||||
|
'heat' => $thermostat_database['system_type_heat'],
|
||||||
|
'heat_stages' => $thermostat_database['system_type_heat_stages'],
|
||||||
|
'auxiliary_heat' => $thermostat_database['system_type_auxiliary_heat'],
|
||||||
|
'auxiliary_heat_stages' => $thermostat_database['system_type_auxiliary_heat_stages'],
|
||||||
|
'cool' => $thermostat_database['system_type_cool'],
|
||||||
|
'cool_stages' => $thermostat_database['system_type_cool_stages']
|
||||||
|
],
|
||||||
|
'address' => [
|
||||||
|
'latitude' => $thermostat_database['address_latitude'],
|
||||||
|
'longitude' => $thermostat_database['address_longitude']
|
||||||
],
|
],
|
||||||
'metadata' => [
|
'metadata' => [
|
||||||
'generated_at' => date('c'),
|
'generated_at' => date('c'),
|
||||||
@ -1111,14 +1135,7 @@ class profile extends cora\api {
|
|||||||
$profile['setback']['heat'] = $temperature_home_heat - $temperature_away_heat;
|
$profile['setback']['heat'] = $temperature_home_heat - $temperature_away_heat;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Property
|
// Debug
|
||||||
if(isset($thermostat['property']['age']) === true) {
|
|
||||||
$profile['property']['age'] = $thermostat['property']['age'];
|
|
||||||
}
|
|
||||||
if(isset($thermostat['property']['square_feet']) === true) {
|
|
||||||
$profile['property']['square_feet'] = $thermostat['property']['square_feet'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if($debug === true) {
|
if($debug === true) {
|
||||||
fclose($output);
|
fclose($output);
|
||||||
|
|
||||||
@ -1131,6 +1148,61 @@ class profile extends cora\api {
|
|||||||
], true);
|
], true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store the profile. A single profile can be stored per day for
|
||||||
|
* flexibility purposes, but this code forces a single profile to be
|
||||||
|
* stored per week. This makes the GUI easy and intuitive.
|
||||||
|
*/
|
||||||
|
$day_of_week = date(
|
||||||
|
'w',
|
||||||
|
get_local_datetime(
|
||||||
|
$profile['metadata']['generated_at'],
|
||||||
|
$thermostat['time_zone'],
|
||||||
|
'U'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$start_of_week = date('Y-m-d', strtotime('-' . $day_of_week . ' days'));
|
||||||
|
|
||||||
|
$dates_this_week = [
|
||||||
|
$start_of_week,
|
||||||
|
date('Y-m-d', strtotime($start_of_week . ' +1 day')),
|
||||||
|
date('Y-m-d', strtotime($start_of_week . ' +2 day')),
|
||||||
|
date('Y-m-d', strtotime($start_of_week . ' +3 day')),
|
||||||
|
date('Y-m-d', strtotime($start_of_week . ' +4 day')),
|
||||||
|
date('Y-m-d', strtotime($start_of_week . ' +5 day')),
|
||||||
|
date('Y-m-d', strtotime($start_of_week . ' +6 day'))
|
||||||
|
];
|
||||||
|
|
||||||
|
$existing_profiles = $this->read([
|
||||||
|
'thermostat_id' => $thermostat['thermostat_id'],
|
||||||
|
'date' => $dates_this_week
|
||||||
|
]);
|
||||||
|
|
||||||
|
if(count($existing_profiles) === 0) {
|
||||||
|
$this->create([
|
||||||
|
'user_id' => $thermostat['user_id'],
|
||||||
|
'thermostat_id' => $thermostat['thermostat_id'],
|
||||||
|
'date' => get_local_datetime(
|
||||||
|
$profile['metadata']['generated_at'],
|
||||||
|
$thermostat['time_zone'],
|
||||||
|
'Y-m-d'
|
||||||
|
),
|
||||||
|
'profile' => $profile
|
||||||
|
]);
|
||||||
|
} else {
|
||||||
|
$most_recent_profile = end($existing_profiles);
|
||||||
|
$this->update([
|
||||||
|
'profile_id' => $most_recent_profile['profile_id'],
|
||||||
|
'date' => get_local_datetime(
|
||||||
|
$profile['metadata']['generated_at'],
|
||||||
|
$thermostat['time_zone'],
|
||||||
|
'Y-m-d'
|
||||||
|
),
|
||||||
|
'profile' => $profile
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
return $profile;
|
return $profile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -256,7 +256,7 @@ class thermostat extends cora\crud {
|
|||||||
/**
|
/**
|
||||||
* Compare this thermostat to all other matching ones.
|
* Compare this thermostat to all other matching ones.
|
||||||
*
|
*
|
||||||
* @param array $thermosat_id The base thermostat_id.
|
* @param array $thermostat_id The base thermostat_id.
|
||||||
* @param array $attributes Optional attributes:
|
* @param array $attributes Optional attributes:
|
||||||
* property_structure_type
|
* property_structure_type
|
||||||
* property_age
|
* property_age
|
||||||
|
Loading…
x
Reference in New Issue
Block a user