- added dashboard\n- some debugging
This commit is contained in:
200
webserver.php
200
webserver.php
@@ -4,17 +4,147 @@
|
||||
set_time_limit(0);
|
||||
ob_implicit_flush();
|
||||
|
||||
|
||||
$error_message = null;
|
||||
$error_code = null;
|
||||
$listenHost = "0.0.0.0";
|
||||
$listenPort = 1025;
|
||||
$Dashboards = array();
|
||||
|
||||
require_once $configDir . "/dashboard_conf.php";
|
||||
|
||||
// opening listening server
|
||||
$socket = stream_socket_server("tcp://" . $listenHost . ":" . $listenPort, $error_code, $error_message) or logger(ERROR, _("Could not create socket") . EOL);
|
||||
stream_set_blocking($socket, false);
|
||||
|
||||
$read = array( $socket );
|
||||
|
||||
function htmlSend($socket, $text)
|
||||
{
|
||||
$httpHeader = "HTTP/1.1 200 OK" . EOLR .
|
||||
"Date: " . date("r") . EOLR .
|
||||
"Connection: close" . EOLR .
|
||||
"Content-Type: text/html; charset=UTF-8" . EOLR . EOLR;
|
||||
$response = $httpHeader . '<!doctype html>' . EOL . '<html lang="fr">' . EOL . '<head>' . EOL . '<meta charset="utf-8">' . EOL . '<title>Moha</title>' . EOL . '</head><body>' . $text . "</body></html>";
|
||||
|
||||
stream_socket_sendto($socket, $response);
|
||||
}
|
||||
|
||||
function webListTopics()
|
||||
{
|
||||
global $topics;
|
||||
logger(DEBUG, _("webListTopics function"));
|
||||
$response = "";
|
||||
foreach ($topics as $name => $topic)
|
||||
{
|
||||
$response .= '<a href="/topic=' . $name . '">' . $name ."</a><br>";
|
||||
}
|
||||
return $response;
|
||||
}
|
||||
|
||||
function webBrowse($socket, $argList)
|
||||
{
|
||||
global $topics, $devices;
|
||||
$response = "";
|
||||
logger(DEBUG, _("Generic response to choose device and property"), __FILE__ . ":" . __LINE__);
|
||||
//$response = "<html><header></header><body>" . _("unknown command") . "</body></html>";
|
||||
$response = "";
|
||||
$flag = false;
|
||||
if (array_key_exists("topic", $argList))
|
||||
{
|
||||
if (array_key_exists($argList["topic"], $topics))
|
||||
{
|
||||
logger(DEBUG, _("Topic exists") , __FILE__ . ":" . __LINE__);
|
||||
$topicRef = '<a href="topic=' . $argList["topic"];
|
||||
if (array_key_exists("fn", $argList))
|
||||
{
|
||||
logger(DEBUG, _("FriendlyName exists: ") . $argList["fn"] , __FILE__ . ":" . __LINE__);
|
||||
$fn = "";
|
||||
$fnArray = explode("/", $argList["fn"]);
|
||||
$device = $devices[$argList["topic"]];
|
||||
foreach($fnArray as $value)
|
||||
{
|
||||
if ($flag) $fn .= "/";
|
||||
$fn .= $value;
|
||||
if (!array_key_exists($value, $device))
|
||||
{
|
||||
htmlSend($socket, sprintf(_('"%s" does not exists')));
|
||||
return false;
|
||||
}
|
||||
$device = $device[$value];
|
||||
$flag = true;
|
||||
}
|
||||
if (array_key_exists("device", $device))
|
||||
{
|
||||
$device = $device["device"];
|
||||
$fn .= "device/" . $fn;
|
||||
}
|
||||
if (is_object($device))
|
||||
{
|
||||
foreach($device as $key => $value)
|
||||
{
|
||||
if ($key != "device" and is_array($value))
|
||||
{
|
||||
print_r($value);
|
||||
if (array_key_exists("value", $value))
|
||||
{
|
||||
$response .= $key . ' = ' . bool2string($value["value"]) . "<br>";
|
||||
}
|
||||
}
|
||||
}
|
||||
}else
|
||||
{
|
||||
foreach($device as $key => $value)
|
||||
{
|
||||
$response .= $topicRef . "&fn=" . $fn . "/" . $key . '">' . $key . "</a><br>";
|
||||
}
|
||||
}
|
||||
logger(DEBUG, _("response: ") . EOL . $response , __FILE__ . ":" . __LINE__);
|
||||
|
||||
//htmlSend($socket, $response);
|
||||
}else
|
||||
{
|
||||
foreach($devices[$argList["topic"]] as $key => $value)
|
||||
{
|
||||
logger(DEBUG, _("devices de topic: ") . $key , __FILE__ . ":" . __LINE__);
|
||||
$response .= $topicRef . "&fn=" . $key . '">' . $key . "</a><br>";
|
||||
logger(DEBUG, _("response: ") . $response , __FILE__ . ":" . __LINE__);
|
||||
}
|
||||
}
|
||||
}else
|
||||
{
|
||||
$response = webListTopics();
|
||||
}
|
||||
}else
|
||||
{
|
||||
$response = webListTopics();
|
||||
}
|
||||
htmlSend($socket, $response);
|
||||
}
|
||||
|
||||
function webDashboard($socket, $n = 0)
|
||||
{
|
||||
global $dashboards, $indexDevices;
|
||||
logger(DEBUG, _("webDashboard function"));
|
||||
$response = "";
|
||||
if(array_key_exists($n, $dashboards))
|
||||
{
|
||||
foreach ($dashboards[$n] as $ieeeAddress => $property)
|
||||
{
|
||||
logger(DEBUG, _($indexDevices[$ieeeAddress]->friendlyName . " => " . bool2string($indexDevices[$ieeeAddress]->$property["value"])));
|
||||
$response .= $indexDevices[$ieeeAddress]->friendlyName . " => " . bool2string($indexDevices[$ieeeAddress]->$property["value"]) . "<br>";
|
||||
}
|
||||
}else
|
||||
{
|
||||
$response = _("dashboard not found");
|
||||
}
|
||||
|
||||
htmlSend($socket, $response);
|
||||
}
|
||||
|
||||
function askWebServer($read)
|
||||
{
|
||||
global $topics, $indexDevices, $devices;
|
||||
$array = array();
|
||||
$argList =array();
|
||||
|
||||
@@ -31,16 +161,32 @@ function askWebServer($read)
|
||||
{
|
||||
$input = substr($input,5);
|
||||
$input = explode(" ", $input); // suppress text
|
||||
$argTmp = explode("&", $input[0]);
|
||||
|
||||
$argTmp = explode("&", urldecode($input[0]));
|
||||
foreach($argTmp as $tmp)
|
||||
{
|
||||
//logger(DEBUG, $tmp, __FILE__ . ":" . __LINE__);
|
||||
$argList[strchr($tmp, "=", true)] = substr(strchr($tmp, "="), 1);
|
||||
//logger(DEBUG, $argList[0] . " ==========> " . $argList[1]);
|
||||
//print_r($array);
|
||||
//if (isset($array[1])) $argList[$array[0]] = $array[1];
|
||||
logger(DEBUG, $tmp, __FILE__ . ":" . __LINE__);
|
||||
if(strpos($tmp, "=") === false)
|
||||
{
|
||||
logger(DEBUG, _("no ="));
|
||||
$argList[trim($tmp)] = "";
|
||||
}else
|
||||
{
|
||||
$argList[trim(strchr($tmp, "=", true))] = trim(substr(strchr($tmp, "="), 1));
|
||||
}
|
||||
}
|
||||
logger(DEBUG, print_r($argList, true));
|
||||
|
||||
if (array_key_exists("browse", $argList))
|
||||
{
|
||||
logger(DEBUG, _("Browsing"));
|
||||
webBrowse($spawn, $argList);
|
||||
return true;
|
||||
}elseif(array_key_exists("dashboard", $argList))
|
||||
{
|
||||
webDashboard($spawn, $argList["dashboard"]);
|
||||
return true;
|
||||
}
|
||||
if(array_key_exists("cmd", $argList))
|
||||
{
|
||||
$command = strtolower($argList["cmd"]);
|
||||
@@ -51,25 +197,29 @@ function askWebServer($read)
|
||||
logger(DEBUG, _("GET reached"), __FILE__ . ":" . __LINE__);
|
||||
if(!array_key_exists("topic", $argList) or !array_key_exists("fn", $argList) or !array_key_exists("property", $argList))
|
||||
{
|
||||
$response = "<html><header></header><body>GET: " . _("no parameters passed, need topic, fn and property") . "</body></html>";
|
||||
$response = "GET: " . _("no parameters passed, need topic, fn and property");
|
||||
}else
|
||||
{
|
||||
$device = getDevice($argList["topic"], $argList["fn"]);
|
||||
if (($device = getDevice($argList["topic"], $argList["fn"])) === false)
|
||||
{
|
||||
htmlSend($spawn, sprintf(_('"%s" or "%s" does not exists'), $argList["topic"], $argList["fn"]));
|
||||
return false;
|
||||
}
|
||||
$property = $argList["property"];
|
||||
$response = "<html><header></header><body>GET: " . bool2string($device->$property["value"]) . "</body></html>";
|
||||
$response = "GET: " . bool2string($device->$property["value"]);
|
||||
}
|
||||
fwrite($spawn, $response);
|
||||
htmlSend($spawn, $response);
|
||||
break;
|
||||
case "set":
|
||||
logger(DEBUG, _("SET reached"), __FILE__ . ":" . __LINE__);
|
||||
if(!array_key_exists("topic", $argList) or !array_key_exists("fn", $argList) or !array_key_exists("property", $argList) or !array_key_exists("value", $argList))
|
||||
{
|
||||
$response = "<html><header></header><body>SET: " . _("no parameters passed, need topic, fn, property and value") . "passed</body></html>";
|
||||
fwrite($spawn, $response);
|
||||
$response = "SET: " . _("no parameters passed, need topic, fn, property and value") . "passed";
|
||||
htmlSend($spawn, $response);
|
||||
}else
|
||||
{
|
||||
$response = "<html><header></header><body>setting property " . $argList["property"] . " of " . $argList["fn"] . " to value: " . $argList["value"] . "</body></html>";
|
||||
fwrite($spawn, $response);
|
||||
$response = "setting property " . $argList["property"] . " of " . $argList["fn"] . " to value: " . $argList["value"];
|
||||
htmlSend($spawn, $response);
|
||||
$payload = array($argList["property"] => $argList["value"]);
|
||||
publish(Z2M . "/" . $argList["fn"], $payload);
|
||||
}
|
||||
@@ -104,7 +254,7 @@ function askWebServer($read)
|
||||
$error = error_get_last();
|
||||
if($error !== null)
|
||||
{
|
||||
$response = "<html><header></header><body>" . $error["message"] . " file: " . $error["file"] . " line: " . $error["line"] . "</body></html>";
|
||||
$response = $error["message"] . " file: " . $error["file"] . " line: " . $error["line"];
|
||||
}
|
||||
if ($command === "print")
|
||||
{
|
||||
@@ -114,28 +264,32 @@ function askWebServer($read)
|
||||
$response = "Dump" . EOL;
|
||||
$response .= var_export($var, true);
|
||||
}
|
||||
fwrite($spawn, $response);
|
||||
htmlSend($spawn, $response);
|
||||
break;
|
||||
case "notify":
|
||||
logger(DEBUG, $command . _(" reached"), __FILE__ . ":" . __LINE__);
|
||||
if (!array_key_exists("topic", $argList) or !array_key_exists("fn", $argList) or !array_key_exists("property", $argList) or !array_key_exists("condition", $argList) or !array_key_exists("value", $argList))
|
||||
{
|
||||
$response = "<html><header></header><body>" . _("Error: With 'notify' command, you need 4 parameters: topic, fn, property, condition, value") . "</body></html>";
|
||||
fwrite($spawn, $response);
|
||||
$response = _("Error: With 'notify' command, you need 4 parameters: topic, fn, property, condition, value");
|
||||
htmlSend($spawn, $response);
|
||||
}else
|
||||
{
|
||||
$response = "<html><header></header><body>" . _("notify command have been set") . "</body></html>";
|
||||
$response = _("notify command have been set");
|
||||
$monitored[] = new watch($argList["topic"], $argList["fn"], $argList["property"], $argList["condition"], $argList["value"]);
|
||||
fwrite($spawn, $response);
|
||||
htmlSend($spawn, $response);
|
||||
}
|
||||
logger(DEBUG, print_r($monitored, true));
|
||||
break;
|
||||
default:
|
||||
logger(DEBUG, _("unknown command"), __FILE__ . ":" . __LINE__);
|
||||
$response = "<html><header></header><body>" . _("unknown command") . "</body></html>";
|
||||
fwrite($spawn, $response);
|
||||
webBrowse($spawn, $argList);
|
||||
}
|
||||
}else
|
||||
{
|
||||
webBrowse($spawn,$argList);
|
||||
}
|
||||
}else
|
||||
{
|
||||
webDashboard($spawn);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user