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": {
|
||||
"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
|
||||
|
||||
|
||||
bulma@^0.8.0:
|
||||
version "0.8.0"
|
||||
resolved "https://registry.yarnpkg.com/bulma/-/bulma-0.8.0.tgz#ac1606431703a4761b18a4a2d5cc1fa864a2aece"
|
||||
integrity sha512-nhf3rGyiZh/VM7FrSJ/5KeLlfaFkXz0nYcXriynfPH4vVpnxnqyEwaNGdNCVzHyyCA3cHgkQAMpdF/SFbFGZfA==
|
||||
bootstrap@^4.4.1:
|
||||
version "4.5.3"
|
||||
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.5.3.tgz#c6a72b355aaf323920be800246a6e4ef30997fe6"
|
||||
integrity sha512-o9ppKQioXGqhw8Z7mah6KdTYpNQY//tipnkxppWhPbiSWdD+1raYsnhwEZjkTHYbGee4cVQ0Rx65EhOY/HNLcQ==
|
||||
|
||||
chart.js@^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"
|
||||
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:
|
||||
version "2.24.0"
|
||||
resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
|
||||
|
|
Loading…
Reference in a new issue