terrarium-web/src/Controller/MonitoringApiController.php

122 lines
3.6 KiB
PHP

<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use App\Repository\TemperatureRepository;
use App\Repository\HygrometryRepository;
class MonitoringApiController extends AbstractController
{
/**
* @Route("/api/monitoring/temperature", name="api_monitoring_temperature", methods={"GET"})
*/
public function temperature(Request $request, TemperatureRepository $repository): JsonResponse
{
$labels = [];
$datasets = [];
$entities = $repository->findByDateRange(new \DateTime('now - 1 day'), new \DateTime('now'));
$line = [
'label' => 'Relevés de la température',
'data' => [],
'borderColor' => 'rgb(255, 205, 86)',
'fill' => false,
];
$line2 = [
'label' => 'Idéal le jour',
'data' => [],
'borderColor' => 'rgb(255, 200, 200)',
'fill' => false,
];
$line3 = [
'label' => 'Minimum la nuit',
'data' => [],
'borderColor' => 'rgb(216, 234, 255)',
'fill' => false,
];
foreach ($entities as $entity) {
$hour = (int) $entity->getDate()->format('H');
$labels[] = $entity->getDate()->format('H:i');
$line['data'][] = $entity->getValue();
$line2['data'][] = 27;
$line3['data'][] = 23;
}
$datasets[] = $line;
$datasets[] = $line2;
$datasets[] = $line3;
return $this->createGraphResponse($labels, $datasets);
}
/**
* @Route("/api/monitoring/hygrometry", name="api_monitoring_hygrometry", methods={"GET"})
*/
public function hygrometry(Request $request, HygrometryRepository $repository): JsonResponse
{
$labels = [];
$datasets = [];
$entities = $repository->findByDateRange(new \DateTime('now - 1 day'), new \DateTime('now'));
$line = [
'label' => 'Niveau d\'humidité de l\'atmosphère en %',
'data' => [],
'borderColor' => 'rgb(54, 162, 235)',
'backgroundColor' => 'rgb(216, 234, 255)',
'fill' => true,
];
$line2 = [
'label' => 'Valeur maximale',
'data' => [],
'borderColor' => 'rgb(200, 200, 200)',
'fill' => false,
];
foreach ($entities as $entity) {
$labels[] = $entity->getDate()->format('H:i');
$line['data'][] = $entity->getValue();
$line2['data'][] = 50;
}
$datasets[] = $line;
$datasets[] = $line2;
return $this->createGraphResponse($labels, $datasets);
}
protected function createGraphResponse(array $labels, array $datasets): JsonResponse
{
$config = [
'data' => [
'labels' => $labels,
'datasets' => $datasets,
],
'options' => [
'responsive' => false,
'ratio' => 10,
'maintainAspectRatio' => false,
'legend' => [
'align' => 'end',
],
'scales' => [
'yAxes' => [[
'ticks' => [
'beginAtZero' => true,
],
]],
],
],
];
return $this->json($config);
}
}