'', '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; } }