- added dashboard\n- some debugging
This commit is contained in:
parent
18d5b74a96
commit
314305bcb1
@ -17,6 +17,7 @@ class topic {
|
|||||||
public $extensions;
|
public $extensions;
|
||||||
public $config;
|
public $config;
|
||||||
public $callback;
|
public $callback;
|
||||||
|
public $getOnStart = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
class device
|
class device
|
||||||
@ -47,7 +48,7 @@ class device
|
|||||||
|
|
||||||
public function get()
|
public function get()
|
||||||
{
|
{
|
||||||
publish($this->topic . "/" . $this->friendlyNames, $this->payload, "get"); //, $event);
|
publish($this->topic . "/" . $this->friendlyName, $this->payload, "get"); //, $event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
10
config/dashboard_conf.php
Normal file
10
config/dashboard_conf.php
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
$dashboards[] = array(
|
||||||
|
RDC_SALON_ECLAIRAGE_PANNEAU => "state",
|
||||||
|
RDC_SDB_WC_ECLAIRAGE => "state_l1",
|
||||||
|
RDC_SDB_WC_ECLAIRAGE => "state_l2",
|
||||||
|
RDC_CHAMBRE_AMBIANCE => "state",
|
||||||
|
RDC_CHAMBRE_ECLAIRAGE => "state_l1"
|
||||||
|
);
|
||||||
|
|
||||||
|
?>
|
@ -1,7 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
//Constants
|
//Constants
|
||||||
define( "EOL", "\n");
|
define("EOL", "\n");
|
||||||
|
define("EOLR", "\n\r");
|
||||||
define("Z2M", "zigbee2mqtt");
|
define("Z2M", "zigbee2mqtt");
|
||||||
define("ON", 1);
|
define("ON", 1);
|
||||||
define("OFF", 0);
|
define("OFF", 0);
|
||||||
|
@ -2,16 +2,20 @@
|
|||||||
|
|
||||||
logger(DEBUG,_("Including db_functions.php"), __FILE__ . ":" . __LINE__);
|
logger(DEBUG,_("Including db_functions.php"), __FILE__ . ":" . __LINE__);
|
||||||
|
|
||||||
// to save or not to save the DB, that is the question ...
|
//to save or not to save the DB, that is the question ...
|
||||||
function storeDB($db, $filepath)
|
function storeDB($db, $filepath)
|
||||||
{
|
{
|
||||||
$data = serialize($db);
|
$data = serialize($db);
|
||||||
file_put_contents($filepath, $data);
|
return file_put_contents($filepath, $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadDB(& $db, $filepath)
|
function loadDB(& $db, $filepath)
|
||||||
{
|
{
|
||||||
$data = file_get_contents($filepath);
|
$data = file_get_contents($filepath);
|
||||||
|
if ($data === false)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
$db = unserialize($data);
|
$db = unserialize($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,9 +234,36 @@ function iterateDevice($topic, $fn, $parentDevice, &$device, $payloadArray, $pro
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getDevicesValues()
|
function getDevicesValues($topic)
|
||||||
{
|
{
|
||||||
//TODO
|
global $indexDevices, $topics;
|
||||||
|
logger(DEBUG, _("getDevicesValues function" ));
|
||||||
|
foreach($indexDevices as $device)
|
||||||
|
{
|
||||||
|
if ($device->topic == $topic)
|
||||||
|
{
|
||||||
|
logger(DEBUG, "device: " . $device->friendlyName);
|
||||||
|
$payload = "{";
|
||||||
|
$flag = false;
|
||||||
|
$properties = array_slice($device, 12);
|
||||||
|
logger(DEBUG, print_r($properties, true));
|
||||||
|
foreach($properties as $property)
|
||||||
|
{
|
||||||
|
if (flag)
|
||||||
|
{
|
||||||
|
$payload = ",";
|
||||||
|
}else {
|
||||||
|
$flag = true;
|
||||||
|
}
|
||||||
|
$payload .= $property . ':""';
|
||||||
|
}
|
||||||
|
$device->payload = $payload . "}";
|
||||||
|
logger(DEBUG, $device->payload);
|
||||||
|
$device->get();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
@ -13,7 +13,7 @@ class rdc_salon_eclairage extends hook
|
|||||||
|
|
||||||
public $delay = 3; // amount of time in $timeunit
|
public $delay = 3; // amount of time in $timeunit
|
||||||
public $timeUnit = "minute"; // unit of time for delay, second, minute, hour, day, week, month, year
|
public $timeUnit = "minute"; // unit of time for delay, second, minute, hour, day, week, month, year
|
||||||
public $luminance_min = 70;
|
public $luminance_min = 60;
|
||||||
public $luminance_max = 3000;
|
public $luminance_max = 3000;
|
||||||
|
|
||||||
|
|
||||||
|
68
moha.php
68
moha.php
@ -34,6 +34,8 @@ $curlErr = 0; // Number of errors returned by curl
|
|||||||
$configDir = "./config"; // default config dir (production value is /etc/moha/)
|
$configDir = "./config"; // default config dir (production value is /etc/moha/)
|
||||||
$hooksInitialized = 0; // are all hooks initialized ? false/true
|
$hooksInitialized = 0; // are all hooks initialized ? false/true
|
||||||
$flagHooks = false;
|
$flagHooks = false;
|
||||||
|
|
||||||
|
|
||||||
if ($testMode)
|
if ($testMode)
|
||||||
{
|
{
|
||||||
$mqttServerIp = "192.168.1.253"; // IP address of mqttserver in test mode
|
$mqttServerIp = "192.168.1.253"; // IP address of mqttserver in test mode
|
||||||
@ -45,7 +47,7 @@ if ($testMode)
|
|||||||
$mqttServerIp = "127.0.0.1"; // IP address of mqttserver in production mode
|
$mqttServerIp = "127.0.0.1"; // IP address of mqttserver in production mode
|
||||||
$dataPath = "/usr/share/moha/";
|
$dataPath = "/usr/share/moha/";
|
||||||
$logFile = "/var/log/moha.log"; // Path of log file
|
$logFile = "/var/log/moha.log"; // Path of log file
|
||||||
$configDir = "/etc/config"; // default config dir (production value is /etc/moha/)
|
$configDir = "/etc/moha"; // default config dir (production value is /etc/moha/)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,11 +90,7 @@ function logger($level, $log, $pos = false, $notif = true)
|
|||||||
{
|
{
|
||||||
logger(INFO, _("Notification not sent"), __FILE__ . ":" . __LINE__, false);
|
logger(INFO, _("Notification not sent"), __FILE__ . ":" . __LINE__, false);
|
||||||
}
|
}
|
||||||
}else
|
|
||||||
{
|
|
||||||
logger(INFO, _("Notification not sent because of testMode"), __FILE__ . ":" . __LINE__, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function init()
|
function init()
|
||||||
@ -134,7 +132,10 @@ function endMoha()
|
|||||||
$x = 0;
|
$x = 0;
|
||||||
|
|
||||||
logger(WARNING, _("moha is ending"), __FILE__ . ":" . __LINE__);
|
logger(WARNING, _("moha is ending"), __FILE__ . ":" . __LINE__);
|
||||||
storeDB($devices, $dataPath . "moha.db");
|
if (storeDB($devices, $dataPath . "moha.db") === false)
|
||||||
|
{
|
||||||
|
logger(ERROR, _("Can not store db" ), __FILE__ . ":" . __LINE__);
|
||||||
|
}
|
||||||
if($testMode) file_put_contents($dataPath . "moha.devices", var_export($devices, true));
|
if($testMode) file_put_contents($dataPath . "moha.devices", var_export($devices, true));
|
||||||
if ($connected)
|
if ($connected)
|
||||||
{
|
{
|
||||||
@ -160,6 +161,25 @@ function connect2mqttServer()
|
|||||||
$client->onConnect('connectResponse');
|
$client->onConnect('connectResponse');
|
||||||
}
|
}
|
||||||
logger(WARNING, _("starting moha"), __FILE__ . ":" . __LINE__);
|
logger(WARNING, _("starting moha"), __FILE__ . ":" . __LINE__);
|
||||||
|
|
||||||
|
|
||||||
|
logger(DEBUG, _("requiring config files -> devices_constants.php"), __FILE__ . ":" . __LINE__);
|
||||||
|
//include predefined file witch define constants for devices
|
||||||
|
if (is_readable($configDir . "/devices_constants.php"))
|
||||||
|
{
|
||||||
|
include $configDir . "/devices_constants.php";
|
||||||
|
//echo "hooklist"; print_r($hooksList); echo EOL;
|
||||||
|
logger(INFO, sprintf(_("%s/devices_constants.define found, so it has been included :-)"), $configDir), __FILE__ . ":" . __LINE__, false);
|
||||||
|
}elseif(is_readable("config/devices_constants.php"))
|
||||||
|
{
|
||||||
|
include "config/devices_constants.php";
|
||||||
|
//echo "hooklist"; print_r($hooksList); echo EOL;
|
||||||
|
logger(INFO, sprintf(_("%s/devices_constants.define found, so it has been included :-)"), $configDir), __FILE__ . ":" . __LINE__, false);
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
logger(WARNING, sprintf(_("%s/devices_constants.define not found, so not included :-)"), $configDir), __FILE__ . ":" . __LINE__, false);
|
||||||
|
}
|
||||||
|
|
||||||
logger(DEBUG, _("requiring php modules"), __FILE__ . ":" . __LINE__);
|
logger(DEBUG, _("requiring php modules"), __FILE__ . ":" . __LINE__);
|
||||||
require "class/main.php";
|
require "class/main.php";
|
||||||
require "class/db.php";
|
require "class/db.php";
|
||||||
@ -171,11 +191,11 @@ require "events.php";
|
|||||||
require "db_functions.php";
|
require "db_functions.php";
|
||||||
require "webserver.php";
|
require "webserver.php";
|
||||||
|
|
||||||
//logger(DEBUG, _('assigning variable $client to mosquitto class "client"'), false);
|
|
||||||
//$client = new Mosquitto\Client();
|
|
||||||
|
|
||||||
logger(DEBUG, _("Loading stored devices datas"), __FILE__ . ":" . __LINE__);
|
logger(DEBUG, _("Loading stored devices datas"), __FILE__ . ":" . __LINE__);
|
||||||
loadDB($devices, "moha.db");
|
if (loadDB($devices, $dataPath . "moha.db") === false)
|
||||||
|
{
|
||||||
|
logger(ERROR, _("Can not load device db"), __FILE__ . ":" . __LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// topics definition
|
// topics definition
|
||||||
@ -189,22 +209,6 @@ if (!empty($hooksList))
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
logger(DEBUG, _("requiring config files -> devices_constants.php"), __FILE__ . ":" . __LINE__);
|
|
||||||
//include predefined file witch define constants for devices
|
|
||||||
if (is_readable($configDir . "/" . "devices_constants.php"))
|
|
||||||
{
|
|
||||||
include $configDir . "/" . "devices_constants.php";
|
|
||||||
//echo "hooklist"; print_r($hooksList); echo EOL;
|
|
||||||
logger(INFO, sprintf(_("%s/devices_constants.define found, so it has been included :-)"), $configDir), __FILE__ . ":" . __LINE__, false);
|
|
||||||
}elseif(is_readable("config/devices_constants.php"))
|
|
||||||
{
|
|
||||||
include "config/devices_constants.php";
|
|
||||||
//echo "hooklist"; print_r($hooksList); echo EOL;
|
|
||||||
logger(INFO, sprintf(_("%s/devices_constants.define found, so it has been included :-)"), $configDir), __FILE__ . ":" . __LINE__, false);
|
|
||||||
}else
|
|
||||||
{
|
|
||||||
logger(WARNING, sprintf(_("%s/devices_constants.define not found, so not included :-)"), $configDir), __FILE__ . ":" . __LINE__, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
// making the list of hooks to include
|
// making the list of hooks to include
|
||||||
listHooks("./hooks", $hooksList);
|
listHooks("./hooks", $hooksList);
|
||||||
@ -252,13 +256,13 @@ while (true)
|
|||||||
if (! $included) // hooks not already included
|
if (! $included) // hooks not already included
|
||||||
{
|
{
|
||||||
logger(DEBUG, _("Making hooks list"), __FILE__ . ":" . __LINE__, false);
|
logger(DEBUG, _("Making hooks list"), __FILE__ . ":" . __LINE__, false);
|
||||||
getDevicesValues(); // TODO get the values of devices
|
|
||||||
if (!empty($hooksList)) // some hooks to include if hooklist is not empty
|
if (!empty($hooksList)) // some hooks to include if hooklist is not empty
|
||||||
{
|
{
|
||||||
foreach ($hooksList as $hook) // loop to include hooks in hookslist
|
foreach ($hooksList as $hookFile) // loop to include hooks in hookslist
|
||||||
{
|
{
|
||||||
logger(INFO, _("Including ") . $hook, __FILE__ . ":" . __LINE__, false);
|
logger(INFO, _("Including ") . $hookFile, __FILE__ . ":" . __LINE__, false);
|
||||||
include $hook;
|
include $hookFile;
|
||||||
}
|
}
|
||||||
file_put_contents($dataPath . "moha.devices", var_export($devices, true)); // debugging : save device list
|
file_put_contents($dataPath . "moha.devices", var_export($devices, true)); // debugging : save device list
|
||||||
$included = true;
|
$included = true;
|
||||||
@ -270,11 +274,12 @@ while (true)
|
|||||||
if ($oneshot === false) // execute once initialization finished :WARNING hooks can to be not initialized
|
if ($oneshot === false) // execute once initialization finished :WARNING hooks can to be not initialized
|
||||||
{
|
{
|
||||||
logger(DEBUG, _("Oneshot part of loop"), __FILE__ . ":" . __LINE__, false);
|
logger(DEBUG, _("Oneshot part of loop"), __FILE__ . ":" . __LINE__, false);
|
||||||
|
|
||||||
$oneshot = true;
|
$oneshot = true;
|
||||||
}
|
}
|
||||||
if($hooksInitialized == 0) // all hooks are not initialized
|
if($hooksInitialized == 0) // all hooks are not initialized
|
||||||
{
|
{
|
||||||
$i = 1;
|
//$i = 1;
|
||||||
foreach($hooks as $hookName => $hook)
|
foreach($hooks as $hookName => $hook)
|
||||||
{
|
{
|
||||||
if ($hook->initialized === false)
|
if ($hook->initialized === false)
|
||||||
@ -288,6 +293,7 @@ while (true)
|
|||||||
{
|
{
|
||||||
logger(DEBUG, _("All hooks initialized"), __FILE__ . ":" . __LINE__);
|
logger(DEBUG, _("All hooks initialized"), __FILE__ . ":" . __LINE__);
|
||||||
$flagHooks = true;
|
$flagHooks = true;
|
||||||
|
getDevicesValues();exit (0);
|
||||||
}
|
}
|
||||||
checkEvents();
|
checkEvents();
|
||||||
askWebServer($read);
|
askWebServer($read);
|
||||||
|
@ -15,6 +15,7 @@ $callback = function($topic, $message)
|
|||||||
$topics[$topic[0]]->devices = json_decode($message->payload);
|
$topics[$topic[0]]->devices = json_decode($message->payload);
|
||||||
fwrite($logFh, var_export($topics[$topic[0]]->devices, true));
|
fwrite($logFh, var_export($topics[$topic[0]]->devices, true));
|
||||||
mkDevicesDB($topic[0], $topics[$topic[0]]->devices);
|
mkDevicesDB($topic[0], $topics[$topic[0]]->devices);
|
||||||
|
getDevicesValues($topic[0]);
|
||||||
break;
|
break;
|
||||||
case "groups":
|
case "groups":
|
||||||
logger(DEBUG,_("Inserting zigbee groups in DB"), __FILE__ . ":" . __LINE__);
|
logger(DEBUG,_("Inserting zigbee groups in DB"), __FILE__ . ":" . __LINE__);
|
||||||
|
200
webserver.php
200
webserver.php
@ -4,17 +4,147 @@
|
|||||||
set_time_limit(0);
|
set_time_limit(0);
|
||||||
ob_implicit_flush();
|
ob_implicit_flush();
|
||||||
|
|
||||||
|
|
||||||
$error_message = null;
|
$error_message = null;
|
||||||
$error_code = null;
|
$error_code = null;
|
||||||
$listenHost = "0.0.0.0";
|
$listenHost = "0.0.0.0";
|
||||||
$listenPort = 1025;
|
$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);
|
$socket = stream_socket_server("tcp://" . $listenHost . ":" . $listenPort, $error_code, $error_message) or logger(ERROR, _("Could not create socket") . EOL);
|
||||||
stream_set_blocking($socket, false);
|
stream_set_blocking($socket, false);
|
||||||
|
|
||||||
$read = array( $socket );
|
$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)
|
function askWebServer($read)
|
||||||
{
|
{
|
||||||
|
global $topics, $indexDevices, $devices;
|
||||||
$array = array();
|
$array = array();
|
||||||
$argList =array();
|
$argList =array();
|
||||||
|
|
||||||
@ -31,16 +161,32 @@ function askWebServer($read)
|
|||||||
{
|
{
|
||||||
$input = substr($input,5);
|
$input = substr($input,5);
|
||||||
$input = explode(" ", $input); // suppress text
|
$input = explode(" ", $input); // suppress text
|
||||||
$argTmp = explode("&", $input[0]);
|
|
||||||
|
$argTmp = explode("&", urldecode($input[0]));
|
||||||
foreach($argTmp as $tmp)
|
foreach($argTmp as $tmp)
|
||||||
{
|
{
|
||||||
//logger(DEBUG, $tmp, __FILE__ . ":" . __LINE__);
|
logger(DEBUG, $tmp, __FILE__ . ":" . __LINE__);
|
||||||
$argList[strchr($tmp, "=", true)] = substr(strchr($tmp, "="), 1);
|
if(strpos($tmp, "=") === false)
|
||||||
//logger(DEBUG, $argList[0] . " ==========> " . $argList[1]);
|
{
|
||||||
//print_r($array);
|
logger(DEBUG, _("no ="));
|
||||||
//if (isset($array[1])) $argList[$array[0]] = $array[1];
|
$argList[trim($tmp)] = "";
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
$argList[trim(strchr($tmp, "=", true))] = trim(substr(strchr($tmp, "="), 1));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
logger(DEBUG, print_r($argList, true));
|
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))
|
if(array_key_exists("cmd", $argList))
|
||||||
{
|
{
|
||||||
$command = strtolower($argList["cmd"]);
|
$command = strtolower($argList["cmd"]);
|
||||||
@ -51,25 +197,29 @@ function askWebServer($read)
|
|||||||
logger(DEBUG, _("GET reached"), __FILE__ . ":" . __LINE__);
|
logger(DEBUG, _("GET reached"), __FILE__ . ":" . __LINE__);
|
||||||
if(!array_key_exists("topic", $argList) or !array_key_exists("fn", $argList) or !array_key_exists("property", $argList))
|
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
|
}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"];
|
$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;
|
break;
|
||||||
case "set":
|
case "set":
|
||||||
logger(DEBUG, _("SET reached"), __FILE__ . ":" . __LINE__);
|
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))
|
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>";
|
$response = "SET: " . _("no parameters passed, need topic, fn, property and value") . "passed";
|
||||||
fwrite($spawn, $response);
|
htmlSend($spawn, $response);
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
$response = "<html><header></header><body>setting property " . $argList["property"] . " of " . $argList["fn"] . " to value: " . $argList["value"] . "</body></html>";
|
$response = "setting property " . $argList["property"] . " of " . $argList["fn"] . " to value: " . $argList["value"];
|
||||||
fwrite($spawn, $response);
|
htmlSend($spawn, $response);
|
||||||
$payload = array($argList["property"] => $argList["value"]);
|
$payload = array($argList["property"] => $argList["value"]);
|
||||||
publish(Z2M . "/" . $argList["fn"], $payload);
|
publish(Z2M . "/" . $argList["fn"], $payload);
|
||||||
}
|
}
|
||||||
@ -104,7 +254,7 @@ function askWebServer($read)
|
|||||||
$error = error_get_last();
|
$error = error_get_last();
|
||||||
if($error !== null)
|
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")
|
if ($command === "print")
|
||||||
{
|
{
|
||||||
@ -114,28 +264,32 @@ function askWebServer($read)
|
|||||||
$response = "Dump" . EOL;
|
$response = "Dump" . EOL;
|
||||||
$response .= var_export($var, true);
|
$response .= var_export($var, true);
|
||||||
}
|
}
|
||||||
fwrite($spawn, $response);
|
htmlSend($spawn, $response);
|
||||||
break;
|
break;
|
||||||
case "notify":
|
case "notify":
|
||||||
logger(DEBUG, $command . _(" reached"), __FILE__ . ":" . __LINE__);
|
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))
|
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>";
|
$response = _("Error: With 'notify' command, you need 4 parameters: topic, fn, property, condition, value");
|
||||||
fwrite($spawn, $response);
|
htmlSend($spawn, $response);
|
||||||
}else
|
}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"]);
|
$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));
|
logger(DEBUG, print_r($monitored, true));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
logger(DEBUG, _("unknown command"), __FILE__ . ":" . __LINE__);
|
webBrowse($spawn, $argList);
|
||||||
$response = "<html><header></header><body>" . _("unknown command") . "</body></html>";
|
|
||||||
fwrite($spawn, $response);
|
|
||||||
}
|
}
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
webBrowse($spawn,$argList);
|
||||||
}
|
}
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
webDashboard($spawn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user