add initial project files.
This commit is contained in:
131
lib/DigiTemp.php
Normal file
131
lib/DigiTemp.php
Normal file
@ -0,0 +1,131 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Orrisroot;
|
||||
|
||||
class DigiTemp
|
||||
{
|
||||
/**
|
||||
* @var string digitemp command path
|
||||
*/
|
||||
private string $commandPath;
|
||||
|
||||
/**
|
||||
* @var string config file path
|
||||
*/
|
||||
private string $configPath;
|
||||
|
||||
/**
|
||||
* @var array config data
|
||||
*/
|
||||
private array $config = [
|
||||
'TTY' => '',
|
||||
'READ_TIME' => 0,
|
||||
'LOG_TYPE' => 0,
|
||||
'LOG_FORMAT' => '',
|
||||
'CNT_FORMAT' => '',
|
||||
'HUM_FORMAT' => '',
|
||||
'SENSORS' => 0,
|
||||
'ROM' => [],
|
||||
];
|
||||
|
||||
/**
|
||||
* constructor.
|
||||
*
|
||||
* @param string $commandPath digitemp command path
|
||||
* @param string $configPath config file path
|
||||
*/
|
||||
public function __construct(string $commandPath, string $configPath)
|
||||
{
|
||||
$this->commandPath = $commandPath;
|
||||
$this->configPath = $configPath;
|
||||
$this->parseConfig();
|
||||
}
|
||||
|
||||
/**
|
||||
* get number of sensors.
|
||||
*/
|
||||
public function getNumSensors(): int
|
||||
{
|
||||
return $this->config['SENSORS'];
|
||||
}
|
||||
|
||||
/**
|
||||
* get sensor id.
|
||||
*
|
||||
* @param int $num sensor number
|
||||
*
|
||||
* @return ?string
|
||||
*/
|
||||
public function getSensorId(int $num): ?string
|
||||
{
|
||||
return isset($this->config['ROM'][$num]) ? $this->config['ROM'][$num] : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* read sensor.
|
||||
*
|
||||
* @param int $num sensor number
|
||||
*
|
||||
* @return ?float
|
||||
*/
|
||||
public function readSensor(int $num): ?float
|
||||
{
|
||||
$cmd = escapeshellcmd($this->commandPath.' -c '.$this->configPath.' -q -t '.$num.' -o"%.2C" 2>/dev/null');
|
||||
exec($cmd, $output, $ret);
|
||||
if (0 !== $ret) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (float) $output[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* parse config file.
|
||||
*
|
||||
* @return false if failure
|
||||
*/
|
||||
private function parseConfig(): bool
|
||||
{
|
||||
foreach (file($this->configPath) as $line) {
|
||||
preg_match_all('/"(?:\\\\.|[^\\\\"])*"|\S+/', trim($line), $matches);
|
||||
if (empty($matches[0])) {
|
||||
continue;
|
||||
}
|
||||
$cols = $matches[0];
|
||||
$key = array_shift($cols);
|
||||
$value = array_shift($cols);
|
||||
switch ($key) {
|
||||
case 'TTY':
|
||||
$this->config[$key] = $value;
|
||||
break;
|
||||
case 'READ_TIME':
|
||||
$this->config[$key] = (int) $value;
|
||||
break;
|
||||
case 'LOG_TYPE':
|
||||
$this->config[$key] = (int) $value;
|
||||
break;
|
||||
case 'LOG_FORMAT':
|
||||
$this->config[$key] = '"' === substr($value, 0, 1) ? stripslashes(substr($value, 1, -1)) : $value;
|
||||
break;
|
||||
case 'CNT_FORMAT':
|
||||
$this->config[$key] = '"' === substr($value, 0, 1) ? stripslashes(substr($value, 1, -1)) : $value;
|
||||
break;
|
||||
case 'HUM_FORMAT':
|
||||
$this->config[$key] = '"' === substr($value, 0, 1) ? stripslashes(substr($value, 1, -1)) : $value;
|
||||
break;
|
||||
case 'SENSORS':
|
||||
$this->config[$key] = (int) $value;
|
||||
break;
|
||||
case 'ROM':
|
||||
$this->config[$key][(int) $value] = str_replace('0x', '', implode('', array_reverse($cols)));
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user