add command line to print charts
This commit is contained in:
parent
7c1e4a0c7d
commit
8d8d2afe93
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[submodule "lib/eplot"]
|
||||||
|
path = lib/eplot
|
||||||
|
url = https://github.com/chriswolfvision/eplot
|
1
lib/eplot
Submodule
1
lib/eplot
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit aa4d607f050284c803583ba78852c845f749d67d
|
|
@ -1,6 +1,7 @@
|
||||||
{
|
{
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bootstrap": "^4.4.1",
|
"bootstrap": "^4.4.1",
|
||||||
"chart.js": "^2.9.3"
|
"chart.js": "^2.9.3",
|
||||||
|
"ervy": "^1.0.7"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
92
src/Command/ChartHygrometryCommand.php
Normal file
92
src/Command/ChartHygrometryCommand.php
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Command;
|
||||||
|
|
||||||
|
use App\Repository\HygrometryRepository;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
|
||||||
|
use Symfony\Component\Console\Helper\Table;
|
||||||
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
|
||||||
|
use Symfony\Component\HttpKernel\KernelInterface;
|
||||||
|
use Symfony\Component\Process\Process;
|
||||||
|
|
||||||
|
class ChartHygrometryCommand extends ContainerAwareCommand
|
||||||
|
{
|
||||||
|
protected static $defaultName = 'app:chart:hygrometry';
|
||||||
|
protected HygrometryRepository $repository;
|
||||||
|
protected KernelInterface $kernel;
|
||||||
|
protected ParameterBagInterface $params;
|
||||||
|
|
||||||
|
public function __construct(HygrometryRepository $repository, KernelInterface $kernel, ParameterBagInterface $params)
|
||||||
|
{
|
||||||
|
$this->repository = $repository;
|
||||||
|
$this->kernel = $kernel;
|
||||||
|
$this->params = $params;
|
||||||
|
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function configure()
|
||||||
|
{
|
||||||
|
$this
|
||||||
|
->setDescription('Show a chart of hygrometry')
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function execute(InputInterface $input, OutputInterface $output): int
|
||||||
|
{
|
||||||
|
chdir($this->getContainer()->get('kernel')->getProjectDir());
|
||||||
|
|
||||||
|
$entities = $this->repository->findByDateRange(
|
||||||
|
new \DateTime('now - 1 day'),
|
||||||
|
new \DateTime('now'),
|
||||||
|
42,
|
||||||
|
'DESC'
|
||||||
|
);
|
||||||
|
|
||||||
|
$entities = array_reverse($entities);
|
||||||
|
$table = new Table($output);
|
||||||
|
$table->setHeaders(['ID', 'Date', 'Value']);
|
||||||
|
|
||||||
|
$max = (int) $this->params->get('hygrometry_trigger_max');
|
||||||
|
|
||||||
|
$stats = ['Value,Max'];
|
||||||
|
|
||||||
|
foreach ($entities as $i => $entity) {
|
||||||
|
$stats1[] = $entity->getvalue();
|
||||||
|
$stats2[] = $max;
|
||||||
|
|
||||||
|
$table->addRow([
|
||||||
|
$i,
|
||||||
|
$entity->getDate()->format('d/m/Y H:i'),
|
||||||
|
$entity->getValue().'%',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$filename1 = tempnam('./', self::$defaultName);
|
||||||
|
$filename2 = tempnam('./', self::$defaultName);
|
||||||
|
|
||||||
|
file_put_contents($filename1, implode("\n", $stats1));
|
||||||
|
file_put_contents($filename2, implode("\n", $stats2));
|
||||||
|
|
||||||
|
$process = new Process([
|
||||||
|
'./lib/eplot/eplot',
|
||||||
|
'-d',
|
||||||
|
'-t',
|
||||||
|
'Max@Hygrometry',
|
||||||
|
'-m',
|
||||||
|
$filename2,
|
||||||
|
$filename1,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$process->run();
|
||||||
|
$output->writeln($process->getOutput());
|
||||||
|
$table->render();
|
||||||
|
|
||||||
|
unlink($filename1);
|
||||||
|
unlink($filename2);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
103
src/Command/ChartTemperatureCommand.php
Normal file
103
src/Command/ChartTemperatureCommand.php
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Command;
|
||||||
|
|
||||||
|
use App\Repository\TemperatureRepository;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
|
||||||
|
use Symfony\Component\Console\Helper\Table;
|
||||||
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
|
||||||
|
use Symfony\Component\HttpKernel\KernelInterface;
|
||||||
|
use Symfony\Component\Process\Process;
|
||||||
|
|
||||||
|
class ChartTemperatureCommand extends ContainerAwareCommand
|
||||||
|
{
|
||||||
|
protected static $defaultName = 'app:chart:temperature';
|
||||||
|
protected TemperatureRepository $repository;
|
||||||
|
protected KernelInterface $kernel;
|
||||||
|
protected ParameterBagInterface $params;
|
||||||
|
|
||||||
|
public function __construct(TemperatureRepository $repository, KernelInterface $kernel, ParameterBagInterface $params)
|
||||||
|
{
|
||||||
|
$this->repository = $repository;
|
||||||
|
$this->kernel = $kernel;
|
||||||
|
$this->params = $params;
|
||||||
|
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function configure()
|
||||||
|
{
|
||||||
|
$this
|
||||||
|
->setDescription('Show a chart of temperature')
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function execute(InputInterface $input, OutputInterface $output): int
|
||||||
|
{
|
||||||
|
chdir($this->getContainer()->get('kernel')->getProjectDir());
|
||||||
|
|
||||||
|
$entities = $this->repository->findByDateRange(
|
||||||
|
new \DateTime('now - 1 day'),
|
||||||
|
new \DateTime('now'),
|
||||||
|
42,
|
||||||
|
'DESC'
|
||||||
|
);
|
||||||
|
|
||||||
|
$entities = array_reverse($entities);
|
||||||
|
$table = new Table($output);
|
||||||
|
$table->setHeaders(['ID', 'Date', 'Value']);
|
||||||
|
|
||||||
|
$perfect = (int) $this->params->get('temperature_trigger_max');
|
||||||
|
$min = (int) $this->params->get('temperature_trigger_min');
|
||||||
|
|
||||||
|
$stats = ['Value,Perfect,Min'];
|
||||||
|
|
||||||
|
foreach ($entities as $i => $entity) {
|
||||||
|
$stats1[] = $entity->getvalue();
|
||||||
|
$stats2[] = (float) 27;
|
||||||
|
$stats3[] = (float) $min;
|
||||||
|
|
||||||
|
$table->addRow([
|
||||||
|
$i,
|
||||||
|
$entity->getDate()->format('d/m/Y H:i'),
|
||||||
|
$entity->getValue().'°',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$filename1 = tempnam('./', self::$defaultName);
|
||||||
|
$filename2 = tempnam('./', self::$defaultName);
|
||||||
|
$filename3 = tempnam('./', self::$defaultName);
|
||||||
|
|
||||||
|
file_put_contents($filename1, implode("\n", $stats1));
|
||||||
|
file_put_contents($filename2, implode("\n", $stats2));
|
||||||
|
file_put_contents($filename3, implode("\n", $stats3));
|
||||||
|
|
||||||
|
$process = new Process([
|
||||||
|
'./lib/eplot/eplot',
|
||||||
|
'-d',
|
||||||
|
'-r',
|
||||||
|
'[0:45][10:35]',
|
||||||
|
'-t',
|
||||||
|
'Perfect@Min@Temperature',
|
||||||
|
'-m',
|
||||||
|
basename($filename2),
|
||||||
|
basename($filename3),
|
||||||
|
basename($filename1),
|
||||||
|
]);
|
||||||
|
|
||||||
|
$process->run();
|
||||||
|
|
||||||
|
$graph = $process->getOutput();
|
||||||
|
$output->writeln($graph);
|
||||||
|
|
||||||
|
$table->render();
|
||||||
|
|
||||||
|
unlink($filename1);
|
||||||
|
unlink($filename2);
|
||||||
|
unlink($filename3);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
13
yarn.lock
13
yarn.lock
|
@ -2,10 +2,10 @@
|
||||||
# yarn lockfile v1
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
bulma@^0.8.0:
|
bootstrap@^4.4.1:
|
||||||
version "0.8.0"
|
version "4.5.3"
|
||||||
resolved "https://registry.yarnpkg.com/bulma/-/bulma-0.8.0.tgz#ac1606431703a4761b18a4a2d5cc1fa864a2aece"
|
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.5.3.tgz#c6a72b355aaf323920be800246a6e4ef30997fe6"
|
||||||
integrity sha512-nhf3rGyiZh/VM7FrSJ/5KeLlfaFkXz0nYcXriynfPH4vVpnxnqyEwaNGdNCVzHyyCA3cHgkQAMpdF/SFbFGZfA==
|
integrity sha512-o9ppKQioXGqhw8Z7mah6KdTYpNQY//tipnkxppWhPbiSWdD+1raYsnhwEZjkTHYbGee4cVQ0Rx65EhOY/HNLcQ==
|
||||||
|
|
||||||
chart.js@^2.9.3:
|
chart.js@^2.9.3:
|
||||||
version "2.9.3"
|
version "2.9.3"
|
||||||
|
@ -47,6 +47,11 @@ color-name@^1.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
|
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
|
||||||
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
||||||
|
|
||||||
|
ervy@^1.0.7:
|
||||||
|
version "1.0.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/ervy/-/ervy-1.0.7.tgz#b4167707ef178484c7b84d7d6e8cca727cf7f252"
|
||||||
|
integrity sha512-LyHLPwIKxCKKtTO/qBMFzwA1BD5IjpM0AA3k6CeK9hrEn4Kbayi93G9eD/Ko4suEIjerSl7YpMmaOoL0g9OCoQ==
|
||||||
|
|
||||||
moment@^2.10.2:
|
moment@^2.10.2:
|
||||||
version "2.24.0"
|
version "2.24.0"
|
||||||
resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
|
resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
|
||||||
|
|
Loading…
Reference in a new issue