Added password authentication (needed if not logged in via browser from the same ip address) and status (which ports are on/off).

This commit is contained in:
Florian Arndt 2013-08-10 16:41:06 +02:00
parent 2ff1f7f0bb
commit 253c30e0a9
2 changed files with 57 additions and 8 deletions

View File

@ -8,16 +8,34 @@ class EnerGenieSwitcher {
/** /**
* Check prerequisites and set-up * Check prerequisites and set-up
*/ */
public function __construct($ip, $debug=false) { public function __construct($ip, $password, $debug=false) {
if(!extension_loaded('curl')) { die('Fatal error: CURL extension needed.'); } if(!extension_loaded('curl')) { die('Fatal error: CURL extension needed.'); }
$this->ip = $ip; $this->ip = $ip;
$this->password = $password;
$this->debug = $debug; $this->debug = $debug;
} }
public function doLogin() {
$this->postRequest('http://'.$this->ip.'/login.html', array('pw' => $this->password));
}
/**
* Get status
*/
public function getStatus() {
$this->doLogin();
$html = $this->getRequest('http://'.$this->ip.'/energenie.html', array());
preg_match_all('/var sockstates \= \[([0-1],[0,1],[0,1],[0,1])\]/', $html, $matches);
if(!isset($matches[1][0])) { return false; }
$states = explode(',', $matches[1][0]);
return array(1=>$states[0], 2=>$states[1], 3=>$states[2], 4=>$states[3]);
}
/** /**
* Do the switch * Do the switch
*/ */
public function doSwitch($switches) { public function doSwitch($switches) {
$this->doLogin();
foreach($switches as $port => $state) { foreach($switches as $port => $state) {
$ports = array(1 => '', 2 => '', 3 => '', 4 => ''); $ports = array(1 => '', 2 => '', 3 => '', 4 => '');
$ports[$port] = $state; $ports[$port] = $state;
@ -27,14 +45,14 @@ class EnerGenieSwitcher {
$params['cte'.$port] = $state; $params['cte'.$port] = $state;
} }
} }
$this->post_request('http://'.$this->ip, $params); $this->postRequest('http://'.$this->ip, $params);
} }
} }
function post_request($url, $fields) { function postRequest($url, $fields) {
$fields_string = ''; $fields_string_array = array();
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } foreach($fields as $key=>$value) { $fields_string_array[] = $key.'='.$value; }
rtrim($fields_string, '&'); $fields_string = join('&', $fields_string_array);
//open connection //open connection
$ch = curl_init(); $ch = curl_init();
@ -48,9 +66,40 @@ class EnerGenieSwitcher {
//execute post //execute post
$result = curl_exec($ch); $result = curl_exec($ch);
if($this->debug === true) { echo "Calling " . $url . '?' . $fields_string . "\n"; } if($this->debug === true) {
echo "Calling " . $url . '?' . $fields_string . "\n";
}
//close connection //close connection
curl_close($ch); curl_close($ch);
// provide html
return $result;
}
function getRequest($url, $fields) {
$fields_string_array = array();
foreach($fields as $key=>$value) { $fields_string_array[] = $key.'='.$value; }
$fields_string = join('&', $fields_string_array);
//open connection
$ch = curl_init();
// configure
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 5000);
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url . ($fields_string != '' ? '?' . $fields_string : ''));
//execute post
$result = curl_exec($ch);
if($this->debug === true) {
echo "Calling " . $url . '?' . $fields_string . "\n";
}
//close connection
curl_close($ch);
// provide html
return $result;
} }
} }

View File

@ -1,6 +1,6 @@
<?php <?php
require_once dirname(__FILE__) . '/class.EnerGenieSwitcher.php'; require_once dirname(__FILE__) . '/class.EnerGenieSwitcher.php';
$egs = new EnerGenieSwitcher('10.49.0.103', true); $egs = new EnerGenieSwitcher('1.2.3.4', 'my-password');
$egs->doSwitch(array( $egs->doSwitch(array(
1 => EnerGenieSwitcher::ON, 1 => EnerGenieSwitcher::ON,
2 => EnerGenieSwitcher::OFF, 2 => EnerGenieSwitcher::OFF,