a:2:{i:0;a:6:{s:5:"TITLE";s:5:"Light";s:5:"NOLOG";s:1:"1";s:11:"DESCRIPTION";s:0:"";s:7:"METHODS";a:5:{i:0;a:7:{s:5:"TITLE";s:12:"toggleSwitch";s:11:"DESCRIPTION";s:47:"Toggle switch from on to off, or from off to on";s:4:"CODE";s:158:"$this->callMethod('getOutputPortState');

if ($this->getProperty('enabled') == 1)
  $this->callMethod('switchOff');
else
  $this->callMethod('switchOn');";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2014-07-13 22:36:16";s:15:"EXECUTED_PARAMS";s:55:"a:1:{s:21:"ORIGINAL_OBJECT_TITLE";s:12:"KitchenLight";}";}i:1;a:7:{s:5:"TITLE";s:8:"switchOn";s:11:"DESCRIPTION";s:13:"Turn on light";s:4:"CODE";s:397:"// !!! If you change it, then update AutoSwitchOffLight !!!
$params['output'] = $this->getProperty('outputPort');
$params['value'] = 1;
$log = getLogger($this);
$log->trace(sprintf('switchOn method: set output = %d to %d', $params['output'], $params['value']));
// Call megadevice class
callMethod($this->getProperty('outputDevice').'.setOutput', $params);
$this->setProperty('enabled', 1);";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2014-07-13 22:45:00";s:15:"EXECUTED_PARAMS";s:59:"a:1:{s:21:"ORIGINAL_OBJECT_TITLE";s:16:"Livingroom3Light";}";}i:2;a:7:{s:5:"TITLE";s:18:"getOutputPortState";s:11:"DESCRIPTION";s:40:"Read current state of output from device";s:4:"CODE";s:339:"// Read current state of output
$params['output'] = $this->getProperty('outputPort');
$params['propertyName'] = $this->object_title.'.enabled';
$log = getLogger($this);
$log->trace(sprintf('getOutputPortState method: get state of output = %d', $params['output']));
callMethod($this->getProperty('outputDevice').'.getOutput', $params);";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2014-07-13 22:45:00";s:15:"EXECUTED_PARAMS";s:58:"a:1:{s:21:"ORIGINAL_OBJECT_TITLE";s:15:"Corridor1Sensor";}";}i:3;a:7:{s:5:"TITLE";s:13:"switchPressed";s:11:"DESCRIPTION";s:38:"Call this method from megad.php script";s:4:"CODE";s:34:"$this->callMethod('toggleSwitch');";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2014-07-13 22:36:16";s:15:"EXECUTED_PARAMS";s:55:"a:1:{s:21:"ORIGINAL_OBJECT_TITLE";s:12:"KitchenLight";}";}i:4;a:7:{s:5:"TITLE";s:9:"switchOff";s:11:"DESCRIPTION";s:14:"Turn off light";s:4:"CODE";s:398:"// !!! If you change it, then update AutoSwitchOffLight !!!
$params['output'] = $this->getProperty('outputPort');
$params['value'] = 0;
$log = getLogger($this);
$log->trace(sprintf('switchOff method: set output = %d to %d', $params['output'], $params['value']));
// Call megadevice class
callMethod($this->getProperty('outputDevice').'.setOutput', $params);
$this->setProperty('enabled', 0);";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2014-07-13 22:42:58";s:15:"EXECUTED_PARAMS";s:57:"a:1:{s:21:"ORIGINAL_OBJECT_TITLE";s:14:"Corridor2Light";}";}}s:10:"PROPERTIES";a:5:{i:0;a:4:{s:5:"TITLE";s:7:"enabled";s:11:"DESCRIPTION";s:16:"Is light turn on";s:12:"KEEP_HISTORY";s:1:"0";s:8:"ONCHANGE";s:0:"";}i:1;a:4:{s:5:"TITLE";s:11:"inputDevice";s:11:"DESCRIPTION";s:104:"Устройство через которое приходит сигнал от выключателя";s:12:"KEEP_HISTORY";s:1:"0";s:8:"ONCHANGE";s:0:"";}i:2;a:4:{s:5:"TITLE";s:9:"inputPort";s:11:"DESCRIPTION";s:106:"Номер физического порта на котором находится выключатель";s:12:"KEEP_HISTORY";s:1:"0";s:8:"ONCHANGE";s:0:"";}i:3;a:4:{s:5:"TITLE";s:10:"outputPort";s:11:"DESCRIPTION";s:0:"";s:12:"KEEP_HISTORY";s:1:"0";s:8:"ONCHANGE";s:0:"";}i:4;a:4:{s:5:"TITLE";s:12:"outputDevice";s:11:"DESCRIPTION";s:0:"";s:12:"KEEP_HISTORY";s:1:"0";s:8:"ONCHANGE";s:0:"";}}s:7:"OBJECTS";a:14:{i:0;a:3:{s:5:"TITLE";s:13:"Bedroom1Light";s:11:"DESCRIPTION";s:20:"Main (ceiling) light";s:7:"METHODS";a:0:{}}i:1;a:3:{s:5:"TITLE";s:14:"Playroom1Light";s:11:"DESCRIPTION";s:20:"Main (ceiling) light";s:7:"METHODS";a:0:{}}i:2;a:3:{s:5:"TITLE";s:13:"Bedroom2Light";s:11:"DESCRIPTION";s:57:"Second button. Not configured because we have single lamp";s:7:"METHODS";a:0:{}}i:3;a:4:{s:5:"TITLE";s:12:"StoreroomFan";s:11:"DESCRIPTION";s:0:"";s:7:"METHODS";a:1:{i:0;a:7:{s:5:"TITLE";s:8:"switchOn";s:11:"DESCRIPTION";s:0:"";s:4:"CODE";s:310:"// TODO : Refactor this obsolete code
if ($this->getProperty('stopped') == 1) {
//  DebMes
}
else {
  $params1['output'] = $this->getProperty('outputPort');
  $params1['value'] = 1;
  callMethod($this->getProperty('outputDevice').'.setOutput', $params1);

  $this->callMethod('getOutputPortState');
}";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2014-07-03 10:08:47";s:15:"EXECUTED_PARAMS";s:79:"a:3:{s:6:"object";s:12:"StoreroomFan";s:2:"op";s:1:"m";s:1:"m";s:8:"switchOn";}";}}s:10:"PROPERTIES";a:1:{i:0;a:4:{s:5:"TITLE";s:7:"stopped";s:11:"DESCRIPTION";N;s:12:"KEEP_HISTORY";s:1:"0";s:8:"ONCHANGE";s:0:"";}}}i:4;a:3:{s:5:"TITLE";s:13:"BathroomLight";s:11:"DESCRIPTION";s:0:"";s:7:"METHODS";a:2:{i:0;a:7:{s:5:"TITLE";s:9:"switchOff";s:11:"DESCRIPTION";s:0:"";s:4:"CODE";s:577:"// Looks like i found bug. I cannot use $params inside this method
$params1['output'] = 13;
$params1['value'] = 0;
$log = getLogger($this);
$log->trace(sprintf('switchOff method: set output = 12 and 13 to %d', $params1['value']));
// Call megadevice class
callMethod('MegaD3.setOutput', $params1);

$this->setProperty('enabled', 0);

clearTimeOut('Switch on bathroom fan');
SetTimeOut('Switch off bathroom fan', 'callMethod("BathroomFan.switchOff");', 1 * 60);

SetTimeOut('Switch off heated towel rails', 'callMethod("HeatedTowelRailsLight.switchOff");', 5 * 60);";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2014-07-13 22:25:26";s:15:"EXECUTED_PARAMS";s:0:"";}i:1;a:7:{s:5:"TITLE";s:8:"switchOn";s:11:"DESCRIPTION";s:0:"";s:4:"CODE";s:777:"// Looks like i found bug. I cannot use $params inside this method
$params1['output'] = 13;
$params1['value'] = 1;
$log = getLogger($this);
$log->trace(sprintf('switchOn method: set output = 12 and 13 to %d', $params1['value']));
// Call megadevice class
callMethod('MegaD3.setOutput', $params1);

$this->setProperty('enabled', 1);

if (timeBetween('08:00', '23:30')) {
  SetTimeOut('Switch on bathroom fan', 'callMethod("BathroomFan.switchOn");', 20 * 60);
}

// TODO : Remove
$log->warn('Schedule manual switch off for Bathroom. Remove this code when PIR is installed');
SetTimeOut('Switch off bathroom light', 'callMethod("BathroomLight.switchOff");', 45 * 60);

clearTimeOut('Switch off heated towel rails');
callMethod('HeatedTowelRailsLight.switchOn');";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2014-07-13 22:25:31";s:15:"EXECUTED_PARAMS";s:0:"";}}}i:5;a:3:{s:5:"TITLE";s:14:"Playroom2Light";s:11:"DESCRIPTION";s:21:"Additional wall light";s:7:"METHODS";a:0:{}}i:6;a:3:{s:5:"TITLE";s:13:"SoftwareLight";s:11:"DESCRIPTION";s:37:"Тестовый светильник";s:7:"METHODS";a:0:{}}i:7;a:3:{s:5:"TITLE";s:12:"KitchenLight";s:11:"DESCRIPTION";s:0:"";s:7:"METHODS";a:0:{}}i:8;a:3:{s:5:"TITLE";s:16:"Livingroom1Light";s:11:"DESCRIPTION";s:33:"Main (ceiling) light (1st button)";s:7:"METHODS";a:1:{i:0;a:7:{s:5:"TITLE";s:8:"switchOn";s:11:"DESCRIPTION";s:0:"";s:4:"CODE";s:40:"callMethod('Livingroom3Light.switchOn');";s:11:"CALL_PARENT";s:1:"2";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2014-07-13 19:53:06";s:15:"EXECUTED_PARAMS";s:0:"";}}}i:9;a:3:{s:5:"TITLE";s:16:"Livingroom2Light";s:11:"DESCRIPTION";s:10:"2nd button";s:7:"METHODS";a:1:{i:0;a:7:{s:5:"TITLE";s:8:"switchOn";s:11:"DESCRIPTION";s:0:"";s:4:"CODE";s:40:"callMethod('Livingroom3Light.switchOn');";s:11:"CALL_PARENT";s:1:"2";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2014-07-13 21:27:10";s:15:"EXECUTED_PARAMS";s:0:"";}}}i:10;a:3:{s:5:"TITLE";s:21:"HeatedTowelRailsLight";s:11:"DESCRIPTION";s:34:"Полотенцесушитель";s:7:"METHODS";a:0:{}}i:11;a:3:{s:5:"TITLE";s:15:"Corridor1Sensor";s:11:"DESCRIPTION";s:35:"Над дверью в ванную";s:7:"METHODS";a:1:{i:0;a:7:{s:5:"TITLE";s:13:"switchPressed";s:11:"DESCRIPTION";s:0:"";s:4:"CODE";s:126:"$this->callMethod('getOutputPortState');
if ($this->getProperty('enabled') == 1)
  setGlobal('CorridorPlace.isOccupied', 1);";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2014-07-13 22:45:00";s:15:"EXECUTED_PARAMS";s:0:"";}}}i:12;a:3:{s:5:"TITLE";s:16:"Livingroom3Light";s:11:"DESCRIPTION";s:41:"Outer perimeter of Led lighting (ceiling)";s:7:"METHODS";a:0:{}}i:13;a:3:{s:5:"TITLE";s:17:"Livingroom1Sensor";s:11:"DESCRIPTION";s:0:"";s:7:"METHODS";a:1:{i:0;a:7:{s:5:"TITLE";s:13:"switchPressed";s:11:"DESCRIPTION";s:0:"";s:4:"CODE";s:128:"$this->callMethod('getOutputPortState');
if ($this->getProperty('enabled') == 1)
  setGlobal('LivingroomPlace.isOccupied', 1);";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2014-07-13 22:45:00";s:15:"EXECUTED_PARAMS";s:0:"";}}}}}i:1;a:6:{s:5:"TITLE";s:18:"AutoSwitchOffLight";s:5:"NOLOG";s:1:"1";s:11:"DESCRIPTION";s:51:"Automatically call "switchOff" method after timeout";s:7:"METHODS";a:2:{i:0;a:7:{s:5:"TITLE";s:8:"switchOn";s:11:"DESCRIPTION";s:13:"Turn on light";s:4:"CODE";s:385:"$params['output'] = $this->getProperty('outputPort');
$params['value'] = 1;
$log = getLogger($this);
$log->trace(sprintf('switchOn method: set output = %d to %d', $params['output'], $params['value']));
// Call megadevice class
callMethod($this->getProperty('outputDevice').'.setOutput', $params);
$this->setProperty('enabled', 1);

$this->callMethod('resetAutoSwitchOffTimer');";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2014-07-13 22:45:31";s:15:"EXECUTED_PARAMS";s:54:"a:1:{s:21:"ORIGINAL_OBJECT_TITLE";s:11:"BathroomFan";}";}i:1;a:7:{s:5:"TITLE";s:23:"resetAutoSwitchOffTimer";s:11:"DESCRIPTION";s:39:"Update existing timer or create new one";s:4:"CODE";s:297:"if ($this->getProperty('autoSwitchOffEnabled') == 1) {
  $timeout = intval($this->getProperty('autoSwitchOffTimeOut'));
  if ($timeout == 0) $timeout = 180;
  SetTimeOut("Auto switch off {$this->object_title} after $timeout",
    "callMethod('{$this->object_title}.switchOff');", $timeout);
}";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2014-07-13 22:45:31";s:15:"EXECUTED_PARAMS";s:54:"a:1:{s:21:"ORIGINAL_OBJECT_TITLE";s:11:"BathroomFan";}";}}s:10:"PROPERTIES";a:2:{i:0;a:4:{s:5:"TITLE";s:20:"autoSwitchOffEnabled";s:11:"DESCRIPTION";s:57:"Is enabled auto switch off feature or not. Must be 1 or 0";s:12:"KEEP_HISTORY";s:1:"0";s:8:"ONCHANGE";s:0:"";}i:1;a:4:{s:5:"TITLE";s:20:"autoSwitchOffTimeOut";s:11:"DESCRIPTION";s:46:"Timeout (sec) for auto switch off. Must be > 0";s:12:"KEEP_HISTORY";s:1:"0";s:8:"ONCHANGE";s:0:"";}}s:7:"OBJECTS";a:4:{i:0;a:3:{s:5:"TITLE";s:14:"StoreroomLight";s:11:"DESCRIPTION";s:0:"";s:7:"METHODS";a:0:{}}i:1;a:3:{s:5:"TITLE";s:11:"BathroomFan";s:11:"DESCRIPTION";s:30:"Extractor hood in the bathroom";s:7:"METHODS";a:0:{}}i:2;a:3:{s:5:"TITLE";s:14:"Corridor1Light";s:11:"DESCRIPTION";s:20:"Main (ceiling) light";s:7:"METHODS";a:1:{i:0;a:7:{s:5:"TITLE";s:8:"switchOn";s:11:"DESCRIPTION";s:0:"";s:4:"CODE";s:38:"callMethod('Corridor2Light.switchOn');";s:11:"CALL_PARENT";s:1:"1";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2014-07-13 22:45:00";s:15:"EXECUTED_PARAMS";s:0:"";}}}i:3;a:3:{s:5:"TITLE";s:14:"Corridor2Light";s:11:"DESCRIPTION";s:52:"Additional floor light. It's slave of Corridor1Light";s:7:"METHODS";a:0:{}}}}}