tpl->add_static('inverter.js'); } public function GET_status_page() { $inv = $this->getClient(); $status = jsonDecode($inv->exec('get-status'))['data']; $rated = jsonDecode($inv->exec('get-rated'))['data']; $this->tpl->set([ 'status' => $status, 'rated' => $rated, 'html' => $this->renderStatusHtml($status, $rated) ]); $this->tpl->set_title('Инвертор'); $this->tpl->render_page('inverter_page.twig'); } public function GET_set_osp() { list($osp) = $this->input('e:value(=sub|sbu)'); $inv = $this->getClient(); try { $inv->exec('set-output-source-priority', [strtoupper($osp)]); } catch (Exception $e) { die('Ошибка: '.jsonDecode($e->getMessage())['message']); } redirect('/inverter/'); } public function GET_status_ajax() { $inv = $this->getClient(); $status = jsonDecode($inv->exec('get-status'))['data']; $rated = jsonDecode($inv->exec('get-rated'))['data']; ajax_ok(['html' => $this->renderStatusHtml($status, $rated)]); } protected function renderStatusHtml(array $status, array $rated) { $power_direction = strtolower($status['battery_power_direction']); $power_direction = preg_replace('/ge$/', 'ging', $power_direction); $charging_rate = ''; if ($power_direction == 'charging') $charging_rate = sprintf(' @ %s %s', $status['battery_charge_current']['value'], $status['battery_charge_current']['unit']); else if ($power_direction == 'discharging') $charging_rate = sprintf(' @ %s %s', $status['battery_discharge_current']['value'], $status['battery_discharge_current']['unit']); $html = sprintf('Battery: %s %s', $status['battery_voltage']['value'], $status['battery_voltage']['unit']); $html .= sprintf(' (%s%s, ', $status['battery_capacity']['value'], $status['battery_capacity']['unit']); $html .= sprintf('%s%s)', $power_direction, $charging_rate); $html .= "\n".sprintf('Load: %s %s', $status['ac_output_active_power']['value'], $status['ac_output_active_power']['unit']); $html .= sprintf(' (%s%%)', $status['output_load_percent']['value']); if ($status['pv1_input_power']['value'] > 0) $html .= "\n".sprintf('Input power: %s %s', $status['pv1_input_power']['value'], $status['pv1_input_power']['unit']); if ($status['grid_voltage']['value'] > 0 or $status['grid_freq']['value'] > 0) { $html .= "\n".sprintf('AC input: %s %s', $status['grid_voltage']['value'], $status['grid_voltage']['unit']); $html .= sprintf(', %s %s', $status['grid_freq']['value'], $status['grid_freq']['unit']); } $html .= "\n".sprintf('Priority: %s', $rated['output_source_priority']); return nl2br($html); } protected function getClient(): InverterdClient { global $config; $inv = new InverterdClient($config['inverterd_host'], $config['inverterd_port']); $inv->setFormat('json'); return $inv; } }