/** * Summary of cycleBody * @return void */ function cycleBody() { // check main system states $objects = getObjectsByClass('systemStates'); $total = count($objects); for ($i = 0; $i < $total; $i++) { $oldState = getGlobal($objects[$i]['TITLE'] . '.stateColor'); callMethod($objects[$i]['TITLE'] . '.checkState'); $newState = getGlobal($objects[$i]['TITLE'] . '.stateColor'); if ($newState != $oldState) { echo $objects[$i]['TITLE'] . " state changed to " . $newState . PHP_EOL; $params = array('STATE' => $newState); callMethod($objects[$i]['TITLE'] . '.stateChanged', $params); } } }
function processIncomingMessage($data) { //DebMes("IRCBot: ".serialize($data)); return callMethod('IRCBot1.onNewMessage', array('message' => $data['message'], 'channel' => $data['channel'], 'from' => $data['from'])); }
/** * Title * * Description * * @access public */ function pollDevice($device_id, $data = 0) { $rec = SQLSelectOne("SELECT * FROM zwave_devices WHERE ID='" . $device_id . "'"); $rec_updated = 0; $comments = array(); $updatedList = array(); $properties = array(); $command_classes = array(); if (!$data) { $data = $this->apiCall('/ZWaveAPI/Run/devices[' . $rec['NODE_ID'] . '].instances[' . $rec['INSTANCE_ID'] . ']'); } if (!$data) { return 0; } if ($_GET['debug']) { //echo $data->updateTime;exit; var_dump($data); } $updateTime = 0; if (!$rec['RAW_DATA']) { $rec_updated = 1; } $rec['RAW_DATA'] = json_encode($data); $rec['SENSOR_VALUE'] = ''; if ($data->data->updateTime) { $updateTime = $data->data->updateTime; } if ($rec['CLASS_BASIC']) { $value = $data->commandClasses->{"32"}->data->value; if ($value !== $rec['BASIC']) { $rec['BASIC'] = $value; $rec_updated = 1; } $command_classes['Basic'] = 32; $properties['Basic'] = $rec['BASIC']; $updatedList['Basic'] = $data->commandClasses->{"32"}->data->{"updateTime"}; if ($data->commandClasses->{"32"}->data->{"updateTime"} > $updateTime) { $updateTime = $data->commandClasses->{"32"}->data->{"updateTime"}; } } if ($rec['CLASS_SENSOR_BINARY']) { $sensor_data = $data->commandClasses->{"48"}->data; if (isset($data->commandClasses->{"48"}->data->{"1"})) { $sensor_data = $data->commandClasses->{"48"}->data->{"1"}; } $value = (int) $sensor_data->level->value; if ($value !== $rec['LEVEL']) { $rec['LEVEL'] = $value; $rec_updated = 1; } $properties['Level'] = $rec['LEVEL']; $command_classes['Level'] = 48; $updatedList['Level'] = $sensor_data->{"updateTime"}; if ($sensor_data->{"updateTime"} > $updateTime) { $updateTime = $sensor_data->{"updateTime"}; } } if ($rec['CLASS_SENSOR_MULTILEVEL']) { // multiple sensor support required! //SENSOR_VALUE $values = array(); for ($i = 0; $i < 255; $i++) { if (isset($data->commandClasses->{"49"}->data->{"{$i}"})) { $sensor = $data->commandClasses->{"49"}->data->{"{$i}"}; $values[] = trim($sensor->sensorTypeString->value) . ': ' . $sensor->val->value . $sensor->scaleString->value; if (trim($sensor->sensorTypeString->value)) { $prop_name = trim($sensor->sensorTypeString->value) . ', ' . $sensor->scaleString->value; } else { $prop_name = "Sensor {$i}"; } if ($properties[$prop_name]) { $prop_name .= ' (1)'; } $properties[$prop_name] = $sensor->val->value; $command_classes[$prop_name] = 49; $updatedList[$prop_name] = $data->commandClasses->{"49"}->data->{"{$i}"}->{"updateTime"}; if ($data->commandClasses->{"49"}->data->{"{$i}"}->{"updateTime"} > $updateTime) { $updateTime = $data->commandClasses->{"49"}->data->{"{$i}"}->{"updateTime"}; } } } $value = implode('; ', $values); if ($value != $rec['SENSOR_VALUE']) { $rec['SENSOR_VALUE'] .= $value . ';'; $rec_updated = 1; } } if ($rec['CLASS_SWITCH_BINARY']) { $value = (int) $data->commandClasses->{"37"}->data->level->value; if ($value !== $rec['LEVEL']) { $rec['LEVEL'] = $value; $rec_updated = 1; } $properties['Level'] = $rec['LEVEL']; $command_classes['Level'] = 37; $updatedList['Level'] = $data->commandClasses->{"37"}->data->{"updateTime"}; if ($data->commandClasses->{"37"}->data->{"updateTime"} > $updateTime) { $updateTime = $data->commandClasses->{"37"}->data->{"updateTime"}; } } if ($rec['CLASS_SWITCH_MULTILEVEL']) { $value = (int) $data->commandClasses->{"38"}->data->level->value; if ($value !== $rec['LEVEL']) { $rec['LEVEL'] = $value; $rec_updated = 1; } $properties['Level'] = $rec['LEVEL']; $command_classes['Level'] = 38; $updatedList['Level'] = $data->commandClasses->{"38"}->data->{"updateTime"}; if ($data->commandClasses->{"38"}->data->{"updateTime"} > $updateTime) { $updateTime = $data->commandClasses->{"38"}->data->{"updateTime"}; } $properties['LevelDuration command (level, duration)'] = ''; } if ($rec['CLASS_BATTERY']) { $value = (int) $data->commandClasses->{"128"}->data->last->value; if ($value != $rec['BATTERY_LEVEL']) { $rec['BATTERY_LEVEL'] = $value; $rec_updated = 1; } $command_classes['Battery'] = 128; $properties['Battery'] = $rec['BATTERY_LEVEL']; $updatedList['Battery'] = $data->commandClasses->{"128"}->data->{"updateTime"}; if ($data->commandClasses->{"128"}->data->{"updateTime"} > $updateTime) { $updateTime = $data->commandClasses->{"128"}->data->{"updateTime"}; } } if ($rec['CLASS_METER']) { // ... 50 $values = array(); for ($i = 0; $i < 255; $i++) { if (isset($data->commandClasses->{"50"}->data->{"{$i}"})) { $sensor = $data->commandClasses->{"50"}->data->{"{$i}"}; $values[] = trim($sensor->sensorTypeString->value) . ': ' . $sensor->val->value . ' ' . $sensor->scaleString->value; if (trim($sensor->sensorTypeString->value)) { $prop_name = trim($sensor->sensorTypeString->value) . ', ' . $sensor->scaleString->value; } else { $prop_name = "Meter {$i}"; } if ($properties[$prop_name]) { $prop_name .= ' (1)'; } $command_classes[$prop_name] = 50; $properties[$prop_name] = $sensor->val->value; $updatedList[$prop_name] = $data->commandClasses->{"50"}->data->{"{$i}"}->{"updateTime"}; if ($data->commandClasses->{"50"}->data->{"{$i}"}->{"updateTime"} > $updateTime) { $updateTime = $data->commandClasses->{"50"}->data->{"{$i}"}->{"updateTime"}; } } } $value = implode('; ', $values); if ($value != '') { $rec['SENSOR_VALUE'] .= $value . '; '; $rec_updated = 1; } } if ($rec['CLASS_SENSOR_ALARM']) { // ... $data->commandClasses->{"156"}->data if (is_object($data->commandClasses->{"156"}->data->{"0"}->sensorState)) { $command_classes['AlarmGeneral'] = 156; $properties['AlarmGeneral'] = $data->commandClasses->{"156"}->data->{"0"}->sensorState->value; $updatedList['AlarmGeneral'] = $data->commandClasses->{"156"}->data->{"0"}->sensorState->updateTime; $value = $properties['AlarmGeneral']; if ($value != $rec['LEVEL']) { $rec['LEVEL'] = $value; $rec_updated = 1; } } if (is_object($data->commandClasses->{"156"}->data->{"1"}->sensorState)) { $command_classes['AlarmSmoke'] = 156; $properties['AlarmSmoke'] = $data->commandClasses->{"156"}->data->{"1"}->sensorState->value; $updatedList['AlarmSmoke'] = $data->commandClasses->{"156"}->data->{"1"}->sensorState->updateTime; } if (is_object($data->commandClasses->{"156"}->data->{"2"}->sensorState)) { $command_classes['AlarmCarbonMonoxide'] = 156; $properties['AlarmCarbonMonoxide'] = $data->commandClasses->{"156"}->data->{"2"}->sensorState->value; $updatedList['AlarmCarbonMonoxide'] = $data->commandClasses->{"156"}->data->{"2"}->sensorState->updateTime; } if (is_object($data->commandClasses->{"156"}->data->{"3"}->sensorState)) { $command_classes['AlarmCarbonDioxide'] = 156; $properties['AlarmCarbonDioxide'] = $data->commandClasses->{"156"}->data->{"3"}->sensorState->value; $updatedList['AlarmCarbonDioxide'] = $data->commandClasses->{"156"}->data->{"3"}->sensorState->updateTime; } if (is_object($data->commandClasses->{"156"}->data->{"4"}->sensorState)) { $command_classes['AlarmHeat'] = 156; $properties['AlarmHeat'] = $data->commandClasses->{"156"}->data->{"4"}->sensorState->value; $updatedList['AlarmHeat'] = $data->commandClasses->{"156"}->data->{"4"}->sensorState->updateTime; } if (is_object($data->commandClasses->{"156"}->data->{"5"}->sensorState)) { $command_classes['AlarmFlood'] = 156; $properties['AlarmFlood'] = $data->commandClasses->{"156"}->data->{"5"}->sensorState->value; $updatedList['AlarmFlood'] = $data->commandClasses->{"156"}->data->{"5"}->sensorState->updateTime; } if ($data->commandClasses->{"156"}->data->{"updateTime"} > $updateTime) { $updateTime = $data->commandClasses->{"156"}->data->{"updateTime"}; } } if ($rec['CLASS_SCENE_CONTROLLER'] && is_object($data->commandClasses->{"43"}->data->{"currentScene"})) { // ... 43 $properties['CurrentScene'] = $data->commandClasses->{"43"}->data->{"currentScene"}->value; if ($data->commandClasses->{"43"}->data->{"updateTime"} > $updateTime) { $updateTime = $data->commandClasses->{"43"}->data->{"updateTime"}; } } elseif ($rec['CLASS_SCENE_CONTROLLER'] && is_object($data->commandClasses->{"45"}->data->{"currentScene"})) { // ... 45 $properties['CurrentScene'] = $data->commandClasses->{"45"}->data->{"currentScene"}->value; if ($data->commandClasses->{"45"}->data->{"updateTime"} > $updateTime) { $updateTime = $data->commandClasses->{"43"}->data->{"updateTime"}; } } if ($rec['CLASS_THERMOSTAT'] && isset($data->commandClasses->{"64"}->data->mode->value)) { //$value=$data->commandClasses->{"64"}->data->{$data->commandClasses->{"64"}->data->mode->value}->modeName->value; $rec['SENSOR_VALUE'] .= " Mode: " . $data->commandClasses->{"64"}->data->{$data->commandClasses->{"64"}->data->mode->value}->modeName->value . ';'; $value = $data->commandClasses->{"64"}->data->mode->value; if ($value != $rec['MODE_VALUE']) { $rec['MODE_VALUE'] = $value; $rec_updated = 1; } $command_classes['Thermostat mode'] = 64; $properties['Thermostat mode'] = $rec['MODE_VALUE']; $updatedList['Thermostat mode'] = $data->commandClasses->{"64"}->data->{"updateTime"}; if ($data->commandClasses->{"64"}->data->{"updateTime"} > $updateTime) { $updateTime = $data->commandClasses->{"64"}->data->{"updateTime"}; } $comments_str = ''; for ($i = 0; $i < 255; $i++) { if ($data->commandClasses->{"64"}->data->{$i}) { $comments_str .= "{$i} = " . $data->commandClasses->{"64"}->data->{$i}->modeName->value . "; "; } } $comments['Thermostat mode'] = $comments_str; if (isset($data->commandClasses->{"67"}->data)) { //ThermostatSetPoint for ($i = 0; $i < 255; $i++) { if ($data->commandClasses->{"67"}->data->{$i}->val) { $key = 'ThermostatSetPoint ' . $data->commandClasses->{"67"}->data->{$i}->modeName->value; $properties[$key] = $data->commandClasses->{"67"}->data->{$i}->val->value; $command_classes[$key] = 67; if ($data->commandClasses->{"67"}->data->{$i}->scaleString->value) { $comments[$key] = $data->commandClasses->{"67"}->data->{$i}->scaleString->value; } } } } if (isset($data->commandClasses->{"68"}->data->mode->value)) { //ThermostatFanMode $properties['ThermostatFanOn'] = (int) $data->commandClasses->{"68"}->data->on->value; $command_classes['ThermostatFanMode'] = 68; $properties['ThermostatFanMode'] = $data->commandClasses->{"68"}->data->mode->value; if ($data->commandClasses->{"68"}->data->{"updateTime"} > $updateTime) { $updateTime = $data->commandClasses->{"68"}->data->{"updateTime"}; } $rec['SENSOR_VALUE'] .= " Fan Mode: " . $data->commandClasses->{"68"}->data->{$data->commandClasses->{"68"}->data->mode->value}->modeName->value . ';'; $comments_str = ''; for ($i = 0; $i < 255; $i++) { if ($data->commandClasses->{"68"}->data->{$i}) { $comments_str .= "{$i} = " . $data->commandClasses->{"68"}->data->{$i}->modeName->value . "; "; } } $comments['ThermostatFanMode'] = $comments_str; } } if ($updateTime) { $properties['updateTime'] = $updateTime; $rec['LATEST_UPDATE'] = date('Y-m-d H:i:s', $properties['updateTime']); $rec_updated = 1; } if ($rec_updated) { SQLUpdate('zwave_devices', $rec); } foreach ($properties as $k => $v) { $prop = SQLSelectOne("SELECT * FROM zwave_properties WHERE DEVICE_ID='" . $rec['ID'] . "' AND UNIQ_ID LIKE '" . DBSafe($k) . "'"); $prop['DEVICE_ID'] = $rec['ID']; $prop['UNIQ_ID'] = $k; $prop['TITLE'] = $k; $prop['COMMAND_CLASS'] = $command_classes[$k]; if ($prop['VALUE'] != $v) { $prop['UPDATED'] = date('Y-m-d H:i:s'); } if ($updatedList[$k]) { $prop['UPDATED'] = date('Y-m-d H:i:s', $updatedList[$k]); } $prop['VALUE'] = $v; if ($comments[$k]) { $prop['COMMENTS'] = $comments[$k]; } if (is_numeric($prop['VALUE']) && $prop['VALUE'] !== '') { $prop['VALUE'] = round($prop['VALUE'], 3); } if ($prop['ID']) { SQLUpdate('zwave_properties', $prop); if ($prop['VALUE'] !== '') { $validated = 1; } else { $validated = 0; continue; } if ($prop['LINKED_OBJECT']) { if ($prop['CORRECT_VALUE']) { $prop['VALUE'] += (double) $prop['CORRECT_VALUE']; } } if ($prop['VALIDATE']) { if ((double) $prop['VALUE'] < (double) $prop['VALID_FROM'] || (double) $prop['VALUE'] > (double) $prop['VALID_TO']) { $validated = 0; } } if ($prop['LINKED_OBJECT'] && $prop['LINKED_PROPERTY'] && $validated) { $old_value = getGlobal($prop['LINKED_OBJECT'] . '.' . $prop['LINKED_PROPERTY']); if ($prop['VALUE'] != $old_value) { setGlobal($prop['LINKED_OBJECT'] . '.' . $prop['LINKED_PROPERTY'], $prop['VALUE'], array($this->name => '0')); } } if ($prop['LINKED_OBJECT'] && $prop['LINKED_METHOD'] && $validated && ($prop['VALUE'] != $old_value || !$prop['LINKED_PROPERTY'])) { $params = array(); $params['VALUE'] = $prop['VALUE']; callMethod($prop['LINKED_OBJECT'] . '.' . $prop['LINKED_METHOD'], $params); } } else { $prop['ID'] = SQLInsert('zwave_properties', $prop); } } //print_r($data);exit; }
public function testGetActionRoutes() { $controller = new Fixtures\ProductController(); $routes = callMethod($controller, 'getActionRoutes', []); assertThat($routes, is(equalTo([['', 'indexAction'], ['/show', 'showAction'], ['/delete', 'deleteAction']]))); }
function runMethod($method_name, $params = 0) { return callMethod($method_name, $params); }
/** * FrontEnd * * Module frontend * * @access public */ function usual(&$out) { global $ajax; if ($ajax) { global $op; header("HTTP/1.0: 200 OK\n"); header('Content-Type: text/html; charset=utf-8'); if ($op == 'checkAllStates') { global $scene_id; $qry = "1"; if (preg_match('/(\\d+)\\.html/', $_SERVER["REQUEST_URI"], $m)) { $qry .= " AND scenes.ID='" . (int) $m[1] . "'"; } elseif ($scene_id) { $qry .= " AND scenes.ID='" . (int) $scene_id . "'"; } else { $qry .= " AND scenes.HIDDEN!=1"; } foreach ($_GET as $k => $v) { $this->data[$k] = $v; } $states = SQLSelect("SELECT elm_states.ID, elm_states.TITLE, elm_states.HTML, elements.SCENE_ID, elm_states.SWITCH_SCENE, elements.TYPE FROM elm_states, elements, scenes WHERE elements.SCENE_ID=scenes.ID AND elm_states.ELEMENT_ID=elements.ID AND {$qry} ORDER BY elements.PRIORITY DESC, elm_states.PRIORITY DESC"); $total = count($states); for ($i = 0; $i < $total; $i++) { $states[$i]['STATE'] = $this->checkState($states[$i]['ID']); if ($states[$i]['HTML'] != '') { if (preg_match('/\\[#modul/is', $states[$i]['HTML'])) { //$states[$i]['HTML']=str_replace('#', '', $states[$i]['HTML']); unset($states[$i]['HTML']); } else { $states[$i]['HTML'] = processTitle($states[$i]['HTML'], $this); } } if ($states[$i]['TYPE'] == 'img') { unset($states[$i]['HTML']); } } echo json_encode($states); } if ($op == 'click') { global $id; $state = SQLSelectOne("SELECT * FROM elm_states WHERE ID='" . $id . "'"); $params = array('STATE' => $state['TITLE']); if ($state['ACTION_OBJECT'] && $state['ACTION_METHOD']) { callMethod($state['ACTION_OBJECT'] . '.' . $state['ACTION_METHOD'], $params); } if ($state['SCRIPT_ID']) { runScript($state['SCRIPT_ID'], $params); } if ($state['CODE']) { try { $code = $state['CODE']; $success = eval($code); if ($success === false) { DebMes("Error scene item code: " . $code); registerError('scenes', "Error scene item code: " . $code); } } catch (Exception $e) { DebMes('Error: exception ' . get_class($e) . ', ' . $e->getMessage() . '.'); registerError('scenes', get_class($e) . ', ' . $e->getMessage()); } } $qry = "1"; $qry .= " AND elements.ID=" . $state['ELEMENT_ID']; $states = SQLSelect("SELECT elm_states.ID, elm_states.TITLE, elm_states.HTML, elements.SCENE_ID, elm_states.SWITCH_SCENE, elements.TYPE FROM elm_states, elements, scenes WHERE elements.SCENE_ID=scenes.ID AND elm_states.ELEMENT_ID=elements.ID AND {$qry} ORDER BY elements.PRIORITY DESC, elm_states.PRIORITY DESC"); $total = count($states); for ($i = 0; $i < $total; $i++) { $states[$i]['STATE'] = $this->checkState($states[$i]['ID']); if ($states[$i]['HTML'] != '') { $states[$i]['HTML'] = processTitle($states[$i]['HTML'], $this); } if ($states[$i]['TYPE'] == 'img') { unset($states[$i]['HTML']); } } echo json_encode($states); } if ($op == 'position') { global $id; global $posx; global $posy; global $width; global $height; if ($id && $posx && $posy && $width && $height) { $state = SQLSelectOne("SELECT * FROM elm_states WHERE ID='" . $id . "'"); $state['WINDOW_POSX'] = $posx; $state['WINDOW_POSY'] = $posy; $state['WINDOW_WIDTH'] = $width; $state['WINDOW_HEIGHT'] = $height; SQLUpdate('elm_states', $state); } // echo "OK"; } exit; } $this->admin($out); $out['ALL_TYPES'] = $this->getAllTypes(); }
return; } if ($_POST["timestamp"] == "" || $_POST["timestamp"] == " " || $_POST["timestamp"] == "undefined") { return; } $timestamp = strtotime($_POST["timestamp"]) * 1000; $interval = floatval($_POST["interval"]) * 1000; $key = $_POST["key"]; /*$tmp = $client->zrangebyscore($key, $nexttime, $nexttime); $tmp = $tmp[0]; $index = $client->zrank($key, $tmp); $tmp = $client->zrange($key, $index + 1, $index + 1); $tmp = $client->zscore($key, $tmp[0]); if ($tmp >= $timestamp && $tmp < $next) { $next = $tmp; } echo ($next / 1000.0)." ".($next - $nexttime);*/ } // call corresponding method according to $method function callMethod($func) { if (is_null($func) || "" == $func || !function_exists($func)) { echo "invalid func: " . $func; return; } $func(); } //call method specified by javascript callMethod($_POST["func"]);
function dump_events($ecode, $data, $server, $port) { // Search exist event $parent_class_rec = SQLSelectOne("SELECT ID FROM classes WHERE TITLE LIKE 'Telephony'"); if ($parent_class_rec['ID']) { $class_rec = SQLSelectOne("SELECT * FROM classes WHERE TITLE LIKE 'AsteriskAMI' AND PARENT_ID = '" . $parent_class_rec['ID'] . "'"); if ($class_rec['ID']) { $object_rec = SQLSelectOne("SELECT * FROM objects WHERE CLASS_ID='" . $class_rec['ID'] . "' AND TITLE = 'Asterisk'"); if ($object_rec['ID']) { $method_rec = SQLSelectOne("SELECT * FROM methods WHERE OBJECT_ID='" . $object_rec['ID'] . "' AND TITLE = 'Event" . $data['Event'] . "'"); if (!$method_rec['ID']) { // New event. Add method to class AsteriskAMI and object // Add class method echo date('Y-m-d H:i:s') . " : Receive new event. Add method Event" . $data['Event'] . "\n"; $class_method_rec['CLASS_ID'] = $class_rec['ID']; $class_method_rec['TITLE'] = 'Event' . $data['Event']; $class_method_rec['CODE'] = "echo date('Y-m-d H:i:s')" . ".\" : Event \"." . '$params[\'Event\']' . ".\" received. Process... \\n\"" . ";\n"; SQLInsert('methods', $class_method_rec); // Add object method $method_rec['OBJECT_ID'] = $object_rec['ID']; $method_rec['TITLE'] = 'Event' . $data['Event']; $method_rec['CALL_PARENT'] .= "1"; $method_rec['CODE'] .= "/**\n"; $method_rec['CODE'] .= "Array received form Asterisk:\n"; foreach ($data as $key => $value) { $method_rec['CODE'] .= "\t[" . $key . "] => " . $value . " \n"; } $method_rec['CODE'] .= "*/\n"; SQLInsert('methods', $method_rec); } else { // Event already exist. Process event $method = $object_rec['TITLE'] . ".Event" . $data['Event']; callMethod($method, $data); } } } } }
<?php global $op; if (!headers_sent()) { header("HTTP/1.0: 200 OK\n"); header('Content-Type: text/html; charset=utf-8'); } if ($op == 'console') { global $command; if (preg_match('/^\\w+\\.\\w+$/', $command)) { echo callMethod($command); } elseif (preg_match('/;/', $command)) { eval($command); } else { eval('echo ' . $command . ';'); } } if ($op == 'filter') { global $title; $object_title = ''; $property_title = ''; if (preg_match('/^(.+)\\.$/', $title, $m)) { $object_title = $m[1]; $object = SQLSelectOne("SELECT * FROM objects WHERE TITLE LIKE '" . DBSafe($object_title) . "'"); if ($object['ID']) { $res .= LANG_OBJECT . " <b><a href='/panel/class/" . $object['CLASS_ID'] . "/object/" . $object['ID'] . ".html'>" . $object['TITLE'] . "</a></b><br>"; $class = SQLSelectOne("SELECT * FROM classes WHERE ID='" . $object['CLASS_ID'] . "'"); if ($class['ID']) { $res .= LANG_CLASS . ' <b><a href="#" onClick="return setFilter(\'' . $class['TITLE'] . '.\');">' . $class['TITLE'] . "</a></b><br>"; } //properties and methods
/** * FrontEnd * * Module frontend * * @access public */ function usual(&$out) { /* $this->getConfig(); if ($this->config['ENABLED'] && $_SERVER['REQUEST_URI']=='/') { echo "<html><head><title>".SETTINGS_SITE_TITLE."</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/><link href=\"/stl.css\" rel=\"stylesheet\" type=\"text/css\"/></head><body>".$this->config['CONTENT']."</body></html>"; exit; } */ global $play; global $rnd; global $rnd; global $session; global $play_terminal; global $terminal_id; if ($this->play) { $play = $this->play; } if ($this->terminal_id) { $terminal_id = $this->terminal_id; } if ($terminal_id) { $terminal = SQLSelectOne("SELECT * FROM terminals WHERE ID='" . (int) $terminal_id . "'"); $session->data['PLAY_TERMINAL'] = $terminal['NAME']; } if ($session->data['PLAY_TERMINAL'] == '') { $session->data['PLAY_TERMINAL'] = $session->data['TERMINAL']; } if ($play_terminal != '') { $session->data['PLAY_TERMINAL'] = $play_terminal; } if ($session->data['PLAY_TERMINAL'] != '') { $terminal = SQLSelectOne("SELECT * FROM terminals WHERE NAME='" . DBSafe($session->data['PLAY_TERMINAL']) . "'"); } if (!$terminal['HOST']) { $terminal['HOST'] = 'localhost'; } if (!$play && $session->data['LAST_PLAY']) { $play = $session->data['LAST_PLAY']; } elseif ($play) { $session->data['LAST_PLAY'] = $play; } if ($play != '') { $out['PLAY'] = $play; } if ($rnd != '') { $out['RND'] = $rnd; } $current_level = getGlobal('ThisComputer.volumeLevel'); for ($i = 0; $i <= 100; $i += 5) { $rec = array('VALUE' => $i); if ($i == $current_level) { $rec['SELECTED'] = 1; } $out['VOLUMES'][] = $rec; } global $ajax; if ($ajax != '') { global $command; if ($command != '') { if (!$this->intCall) { echo $command . ' '; } $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if ($terminal['PLAYER_USERNAME'] || $terminal['PLAYER_PASSWORD']) { curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, $terminal['PLAYER_USERNAME'] . ':' . $terminal['PLAYER_PASSWORD']); } if (!$terminal['PLAYER_PORT'] && $terminal['PLAYER_TYPE'] == 'foobar') { $terminal['PLAYER_PORT'] = '8888'; } elseif (!$terminal['PLAYER_PORT'] && $terminal['PLAYER_TYPE'] == 'xbmc') { $terminal['PLAYER_PORT'] = '8080'; } elseif (!$terminal['PLAYER_PORT']) { $terminal['PLAYER_PORT'] = '80'; } if ($terminal['PLAYER_TYPE'] == 'vlc' || $terminal['PLAYER_TYPE'] == '') { $terminal['PLAYER_PORT'] = '80'; if ($command == 'refresh') { $out['PLAY'] = preg_replace('/\\\\$/is', '', $out['PLAY']); $out['PLAY'] = preg_replace('/\\/$/is', '', $out['PLAY']); if (preg_match('/^http/', $out['PLAY'])) { $path = urlencode($out['PLAY']); } else { $path = urlencode('' . str_replace('/', "\\", $out['PLAY'])); } curl_setopt($ch, CURLOPT_URL, "http://" . $terminal['HOST'] . ":" . $terminal['PLAYER_PORT'] . "/rc/?command=vlc_play¶m=" . $path); //echo $path;exit; $res = curl_exec($ch); } if ($command == 'fullscreen') { curl_setopt($ch, CURLOPT_URL, "http://" . $terminal['HOST'] . ":" . $terminal['PLAYER_PORT'] . "/rc/?command=vlc_fullscreen"); $res = curl_exec($ch); } if ($command == 'pause') { curl_setopt($ch, CURLOPT_URL, "http://" . $terminal['HOST'] . ":" . $terminal['PLAYER_PORT'] . "/rc/?command=vlc_pause"); $res = curl_exec($ch); } if ($command == 'next') { curl_setopt($ch, CURLOPT_URL, "http://" . $terminal['HOST'] . ":" . $terminal['PLAYER_PORT'] . "/rc/?command=vlc_next"); $res = curl_exec($ch); } if ($command == 'prev') { curl_setopt($ch, CURLOPT_URL, "http://" . $terminal['HOST'] . ":" . $terminal['PLAYER_PORT'] . "/rc/?command=vlc_prev"); $res = curl_exec($ch); } if ($command == 'close') { curl_setopt($ch, CURLOPT_URL, "http://" . $terminal['HOST'] . ":" . $terminal['PLAYER_PORT'] . "/rc/?command=vlc_close"); $res = curl_exec($ch); } if ($command == 'volume') { global $volume; setGlobal('ThisComputer.volumeLevel', $volume); callMethod('ThisComputer.VolumeLevelChanged', array('VALUE' => $volume, 'HOST' => $terminal['HOST'])); } } elseif ($terminal['PLAYER_TYPE'] == 'xbmc') { include DIR_MODULES . 'app_player/xbmc.php'; } elseif ($terminal['PLAYER_TYPE'] == 'foobar') { include DIR_MODULES . 'app_player/foobar.php'; } elseif ($terminal['PLAYER_TYPE'] == 'vlcweb') { include DIR_MODULES . 'app_player/vlcweb.php'; } elseif ($terminal['PLAYER_TYPE'] == 'mpd') { include DIR_MODULES . 'app_player/mpd.php'; } // close cURL resource, and free up system resources curl_close($ch); } if (!$this->intCall) { if ($session->data['PLAY_TERMINAL'] != '') { echo " on " . $session->data['PLAY_TERMINAL'] . ' '; } echo "OK"; if ($res) { echo " (" . $res . ")"; } $session->save(); exit; } } $terminals = SQLSelect("SELECT * FROM terminals WHERE CANPLAY=1 ORDER BY TITLE"); $total = count($terminals); for ($i = 0; $i < $total; $i++) { if ($terminals[$i]['NAME'] == $session->data['PLAY_TERMINAL']) { $terminals[$i]['SELECTED'] = 1; $out['TERMINAL_TITLE'] = $terminals[$i]['TITLE']; } } $out['TERMINALS_TOTAL'] = count($terminals); if ($out['TERMINALS_TOTAL'] == 1 || !$session->data['PLAY_TERMINAL']) { $terminals[0]['SELECTED'] = 1; } $out['TERMINALS'] = $terminals; }
/** * FrontEnd * * Module frontend * * @access public */ function usual(&$out) { global $ajax; if ($ajax) { global $op; header("HTTP/1.0: 200 OK\n"); header('Content-Type: text/html; charset=utf-8'); if ($op == 'resized' || $op == 'dragged') { global $element; global $details; $element_id = 0; if (preg_match('/state_(\\d+)/', $element, $m)) { $state = SQLSelectOne("SELECT ELEMENT_ID FROM elm_states WHERE ID='" . (int) $m[1] . "'"); $element_id = $state['ELEMENT_ID']; } elseif (preg_match('/canvas_(\\d+)/', $element, $m) || preg_match('/container_(\\d+)/', $element, $m)) { $element_id = $m[1]; } $element = SQLSelectOne("SELECT * FROM elements WHERE ID='" . (int) $element_id . "'"); } if ($op == 'resized' && $element['ID']) { $details = json_decode($details, true); $element['WIDTH'] = $details['size']['width']; $element['HEIGHT'] = $details['size']['height']; if ($element['WIDTH'] > 0 && $element['HEIGHT'] > 0) { SQLUpdate('elements', $element); } } if ($op == 'dragged' && $element['ID']) { $details = json_decode($details, true); //echo "Dragged $element ".serialize($details); $diff_top = $details['position']['top'] - $details['originalPosition']['top']; $diff_left = $details['position']['left'] - $details['originalPosition']['left']; if ($diff_top != 0 || $diff_left != 0) { $element['TOP'] += $diff_top; $element['LEFT'] += $diff_left; SQLUpdate('elements', $element); $linked_elements = SQLSelect("SELECT * FROM elements WHERE LINKED_ELEMENT_ID=" . (int) $element['ID']); $total = count($linked_elements); for ($i = 0; $i < $total; $i++) { $linked_elements[$i]['TOP'] -= $diff_top; $linked_elements[$i]['LEFT'] -= $diff_left; SQLUpdate('elements', $linked_elements[$i]); } } } if ($op == 'checkAllStates') { global $scene_id; $qry = "1"; if (preg_match('/(\\d+)\\.html/', $_SERVER["REQUEST_URI"], $m)) { $qry .= " AND scenes.ID='" . (int) $m[1] . "'"; } elseif ($scene_id) { $qry .= " AND scenes.ID='" . (int) $scene_id . "'"; } else { $qry .= " AND scenes.HIDDEN!=1"; } foreach ($_GET as $k => $v) { $this->data[$k] = $v; } $states = array(); $elements = $this->getDynamicElements($qry); $total = count($elements); for ($i = 0; $i < $total; $i++) { if (is_array($elements[$i]['STATES'])) { foreach ($elements[$i]['STATES'] as $st) { $states[] = $st; } } } $total = count($states); for ($i = 0; $i < $total; $i++) { $this->processState($states[$i]); } echo json_encode($states); } if ($op == 'click') { global $id; if (preg_match('/(\\d+)\\_(\\d+)/', $id, $m)) { $dynamic_item = 1; $real_part = $m[1]; $object_part = $m[2]; if ($object_part) { $object_rec = SQLSelectOne("SELECT ID, TITLE FROM objects WHERE ID=" . (int) $object_part); } } else { $dynamic_item = 0; $real_part = $id; $object_part = 0; } $state = SQLSelectOne("SELECT * FROM elm_states WHERE ID='" . (int) $real_part . "'"); $params = array('STATE' => $state['TITLE']); if ($state['ACTION_OBJECT'] && $state['ACTION_METHOD']) { if ($object_part) { $state['ACTION_OBJECT'] = $object_rec['TITLE']; } callMethod($state['ACTION_OBJECT'] . '.' . $state['ACTION_METHOD'], $params); } if ($state['SCRIPT_ID']) { runScript($state['SCRIPT_ID'], $params); } if ($state['CODE']) { try { $code = $state['CODE']; $success = eval($code); if ($success === false) { DebMes("Error scene item code: " . $code); registerError('scenes', "Error scene item code: " . $code); } } catch (Exception $e) { DebMes('Error: exception ' . get_class($e) . ', ' . $e->getMessage() . '.'); registerError('scenes', get_class($e) . ', ' . $e->getMessage()); } } $qry = "1"; $qry .= " AND elements.ID=" . $state['ELEMENT_ID']; $states = array(); $elements = $this->getDynamicElements($qry); $total = count($elements); for ($i = 0; $i < $total; $i++) { if (is_array($elements[$i]['STATES'])) { foreach ($elements[$i]['STATES'] as $st) { $states[] = $st; } } } $total = count($states); for ($i = 0; $i < $total; $i++) { $this->processState($states[$i]); /* $states[$i]['STATE']=(string)$this->checkState($states[$i]['ID']); if ($states[$i]['HTML']!='') { $states[$i]['HTML']=processTitle($states[$i]['HTML'], $this); } if ($states[$i]['TYPE']=='img') { unset($states[$i]['HTML']); } */ } echo json_encode($states); } if ($op == 'position') { global $id; global $posx; global $posy; global $width; global $height; if ($id && $posx && $posy && $width && $height) { $state = SQLSelectOne("SELECT * FROM elm_states WHERE ID='" . $id . "'"); $state['WINDOW_POSX'] = $posx; $state['WINDOW_POSY'] = $posy; $state['WINDOW_WIDTH'] = $width; $state['WINDOW_HEIGHT'] = $height; SQLUpdate('elm_states', $state); } // echo "OK"; } exit; } $this->admin($out); $out['ALL_TYPES'] = $this->getAllTypes(); }
/** * Title * * Description * * @access public */ function getProperty($id) { $prop = SQLSelectOne("SELECT * FROM knxproperties WHERE ID='" . $id . "' AND CAN_READ=1"); if (!$prop['ID']) { return false; } if (!$this->connection) { $this->connect(0); } if ($this->connection) { $res = cacheread($this->connection, $prop['ADDRESS'], 0); //var_dump($res); // $res[0] - addr // $res[1] - from if (isset($res[2])) { $data = array(); $total = count($res); for ($i = 2; $i < $total; $i++) { $data[] = (int) $res[$i]; } $old_value = $prop['DATA_VALUE']; if ($prop['DATA_TYPE'] == 'small') { $prop['DATA_VALUE'] = $data[0]; } elseif ($prop['DATA_TYPE'] == 'p1') { $prop['DATA_VALUE'] = round($data[0] * 100 / 255, 2); } elseif ($prop['DATA_TYPE'] == 'f2') { $prop['DATA_VALUE'] = f2_decode($data); // TO-DO: OTHER TYPES!!! } elseif ($prop['DATA_TYPE'] == 'b1') { } elseif ($prop['DATA_TYPE'] == 'b2') { } $prop['DATA_RAW'] = implode(',', $data); $prop['UPDATED'] = date('Y-m-d H:i:s'); print_r($prop); SQLUpdate('knxproperties', $prop); if ($prop['LINKED_OBJECT'] && $prop['LINKED_PROPERTY']) { setGlobal($prop['LINKED_OBJECT'] . '.' . $prop['LINKED_PROPERTY'], $prop['DATA_VALUE'], array($this->name => '0')); } if ($prop['LINKED_OBJECT'] && $prop['LINKED_METHOD'] && $prop['DATA_VALUE'] != $old_value) { $params = array(); $params['VALUE'] = $prop['DATA_VALUE']; callMethod($prop['LINKED_OBJECT'] . '.' . $prop['LINKED_METHOD'], $params); } } } }
/** * FrontEnd * * Module frontend * * @access public */ function usual(&$out) { global $ajax; if ($ajax) { global $op; header("HTTP/1.0: 200 OK\n"); header('Content-Type: text/html; charset=utf-8'); if ($op == 'checkAllStates') { $qry = "1"; if (preg_match('/(\\d+)\\.html/', $_SERVER["REQUEST_URI"], $m)) { $qry .= " AND scenes.ID='" . $m[1] . "'"; } $states = SQLSelect("SELECT elm_states.ID, elm_states.TITLE, elm_states.HTML, elements.SCENE_ID, elm_states.SWITCH_SCENE, elements.TYPE FROM elm_states, elements WHERE elm_states.ELEMENT_ID=elements.ID AND {$qry}"); $total = count($states); for ($i = 0; $i < $total; $i++) { $states[$i]['STATE'] = $this->checkState($states[$i]['ID']); if ($states[$i]['TYPE'] == 'html') { $states[$i]['HTML'] = processTitle($states[$i]['HTML'], $this); } } echo json_encode($states); } if ($op == 'click') { global $id; $state = SQLSelectOne("SELECT * FROM elm_states WHERE ID='" . $id . "'"); $params = array('STATE' => $state['TITLE']); if ($state['ACTION_OBJECT'] && $state['ACTION_METHOD']) { callMethod($state['ACTION_OBJECT'] . '.' . $state['ACTION_METHOD'], $params); } if ($state['SCRIPT_ID']) { runScript($state['SCRIPT_ID'], $params); } echo "OK"; } if ($op == 'position') { global $id; global $posx; global $posy; global $width; global $height; if ($id && $posx && $posy && $width && $height) { $state = SQLSelectOne("SELECT * FROM elm_states WHERE ID='" . $id . "'"); $state['WINDOW_POSX'] = $posx; $state['WINDOW_POSY'] = $posy; $state['WINDOW_WIDTH'] = $width; $state['WINDOW_HEIGHT'] = $height; SQLUpdate('elm_states', $state); } // echo "OK"; } exit; } $this->admin($out); }
function pollDevice($id, $states_data = '') { $dev_rec = SQLSelectOne("SELECT * FROM veradevices WHERE ID='" . $id . "'"); if (!is_array($states_data)) { $data = $this->api_request('status', 'DeviceNum=' . $dev_rec['DEVICE_NUM']); $json = json_decode($data, true); $states_data = $json['Device_Num_' . $dev_rec['DEVICE_NUM']]['states']; if (!is_array($states_data)) { return 0; } } /* $data=$this->api_request('invoke', 'DeviceNum='.$dev_rec['DEVICE_NUM']); echo $data;exit; $json=json_decode($data, true); print_r($json);exit; */ $totals = count($states_data); for ($is = 0; $is < $totals; $is++) { $state_id = $states_data[$is]['id']; $property = SQLSelectOne("SELECT * FROM veraproperties WHERE DEVICE_ID='" . $dev_rec['ID'] . "' AND VARIABLE LIKE '" . DBSafe($states_data[$is]['variable']) . "'"); $old_value = $property['VALUE']; if (!$property['ID']) { $property = array(); $property['DEVICE_ID'] = $dev_rec['ID']; $property['STATE_ID'] = (int) $state_id; $property['VARIABLE'] = $states_data[$is]['variable']; $property['ID'] = SQLInsert('veraproperties', $property); } $property['SERVICE'] = $states_data[$is]['service']; $property['VALUE'] = $states_data[$is]['value']; $property['UPDATED'] = date('Y-m-d H:i:s'); SQLUpdate('veraproperties', $property); $validated = true; if ($property['LINKED_OBJECT'] && $property['LINKED_PROPERTY'] && $validated) { $old_value = getGlobal($property['LINKED_OBJECT'] . '.' . $property['LINKED_PROPERTY']); if ($property['VALUE'] != $old_value) { setGlobal($property['LINKED_OBJECT'] . '.' . $property['LINKED_PROPERTY'], $property['VALUE'], array($this->name => '0')); } } if ($property['LINKED_OBJECT'] && $property['LINKED_METHOD'] && $validated && ($property['VALUE'] != $old_value || !$property['LINKED_PROPERTY'])) { $params = array(); $params['VALUE'] = $property['VALUE']; callMethod($property['LINKED_OBJECT'] . '.' . $property['LINKED_METHOD'], $params); } } }
/** * FrontEnd * * Module frontend * * @access public */ function usual(&$out) { if ($this->ajax) { global $clicked; if ($clicked) { $item = SQLSelectOne("SELECT * FROM watchesmenu WHERE ID='" . (int) $clicked . "'"); if ($item['LINKED_OBJECT'] && $item['LINKED_METHOD']) { callMethod($item['LINKED_OBJECT'] . '.' . $item['LINKED_METHOD']); } if ($item['SCRIPT_ID']) { runScript($item['SCRIPT_ID']); } $result = array('RESULT' => 'OK'); header("Content-type:application/json"); echo json_encode($result); exit; } else { $items = SQLSelect("SELECT ID, TITLE, SUBTITLE FROM watchesmenu ORDER BY PRIORITY DESC, TITLE"); $res_items = array(); $total = count($items); for ($i = 0; $i < $total; $i++) { if (!checkAccess('watchesmenu', $items[$i]['ID'])) { continue; } $items[$i]['TITLE'] = processTitle($items[$i]['TITLE']); if ($items[$i]['SUBTITLE']) { $items[$i]['SUBTITLE'] = processTitle($items[$i]['SUBTITLE']); } $res_items[] = $items[$i]; } header("Content-type:application/json"); echo json_encode(array('items' => $res_items)); exit; } } }