628 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			628 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
require_once "events.php";
 | 
						|
 | 
						|
function apiDashboard($socket, $n="Général")
 | 
						|
{
 | 
						|
	global $dashboards, $indexDevices, $properties2log;
 | 
						|
	require_once "apiserver/javascript.php";
 | 
						|
	logger(DEBUG, _("apiDashboard function"), __FILE__ . ":" . __LINE__);
 | 
						|
	$response = insertJavascript();
 | 
						|
 | 
						|
	if(array_key_exists($n, $dashboards))
 | 
						|
	{
 | 
						|
		foreach ($dashboards[$n] as $array)
 | 
						|
		{
 | 
						|
			if (array_key_exists($array[0], $indexDevices))
 | 
						|
			{
 | 
						|
				$ieeeAddress = $array[0];
 | 
						|
				$device = $indexDevices[$ieeeAddress];
 | 
						|
				$property = $array[1];
 | 
						|
				if (array_key_exists($property, $device->properties))
 | 
						|
				{
 | 
						|
					$propertyObject = $device->properties[$property];
 | 
						|
					$value = $propertyObject["value"];
 | 
						|
					logger(DEBUG, $device->friendlyName . " => " . bool2string(_($value)), __FILE__ . ":" . __LINE__);
 | 
						|
					$response .= $device->friendlyName . aliases($device->friendlyName, $property) . ' => ';
 | 
						|
					if (array_key_exists("access", $propertyObject))
 | 
						|
					{
 | 
						|
						logger(DEBUG, _("Access = ") . $propertyObject["access"], __FILE__ . ":" . __LINE__);
 | 
						|
						if(($propertyObject["access"] & 2))
 | 
						|
						{
 | 
						|
							logger(DEBUG, _("Write Access OK ") . ($propertyObject["access"] & 2), __FILE__ . ":" . __LINE__);
 | 
						|
							$response .= "     " . displayChoice($device, $property, $value);
 | 
						|
							$response .= "   " . displayMethod($device, $property) . EOL;
 | 
						|
						}
 | 
						|
						if(($propertyObject["access"] & 4))
 | 
						|
						{
 | 
						|
							logger(DEBUG, _("can get value") . ($propertyObject["access"] & 4), __FILE__ . ":" . __LINE__);
 | 
						|
							$response .= '<input type="button" id="' . $device->topic ."/" .  $device->friendlyName . "/" . $propertyObject["name"] . '" value="'  . _("Update") . "\" onmouseup=\"getPropertyValue('" . $device->topic . "','" . $device->friendlyName . "','" . $propertyObject["name"] . "')\">" . EOL;
 | 
						|
						}else
 | 
						|
						{
 | 
						|
							$response .= $value;
 | 
						|
						}
 | 
						|
 | 
						|
						//$response .= EOLH;
 | 
						|
					}else
 | 
						|
					{
 | 
						|
						$response .= bool2string(_($value));
 | 
						|
						if(array_key_exists("unit", $propertyObject))
 | 
						|
						{
 | 
						|
							$response .= $propertyObject["unit"];
 | 
						|
							logger(DEBUG, _("unit = ") . $unit, __FILE__ . ":" . __LINE__);
 | 
						|
						}
 | 
						|
					}
 | 
						|
					if (array_key_exists($property, $properties2log))
 | 
						|
					{
 | 
						|
						$response .= '  <a href="http://192.168.1.253/moha/intervalDate.php?device=' . $ieeeAddress . '%7C' . $device->friendlyName . '%7C' . $property . '">Stats</a>';
 | 
						|
					}
 | 
						|
				}else
 | 
						|
				{
 | 
						|
					logger(ERROR, _("Property does not exists"), __FILE__ . ":" . __LINE__);
 | 
						|
				}
 | 
						|
			}else
 | 
						|
			{
 | 
						|
				logger(ERROR, _("Device does not exists"), __FILE__ . ":" . __LINE__);
 | 
						|
			}
 | 
						|
			$response .= EOLH;
 | 
						|
		}
 | 
						|
	}else
 | 
						|
	{
 | 
						|
		logger(ERROR, _("Dashboard does not exists"), __FILE__ . ":" . __LINE__);
 | 
						|
		$response = _("dashboard not found");
 | 
						|
	}
 | 
						|
	htmlSend($socket, $response, '<meta http-equiv="refresh" content="10">');
 | 
						|
}
 | 
						|
 | 
						|
function displayChoice($device, $propertyName, $value)
 | 
						|
{
 | 
						|
	logger(DEBUG, _("function displayChoice"), __FILE__ . ":" . __LINE__);
 | 
						|
	$propertyObject = $device->properties[$propertyName];
 | 
						|
	$unit = '';
 | 
						|
 | 
						|
	if(array_key_exists("unit", $propertyObject))
 | 
						|
	{
 | 
						|
		$unit = $propertyObject["unit"];
 | 
						|
		logger(DEBUG, _("unit = ") . $unit, __FILE__ . ":" . __LINE__);
 | 
						|
	}
 | 
						|
	if (!array_key_exists("type", $propertyObject))		return "";
 | 
						|
	switch ($propertyObject["type"])
 | 
						|
	{
 | 
						|
		case "binary":
 | 
						|
			logger(DEBUG, _("type is binary"), __FILE__ . ":" . __LINE__);
 | 
						|
			$formHTML = bool2string($value);
 | 
						|
			$choice["on"] = $propertyObject["value_on"];
 | 
						|
			$choice["off"] = $propertyObject["value_off"];
 | 
						|
			if (array_key_exists("toggle", $propertyObject))
 | 
						|
			{
 | 
						|
				$choice["toggle"] = $propertyObject["toggle"];
 | 
						|
			}
 | 
						|
			$formHTML .= mkHTML($device, $propertyName, $choice);
 | 
						|
			break;
 | 
						|
		case "numeric":
 | 
						|
			logger(DEBUG, _("type is numeric") . "#" . $value . "#", __FILE__ . ":" . __LINE__);
 | 
						|
			$step = '';
 | 
						|
			if (array_key_exists("value_step", $propertyObject))
 | 
						|
			{
 | 
						|
				$step = ' step="' . $propertyObject["value_step"] . '"';
 | 
						|
			}
 | 
						|
			//$formHTML .= $device->friendlyName . aliases($device->friendlyName, $property) . ' => ';
 | 
						|
			$formHTML = '<input type="number" id="' . $device->topic . "/"
 | 
						|
					.  $device->friendlyName . "/"
 | 
						|
					. $propertyObject["name"] . '"'
 | 
						|
					. ' min="' . $propertyObject["value_min"] . '"'
 | 
						|
					. ' max="' . $propertyObject["value_max"] . '"'
 | 
						|
					. $step
 | 
						|
					. ' value="' . $value .  '">' . $unit . EOL;
 | 
						|
			$formHTML .= '<input type="range" id="' . $device->topic . "/" . $device->friendlyName . "/" . $propertyObject["name"] . '"';
 | 
						|
			$formHTML .= ' name="' . $propertyObject["name"] . '"';
 | 
						|
			$formHTML .= ' min="' . $propertyObject["value_min"] . '"';
 | 
						|
			$formHTML .= ' max="' . $propertyObject["value_max"] . '"';
 | 
						|
			$formHTML .= ' value="' . $propertyObject["value"] . '"';
 | 
						|
			$formHTML .= $step;
 | 
						|
			$formHTML .= " oninput=\"setPropertyNumberValue('" . $device->topic . "', '" .  $device->friendlyName . "', this.value, '" . $propertyObject["name"] . "')\">";
 | 
						|
			break;
 | 
						|
		case "enum":
 | 
						|
			logger(DEBUG, _("type is enum"), __FILE__ . ":" . __LINE__);
 | 
						|
			$formHTML = bool2string($value);
 | 
						|
			$choice = $propertyObject["values"];
 | 
						|
			$formHTML .= mkHTML($device, $propertyName, $choice);
 | 
						|
			break;
 | 
						|
		default:
 | 
						|
			logger(DEBUG, "type of property not recognized:" . $propertyObject["type"] , __FILE__ . ":" . __LINE__);
 | 
						|
			break;
 | 
						|
	}
 | 
						|
 | 
						|
	return $formHTML;
 | 
						|
}
 | 
						|
 | 
						|
function displayMethod($device, $propertyName)
 | 
						|
{
 | 
						|
	$html = '<input type="button" id="' . $device->topic ."/" .  $device->friendlyName . "/" . $propertyName . '" method="'  . IDLE . "\" onmouseup=\"setPropertyMethod('" . $device->topic . "', '" . $device->friendlyName . "', '" . IDLE . "', '" . $propertyName . "')\">";
 | 
						|
	$html = '<input type="button" id="' . $device->topic ."/" .  $device->friendlyName . "/" . $propertyName . "/" . '" method="'  . AUTO . "\" onmouseup=\"setPropertyMethod('" . $device->topic . "', '" . $device->friendlyName . "', '" . AUTO . "', '" . $propertyName . "')\">";
 | 
						|
	$html = '<input type="button" id="' . $device->topic ."/" .  $device->friendlyName . "/" . $propertyName . "/" . '" method="'  . MANUAL . "\" onmouseup=\"setPropertyMethod('" . $device->topic . "', '" . $device->friendlyName . "', '" . MANUAL . "', '" . $propertyName . "')\">";
 | 
						|
}
 | 
						|
 | 
						|
function mkHTML($device, $propertyName, $choice)
 | 
						|
{
 | 
						|
	$html = "";
 | 
						|
	logger(DEBUG, "function mkHTML", __FILE__ . ":" . __LINE__);
 | 
						|
	foreach ($choice as $key => $value)
 | 
						|
	{
 | 
						|
		$html .= '<input type="button" id="' . $device->topic ."/" .  $device->friendlyName . "/" . $propertyName . "/" . strtolower($value) . '" value="'  . $value . "\" onmouseup=\"setPropertyValue('" . $device->topic . "', '" . $device->friendlyName . "', '" . $value . "', '" . $propertyName . "')\">";
 | 
						|
	}
 | 
						|
	return $html;
 | 
						|
}
 | 
						|
 | 
						|
function apiBrowse($socket, $argList, $page="/browse")
 | 
						|
{
 | 
						|
	global $topics, $devices, $listenPort,$indexDevices;
 | 
						|
	logger(INFO, _("Generic response to choose device and property"), __FILE__ . ":" . __LINE__);
 | 
						|
	//$response = "<html><header></header><body>" . _("unknown command") .  "</body></html>";
 | 
						|
	$response = "";
 | 
						|
	$flag = false;
 | 
						|
	$tab = "";
 | 
						|
 | 
						|
	if (array_key_exists("topic", $argList))
 | 
						|
	{
 | 
						|
		if (array_key_exists($argList["topic"], $topics))
 | 
						|
		{
 | 
						|
			logger(DEBUG, _("Topic exists: ") . $argList["topic"] , __FILE__ . ":" . __LINE__);
 | 
						|
			$topicRef = '<a href="/browse&topic=' . htmlentities($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"]];
 | 
						|
 | 
						|
				//var_dump($fnArray);
 | 
						|
				foreach($fnArray as $value)
 | 
						|
				{
 | 
						|
					if ($flag) $fn .= "/";
 | 
						|
					$fn .= $value;
 | 
						|
					if (!array_key_exists($value, $device))
 | 
						|
					{
 | 
						|
						htmlSend($socket, sprintf(_('"%s" does not exists'),  $value));
 | 
						|
						return false;
 | 
						|
					}
 | 
						|
					$device = $device[$value];
 | 
						|
					$flag = true;
 | 
						|
				}
 | 
						|
				//var_dump($device);
 | 
						|
				if (array_key_exists("device", $device))  // TODO
 | 
						|
				{
 | 
						|
					$device = $device["device"];
 | 
						|
					$fn .= "device/" . $fn;
 | 
						|
				}
 | 
						|
 | 
						|
				if (is_a($device, "device"))
 | 
						|
				{
 | 
						|
					require_once "apiserver/javascript.php";
 | 
						|
					$response .= insertJavascript();
 | 
						|
 | 
						|
					foreach($device->properties as $key => $value)
 | 
						|
					{
 | 
						|
						$response = displayProperty($device, $key, $value, $response);
 | 
						|
					}
 | 
						|
					/*foreach($device->properties as $key => $value)
 | 
						|
					{
 | 
						|
						$response = value($key, $value, $response);
 | 
						|
					}*/
 | 
						|
				}else
 | 
						|
				{
 | 
						|
					foreach($device as $key => $value)
 | 
						|
					{
 | 
						|
						$response .= $topicRef . htmlentities("&fn=" . $fn . "/" . $key) . '">' . $key . "</a><br>\n";
 | 
						|
					}
 | 
						|
				}
 | 
						|
				//logger(DEBUG, _("response: ") . EOL . $response , __FILE__ . ":" . __LINE__);
 | 
						|
				//htmlSend($socket, $response);
 | 
						|
			}else
 | 
						|
			{
 | 
						|
				logger(DEBUG, _("no FriendlyName given"), __FILE__ . ":" . __LINE__);
 | 
						|
				if (empty($devices[$argList["topic"]]))
 | 
						|
				{
 | 
						|
					$response .= _("No devices yet found");
 | 
						|
				}else
 | 
						|
				{
 | 
						|
					foreach($devices[$argList["topic"]] as $key => $value)
 | 
						|
					{
 | 
						|
						//print "key = " . print_r($key, true) . " value = " . print_r($value, true) . EOL;
 | 
						|
						logger(DEBUG, _("devices de topic: ") . $key , __FILE__ . ":" . __LINE__);
 | 
						|
						$response .= $topicRef . htmlentities("&fn=" . $key) . '">' . $key . "</a><br>\n";
 | 
						|
						logger(DEBUG, _("response: ") . $response , __FILE__ . ":" . __LINE__);
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}else
 | 
						|
		{
 | 
						|
			$response = apiListTopics();
 | 
						|
		}
 | 
						|
	}else
 | 
						|
	{
 | 
						|
		$response = apiListTopics();
 | 
						|
	}
 | 
						|
	htmlSend($socket, $response);
 | 
						|
}
 | 
						|
 | 
						|
function displayProperty($device, $key, $value, $response)
 | 
						|
{
 | 
						|
	$tab="";
 | 
						|
	$response .= $key . "     ";
 | 
						|
	if (array_key_exists("access", $value))
 | 
						|
	{
 | 
						|
		if(($value["access"] & 2))
 | 
						|
		{
 | 
						|
			logger(DEBUG, _("Write Access OK: ") . ($value["access"] & 2) . "value:" . $value["value"], __FILE__ . ":" . __LINE__);
 | 
						|
			$response .= displayChoice($device, $key, $value["value"]);
 | 
						|
		}
 | 
						|
		if(($value["access"] & 4))
 | 
						|
		{
 | 
						|
			logger(DEBUG, _("can get value") . ($value["access"] & 4), __FILE__ . ":" . __LINE__);
 | 
						|
			$response .= '     <input type="button" id="' . $device->topic ."/" .  $device->friendlyName . "/" . $key . '" value="'  . _("Update") . "\" onmouseup=\"getPropertyValue('" . $device->topic . "', '" . $device->friendlyName . "', '" . $key . "')\">";
 | 
						|
		}
 | 
						|
	}
 | 
						|
	$response .= "<br>\n" . $tab . "[<br>\n";
 | 
						|
	//echo memory_get_usage();
 | 
						|
	//$response = value($key, $value, $response);
 | 
						|
	iterateProperty($device, $key, $value, $response, $tab);
 | 
						|
	$response .= $tab . "]<br>\n";
 | 
						|
	return $response;
 | 
						|
}
 | 
						|
 | 
						|
function iterateProperty($device, $property, $value, &$response, $tab="")
 | 
						|
{
 | 
						|
	$method = array(1 => "IDLE", "AUTO", "MANUEL");
 | 
						|
	$tab .= "        ";
 | 
						|
	if (is_array($value) or is_object($value))
 | 
						|
	{
 | 
						|
		logger(DEBUG, _("is array"), __FILE__ . ":" . __LINE__ );
 | 
						|
		foreach($value as $key => $value2)
 | 
						|
		{
 | 
						|
			logger(DEBUG, $key, __FILE__ . ":" . __LINE__ );
 | 
						|
			$response .= $tab . $key;
 | 
						|
			if (is_array($value2) or is_object($value2))
 | 
						|
			{
 | 
						|
				$response .= "<br>\n";
 | 
						|
			}else
 | 
						|
			{
 | 
						|
				$response .= " = ";
 | 
						|
			}
 | 
						|
			iterateProperty($device, $key, $value2, $response, $tab);
 | 
						|
		}
 | 
						|
	}else
 | 
						|
	{
 | 
						|
		if ($property == "method")	$value = $method[$value];		//display name of method rather than a number
 | 
						|
		$response .= bool2string($value) . "<br>\n";	//. displayChoice($device, $property);	//value($property, $value, "");
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
function apiListTopics()
 | 
						|
{
 | 
						|
	global $topics;
 | 
						|
	logger(INFO, _("apiListTopics function"), __FILE__ . ":" . __LINE__);
 | 
						|
	$response = "";
 | 
						|
	foreach ($topics as $name => $topic)
 | 
						|
	{
 | 
						|
		$response .= '<a href="/browse&topic=' . $name . '">' . $name ."</a><br>\n";
 | 
						|
	}
 | 
						|
	return $response;
 | 
						|
}
 | 
						|
 | 
						|
function apiGet($argList)
 | 
						|
{
 | 
						|
	if(!array_key_exists("topic", $argList) or !array_key_exists("fn", $argList) or !array_key_exists("property", $argList))
 | 
						|
	{
 | 
						|
		$response = "GET: " . _("no parameters passed, need topic, fn and property");
 | 
						|
	}else
 | 
						|
	{
 | 
						|
		if (($device = getDevice($argList["topic"], $argList["fn"])) === false)
 | 
						|
		{
 | 
						|
			$response = sprintf(_('"%s" or "%s" does not exists'), $argList["topic"], $argList["fn"]);
 | 
						|
		}else
 | 
						|
		{
 | 
						|
			logger(DEBUG, _("Getting "), __FILE__ . ":" . __LINE__ );
 | 
						|
			$property = $argList["property"];
 | 
						|
			$response = "Sending GET command for: " . $argList["topic"] . $argList["fn"];
 | 
						|
			$payload = array($argList["property"] => "");
 | 
						|
			publish($argList["topic"] . "/" . $argList["fn"], $payload, "get");
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return $response;
 | 
						|
}
 | 
						|
 | 
						|
function apiSet($argList)
 | 
						|
{
 | 
						|
	global $indexFriendlyNames, $topics;
 | 
						|
	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($argList["topic"], $topics) )
 | 
						|
		{
 | 
						|
			$response = "SET: " . _("bad parameter passed: topic does not exists") . "<br>\n";
 | 
						|
		}
 | 
						|
		if (!array_key_exists($argList["fn"], $indexFriendlyNames))
 | 
						|
		{
 | 
						|
			$response = "SET: " . _("bad parameter passed: fn does not exists") . "<br>\n";
 | 
						|
		}
 | 
						|
		$response .= "SET: " . _("not all parameters passed, need topic, fn, property and value");
 | 
						|
	}else
 | 
						|
	{
 | 
						|
		$response = "setting property " . $argList["property"] . " of " . $argList["fn"] . " to value: " . $argList["value"];
 | 
						|
		$device = $indexFriendlyNames[$argList["fn"]];
 | 
						|
		$device->payload = array($argList["property"] => $argList["value"]);
 | 
						|
		$device->set($argList["property"], IDLE);
 | 
						|
		publish($argList["topic"] . "/" . $argList["fn"], $device->payload, "set");
 | 
						|
		//removeEvent($indexFriendlyNames($argList["fn"]), $argList["property"], "OFF");
 | 
						|
	}
 | 
						|
	return $response;
 | 
						|
}
 | 
						|
 | 
						|
function apiPrint($argList, $command)
 | 
						|
{
 | 
						|
	global $GLOBALS, $topics;
 | 
						|
	if (array_key_exists($argList["object"], $GLOBALS))
 | 
						|
	{
 | 
						|
		$var = $GLOBALS[$argList["object"]];
 | 
						|
 | 
						|
		if (isset($argList["topic"]))
 | 
						|
		{
 | 
						|
			$topic = $argList["topic"];
 | 
						|
		}
 | 
						|
		if (isset($argList["address"]))
 | 
						|
		{
 | 
						|
			$var = $var[$argList["address"]];
 | 
						|
		}elseif (isset($argList["fn"]))
 | 
						|
		{
 | 
						|
			if(!empty($topic))
 | 
						|
			{
 | 
						|
				$var = getDevice($topic, $argList["fn"]);
 | 
						|
			}else
 | 
						|
			{
 | 
						|
				$str = _("topic is not defining: add &topic=\nThese topics are availables: ");
 | 
						|
				foreach($topics as $key => $value)
 | 
						|
				{
 | 
						|
					$str .= $key . EOL;
 | 
						|
				}
 | 
						|
				logger(ERROR, $str, __FILE__ . ":" . __LINE__);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		$error = error_get_last();
 | 
						|
		if($error !== null)
 | 
						|
		{
 | 
						|
			$response = $error["message"] . " file: " . $error["file"] . " line: " . $error["line"];
 | 
						|
		}
 | 
						|
		if ($command === "print")
 | 
						|
		{
 | 
						|
			$response = "<pre>" . nl2br(print_r($var, true)) . "<pre>";
 | 
						|
		}elseif($command === "dump")
 | 
						|
		{
 | 
						|
			$response = "Dump" . EOL;
 | 
						|
			$response .= "<pre>" . nl2br(var_export($var, true)) . "<pre>";
 | 
						|
		}
 | 
						|
	}else
 | 
						|
	{
 | 
						|
		$response = _("Object do not exists");
 | 
						|
	}
 | 
						|
	return $response;
 | 
						|
}
 | 
						|
 | 
						|
function apiNotify($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 = _("Error: With 'notify' command, you need 5 parameters: topic, fn, property, condition, value");
 | 
						|
	}else
 | 
						|
	{
 | 
						|
		$response = _("notify command have been set");
 | 
						|
		$monitored[] = new watch($argList["topic"], $argList["fn"], $argList["property"], $argList["condition"], $argList["value"]);
 | 
						|
	}
 | 
						|
	return $response;
 | 
						|
}
 | 
						|
 | 
						|
function apiVerbose($argList)
 | 
						|
{
 | 
						|
	global $logLevel, $logLevels;
 | 
						|
	logger(DEBUG, _("apiVerbose function"), __FILE__ . ":" . __LINE__);
 | 
						|
	$response = "";
 | 
						|
	//print_r($argList);
 | 
						|
	foreach ($logLevels as $value => $level)
 | 
						|
	{
 | 
						|
		//print $level . " => " . $value . " ==>" . strtoupper(trim($argList["cmd"])) . EOL;
 | 
						|
		if (strtoupper(trim($argList["verbose"])) == $level)
 | 
						|
		{
 | 
						|
			print "change of " . $level . EOL;
 | 
						|
			$logLevel ^= $value;
 | 
						|
		}
 | 
						|
		if ($logLevel & $value)
 | 
						|
		{
 | 
						|
			$response .= $level . _(" is active") . EOLH;
 | 
						|
		}else
 | 
						|
		{
 | 
						|
			$response .= $level . _(" is inactive") . EOLH;
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return $response;
 | 
						|
}
 | 
						|
 | 
						|
function getFn($argList)
 | 
						|
{
 | 
						|
	global $indexDevices;
 | 
						|
	$jsonArray = array();
 | 
						|
	logger(INFO, _("getFn function"), __FILE__ . ":" . __LINE__);
 | 
						|
 | 
						|
	if (array_key_exists("ieeeAddress", $argList))
 | 
						|
	{
 | 
						|
		logger(DEBUG, "ieeeAddress = " . $argList["ieeeAddress"], __FILE__ . ":" . __LINE__);
 | 
						|
		if (array_key_exists($argList["ieeeAddress"], $indexDevices))
 | 
						|
		{
 | 
						|
			logger(DEBUG, "FriendlyName is " . $indexDevices[$argList["ieeeAddress"]]->friendlyName, __FILE__ . ":" . __LINE__);
 | 
						|
			$response = '["' . $argList["ieeeAddress"] . '":"' . $indexDevices[$argList["ieeeAddress"]]->friendlyName . '"]';
 | 
						|
		}
 | 
						|
	}else
 | 
						|
	{
 | 
						|
		$flag = false;
 | 
						|
		//$response = "{";
 | 
						|
		foreach($indexDevices as $ieeeAddress => $device)
 | 
						|
		{
 | 
						|
			/*if ($flag == false)
 | 
						|
			{
 | 
						|
				$flag = true;
 | 
						|
			}else
 | 
						|
			{
 | 
						|
				$response .= ', ';
 | 
						|
			}
 | 
						|
			*/
 | 
						|
			//$response .= '"' . $ieeeAddress . '" : "' . $indexDevices[$ieeeAddress]->friendlyName . '"';
 | 
						|
			$jsonArray[$ieeeAddress] = $indexDevices[$ieeeAddress]->friendlyName;
 | 
						|
			array_multisort($jsonArray);
 | 
						|
		}
 | 
						|
		$response = json_encode($jsonArray, JSON_UNESCAPED_SLASHES);
 | 
						|
		print $response;
 | 
						|
		//print_r(json_decode($response));
 | 
						|
	}
 | 
						|
	logger(DEBUG, "response = " . $response, __FILE__ . ":" . __LINE__);
 | 
						|
	return $response;
 | 
						|
}
 | 
						|
 | 
						|
function PropertiesDashboard($argList)
 | 
						|
{
 | 
						|
	global $indexProperties;
 | 
						|
	require_once "apiserver/javascript.php";
 | 
						|
	logger(INFO, _("propertiesDashboard function"), __FILE__ . ":" . __LINE__);
 | 
						|
	$response = insertJavascript();
 | 
						|
	$property = $argList["property"];
 | 
						|
	//print_r($indexProperties[$property]);
 | 
						|
	foreach($indexProperties as $propertyName => $index)
 | 
						|
	{
 | 
						|
		if (str_contains($propertyName, $property ))
 | 
						|
		{
 | 
						|
			foreach($index as $device)
 | 
						|
			{
 | 
						|
				$propertyObject = $device->properties[$propertyName];
 | 
						|
				$value = $propertyObject["value"];
 | 
						|
				logger(DEBUG, $device->friendlyName . " => " . bool2string(_($value)), __FILE__ . ":" . __LINE__);
 | 
						|
				$response .= $device->friendlyName . aliases($device->friendlyName, $propertyName) . ' => ';
 | 
						|
				if (array_key_exists("access", $propertyObject))
 | 
						|
				{
 | 
						|
					logger(DEBUG, _("Access = ") . $propertyObject["access"], __FILE__ . ":" . __LINE__);
 | 
						|
					if(($propertyObject["access"] & 2))
 | 
						|
					{
 | 
						|
						logger(DEBUG, _("Write Access OK ") . ($propertyObject["access"] & 2), __FILE__ . ":" . __LINE__);
 | 
						|
						$response .= "     " . displayChoice($device, $propertyName, $value);
 | 
						|
					}
 | 
						|
					if(($propertyObject["access"] & 4))
 | 
						|
					{
 | 
						|
						logger(DEBUG, _("can get value") . ($propertyObject["access"] & 4), __FILE__ . ":" . __LINE__);
 | 
						|
						$response .= '<input type="button" id="' . $device->topic ."/" .  $device->friendlyName . "/" . $propertyObject["name"] . '" value="'  . _("Update") . "\" onmouseup=\"getPropertyValue('" . $device->topic . "','" . $device->friendlyName . "','" . $propertyObject["name"] . "')\">";
 | 
						|
					}else
 | 
						|
					{
 | 
						|
						$response .= bool2string($value);
 | 
						|
					}
 | 
						|
					$response .= EOLH;
 | 
						|
				}else
 | 
						|
				{
 | 
						|
					$response .= bool2string(_($value));
 | 
						|
					if(array_key_exists("unit", $propertyObject))
 | 
						|
					{
 | 
						|
						$response .= $propertyObject["unit"];
 | 
						|
						logger(DEBUG, _("unit = ") . $unit, __FILE__ . ":" . __LINE__);
 | 
						|
					}
 | 
						|
					$response .= EOLH;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return $response;
 | 
						|
}
 | 
						|
 | 
						|
function apiHookActive($argList, $status)
 | 
						|
{
 | 
						|
	global $hooks;
 | 
						|
	if (array_key_exists($argList["hook"], $hooks))
 | 
						|
	{
 | 
						|
		$hooks[$argList["hook"]]->active = $status;
 | 
						|
		if ($status)
 | 
						|
		{
 | 
						|
			return $argList["hook"] . _(" has been enabled");
 | 
						|
		}else
 | 
						|
		{
 | 
						|
			return $argList["hook"] . _(" has been disabled");
 | 
						|
		}
 | 
						|
	}else
 | 
						|
	{
 | 
						|
		return _("Hook does not exists");
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
function deleteDevice($argList)
 | 
						|
{
 | 
						|
	global $indexFriendlyNames;
 | 
						|
	logger(DEBUG, _("removing ") . $indexFriendlyNames[$argList["fn"]]->friendlyname , __FILE__ . ":" . __LINE__);
 | 
						|
	//unset($indexFriendlyNames[$argList["fn"]]);
 | 
						|
}
 | 
						|
/*
 | 
						|
function apiDisplayByType($argList)
 | 
						|
{
 | 
						|
	global $indexTypes, $config;
 | 
						|
	require_once $config . "porpertiesbytype.php";
 | 
						|
	require_once "apiserver/javascript.php";
 | 
						|
 | 
						|
	$response .= insertJavascript();
 | 
						|
	foreach($indexTypes[$argList["type"]] as $device)
 | 
						|
	{
 | 
						|
		foreach($)
 | 
						|
		displayProperty($device, $device->, $value, $response)
 | 
						|
	}
 | 
						|
}
 | 
						|
*/
 | 
						|
 | 
						|
function whoIsPresent($argList)
 | 
						|
{
 | 
						|
	if (array_key_exists("nom", $argList))
 | 
						|
	{
 | 
						|
		$nom = $argList["nom"];
 | 
						|
		$r = isPresent($nom);
 | 
						|
		if ($r)
 | 
						|
		{
 | 
						|
			$r = $nom . _(" est présent") . EOLH;
 | 
						|
			logger(DEBUG, _(" est présent") , __FILE__ . ":" . __LINE__);
 | 
						|
		}elseif(!$r)
 | 
						|
		{
 | 
						|
			$r = $nom . _(" est absent") . EOLH;
 | 
						|
			logger(DEBUG, _("Testing doors") , __FILE__ . ":" . __LINE__);
 | 
						|
		}else
 | 
						|
		{
 | 
						|
			$r = $nom . _(" n'existe pas dans la base de données") . EOLH;
 | 
						|
			logger(DEBUG, _("Testing doors") , __FILE__ . ":" . __LINE__);
 | 
						|
		}
 | 
						|
 | 
						|
	}else
 | 
						|
	{
 | 
						|
		$r = isPresent(false, true);
 | 
						|
		$r = "Sont présent: " . EOLH . $r . EOLH;
 | 
						|
	}
 | 
						|
	return $r;
 | 
						|
}
 | 
						|
 | 
						|
function test()
 | 
						|
{
 | 
						|
	global $hooks;
 | 
						|
	$portes = array();
 | 
						|
	$msg = "";
 | 
						|
 | 
						|
	logger(DEBUG, _("Testing doors") , __FILE__ . ":" . __LINE__);
 | 
						|
	echo "testing doors";
 | 
						|
	$portes = $hooks["test_portes"]->testPortes();
 | 
						|
	if (!empty($portes))
 | 
						|
	{
 | 
						|
		$msg = _("Opened doors:") . EOLH;
 | 
						|
		foreach($portes as $value)
 | 
						|
		{
 | 
						|
			$msg .= $value . EOL;
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return $msg;
 | 
						|
}
 | 
						|
 | 
						|
?>
 |