Better Graphs #4
This commit is contained in:
parent
7e047ee0a3
commit
fdf94f8b8d
@ -1,4 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
|
class ChartScale{
|
||||||
|
const HOUR = 'info';
|
||||||
|
const DAY = 'warning';
|
||||||
|
const MONTH = 'warning';
|
||||||
|
const YEAR = 'error';
|
||||||
|
}
|
||||||
class ChartManager{
|
class ChartManager{
|
||||||
function generateChart($data, $min = 0, $max = 100)
|
function generateChart($data, $min = 0, $max = 100)
|
||||||
{
|
{
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||||
<link rel="stylesheet" href="./app/templates/css/main.css">
|
<link rel="stylesheet" href="./app/templates/css/main.css?v2">
|
||||||
<link rel="stylesheet" href="./app/templates/css/font-awesome.min.css">
|
<link rel="stylesheet" href="./app/templates/css/font-awesome.min.css">
|
||||||
<link rel="stylesheet" href="./app/templates/css/modal.css">
|
<link rel="stylesheet" href="./app/templates/css/modal.css">
|
||||||
<link rel="stylesheet" href="./app/templates/css/pre.css">
|
<link rel="stylesheet" href="./app/templates/css/pre.css">
|
||||||
|
@ -50,44 +50,132 @@ class Ajax extends Template
|
|||||||
} else if (isset($_POST['subDevice']) && isset($_POST['action']) && $_POST['action'] == "chart") {
|
} else if (isset($_POST['subDevice']) && isset($_POST['action']) && $_POST['action'] == "chart") {
|
||||||
//TODO lepe rozstrukturovat
|
//TODO lepe rozstrukturovat
|
||||||
$subDeviceId = $_POST['subDevice'];
|
$subDeviceId = $_POST['subDevice'];
|
||||||
|
$period = $_POST['period'];
|
||||||
|
$groupBy = $_POST['group'];
|
||||||
|
|
||||||
$subDevice = SubDeviceManager::getSubDevice($subDeviceId);
|
$subDevice = SubDeviceManager::getSubDevice($subDeviceId);
|
||||||
$records = RecordManager::getAllRecordForGraph($subDeviceId);
|
$records = RecordManager::getAllRecordForGraph($subDeviceId, $period, $groupBy);
|
||||||
|
|
||||||
|
|
||||||
$array = array_column($records, 'value');
|
$array = array_column($records, 'value');
|
||||||
$arrayTime = array_column($records, 'time');
|
$arrayTime = array_column($records, 'time');
|
||||||
$output = [];
|
$output = [];
|
||||||
|
|
||||||
|
|
||||||
foreach ($array as $key => $value) {
|
foreach ($array as $key => $value) {
|
||||||
/*if ($value == 1 || $value == 0)
|
|
||||||
{
|
|
||||||
$output[$key]['y'] = $value;
|
$output[$key]['y'] = $value;
|
||||||
|
if ($subDevice['type'] == 'light'){
|
||||||
|
if ($value > 810){
|
||||||
|
$output[$key]['y'] = 1;
|
||||||
|
} else {
|
||||||
|
$output[$key]['y'] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$timeStamp = new DateTime($arrayTime[$key]);
|
||||||
|
$output[$key]['t'] = $timeStamp->format("Y-m-d") . 'T' . $timeStamp->format("H:i:s") . 'Z';
|
||||||
}
|
}
|
||||||
if ($value > 810){
|
|
||||||
$output[$key]['y'] = 1;
|
$data = json_encode($output);
|
||||||
} else {
|
|
||||||
$output[$key]['y'] = 0;
|
$arrayTimeStamps = array_column($records, 'time');
|
||||||
}*/
|
foreach ($arrayTimeStamps as $key => $value) {
|
||||||
$output[$key]['y'] = $value;
|
$arrayTimeStamps[$key] = (new DateTime($value))->format(TIMEFORMAT);
|
||||||
$timeStamp = new DateTime($arrayTime[$key]);
|
}
|
||||||
$output[$key]['t'] = $timeStamp->format("Y-m-d") . 'T' . $timeStamp->format("H:i:s") . 'Z';
|
|
||||||
|
$labels = json_encode($arrayTimeStamps);
|
||||||
|
$range = RANGES[$subDevice['type']];
|
||||||
|
$graphType = $range['graph'];
|
||||||
|
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
|
||||||
|
$JSON = '
|
||||||
|
{
|
||||||
|
"type": "' . $graphType . '",
|
||||||
|
"data": {
|
||||||
|
"datasets": [{
|
||||||
|
"data": ' . $data . '
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"scales": {
|
||||||
|
"xAxes": [{
|
||||||
|
"type": "time",
|
||||||
|
"distribution": "linear"
|
||||||
|
}],
|
||||||
|
"yAxes": [{
|
||||||
|
"ticks": {
|
||||||
|
"min": ' . $range['min'] . ',
|
||||||
|
"max": ' . $range['max'] . ',
|
||||||
|
"steps": ' . $range['scale'] . '
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
"legend": {
|
||||||
|
"display": false
|
||||||
|
},
|
||||||
|
"tooltips": {
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
"hover": {
|
||||||
|
"mode": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}';
|
||||||
|
echo $JSON;
|
||||||
|
die();
|
||||||
|
} else if (isset($_POST['action']) && $_POST['action'] == "getState") {
|
||||||
|
//State Update
|
||||||
|
$roomsData = RoomManager::getAllRooms();
|
||||||
|
$subDevices = [];
|
||||||
|
foreach ($roomsData as $roomKey => $roomsData) {
|
||||||
|
$devicesData = DeviceManager::getAllDevicesInRoom($roomsData['room_id']);
|
||||||
|
foreach ($devicesData as $deviceKey => $deviceData) {
|
||||||
|
$subDevicesData = SubDeviceManager::getAllSubDevices($deviceData['device_id']);
|
||||||
|
foreach ($subDevicesData as $subDeviceKey => $subDeviceData) {
|
||||||
|
$lastRecord = RecordManager::getLastRecord($subDeviceData['subdevice_id']);
|
||||||
|
$parsedValue = round($lastRecord['value']);
|
||||||
|
//TODO: Předelat na switch snažší přidávání
|
||||||
|
/*Value Parsing*/
|
||||||
|
if ($subDeviceData['type'] == "on/off") {
|
||||||
|
$parsedValue = ($parsedValue == 1 ? 'ON' : 'OFF');
|
||||||
|
}
|
||||||
|
if ($subDeviceData['type'] == "light") {
|
||||||
|
$replacementTrue = 'Light';
|
||||||
|
$replacementFalse = 'Dark';
|
||||||
|
if ($parsedValue != 1){
|
||||||
|
//Analog Reading
|
||||||
|
$parsedValue = ($parsedValue <= 810 ? $replacementTrue : $replacementFalse);
|
||||||
|
} else {
|
||||||
|
//Digital Reading
|
||||||
|
$parsedValue = ($parsedValue == 0 ? $replacementTrue : $replacementFalse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($subDeviceData['type'] == "door") {
|
||||||
|
$replacementTrue = 'Closed';
|
||||||
|
$replacementFalse = 'Opened';
|
||||||
|
$parsedValue = ($parsedValue == 1 ? $replacementTrue : $replacementFalse);
|
||||||
|
}
|
||||||
|
$subDevices[$subDeviceData['subdevice_id']] = [
|
||||||
|
'value' => $parsedValue .$subDeviceData['unit'],
|
||||||
|
'time' => $lastRecord['time'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
echo json_encode($subDevices);
|
||||||
|
die();
|
||||||
|
} else if (isset($_POST['scene_id'])) {
|
||||||
|
$sceneId = $_POST['scene_id'];
|
||||||
|
if (isset($_POST['action']) && $_POST['action'] == 'delete') {
|
||||||
|
SceneManager::delete($sceneId);
|
||||||
|
}else {
|
||||||
|
echo SceneManager::execScene($sceneId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
die();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$data = json_encode($output);
|
|
||||||
|
|
||||||
$arrayTimeStamps = array_column($records, 'time');
|
|
||||||
foreach ($arrayTimeStamps as $key => $value) {
|
|
||||||
$arrayTimeStamps[$key] = (new DateTime($value))->format(TIMEFORMAT);
|
|
||||||
}
|
|
||||||
|
|
||||||
$labels = json_encode($arrayTimeStamps);
|
|
||||||
$range = RANGES[$subDevice['type']];
|
|
||||||
header('Content-Type: application/json');
|
|
||||||
/*$JSON = '{
|
/*$JSON = '{
|
||||||
"type": "line",
|
"type": "line",
|
||||||
"data": {
|
"data": {
|
||||||
@ -126,103 +214,3 @@ header('Content-Type: application/json');
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}';*/
|
}';*/
|
||||||
|
|
||||||
$JSON = '
|
|
||||||
{
|
|
||||||
"type": "bar",
|
|
||||||
"data": {
|
|
||||||
"datasets": [{
|
|
||||||
"data": ' . $data . '
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
"options": {
|
|
||||||
"scales": {
|
|
||||||
"xAxes": [{
|
|
||||||
"type": "time",
|
|
||||||
"distribution": "linear"
|
|
||||||
}],
|
|
||||||
"yAxes": [{
|
|
||||||
"ticks": {
|
|
||||||
"min": ' . $range['min'] . ',
|
|
||||||
"max": ' . $range['max'] . ',
|
|
||||||
"steps": ' . $range['scale'] . '
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
"legend": {
|
|
||||||
"display": false
|
|
||||||
},
|
|
||||||
"tooltips": {
|
|
||||||
"enabled": true
|
|
||||||
},
|
|
||||||
"hover": {
|
|
||||||
"mode": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
';
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
echo $JSON;
|
|
||||||
die();
|
|
||||||
} else if (isset($_POST['action']) && $_POST['action'] == "getState") {
|
|
||||||
//State Update
|
|
||||||
$roomsData = RoomManager::getAllRooms();
|
|
||||||
$subDevices = [];
|
|
||||||
foreach ($roomsData as $roomKey => $roomsData) {
|
|
||||||
$devicesData = DeviceManager::getAllDevicesInRoom($roomsData['room_id']);
|
|
||||||
foreach ($devicesData as $deviceKey => $deviceData) {
|
|
||||||
$subDevicesData = SubDeviceManager::getAllSubDevices($deviceData['device_id']);
|
|
||||||
foreach ($subDevicesData as $subDeviceKey => $subDeviceData) {
|
|
||||||
$lastRecord = RecordManager::getLastRecord($subDeviceData['subdevice_id']);
|
|
||||||
$parsedValue = round($lastRecord['value']);
|
|
||||||
//TODO: Předelat na switch snažší přidávání
|
|
||||||
/*Value Parsing*/
|
|
||||||
if ($subDeviceData['type'] == "on/off") {
|
|
||||||
$parsedValue = ($parsedValue == 1 ? 'ON' : 'OFF');
|
|
||||||
}
|
|
||||||
if ($subDeviceData['type'] == "light") {
|
|
||||||
$replacementTrue = 'Light';
|
|
||||||
$replacementFalse = 'Dark';
|
|
||||||
if ($parsedValue != 1){
|
|
||||||
//Analog Reading
|
|
||||||
$parsedValue = ($parsedValue <= 810 ? $replacementTrue : $replacementFalse);
|
|
||||||
} else {
|
|
||||||
//Digital Reading
|
|
||||||
$parsedValue = ($parsedValue == 0 ? $replacementTrue : $replacementFalse);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($subDeviceData['type'] == "door") {
|
|
||||||
$replacementTrue = 'Closed';
|
|
||||||
$replacementFalse = 'Opened';
|
|
||||||
$parsedValue = ($parsedValue == 1 ? $replacementTrue : $replacementFalse);
|
|
||||||
}
|
|
||||||
$subDevices[$subDeviceData['subdevice_id']] = [
|
|
||||||
'value' => $parsedValue .$subDeviceData['unit'],
|
|
||||||
'time' => $lastRecord['time'],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
echo json_encode($subDevices);
|
|
||||||
die();
|
|
||||||
} else if (isset($_POST['scene_id'])) {
|
|
||||||
$sceneId = $_POST['scene_id'];
|
|
||||||
if (isset($_POST['action']) && $_POST['action'] == 'delete') {
|
|
||||||
SceneManager::delete($sceneId);
|
|
||||||
}else {
|
|
||||||
echo SceneManager::execScene($sceneId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
die();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user