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:
parent
2ff1f7f0bb
commit
253c30e0a9
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
2
test.php
2
test.php
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user