added notify command to webserver
This commit is contained in:
		@@ -73,6 +73,53 @@ class event
 | 
			
		||||
	public $exceptionInterval;		// array of object ranges
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class watch
 | 
			
		||||
{
 | 
			
		||||
	public $topic;
 | 
			
		||||
	public $property;
 | 
			
		||||
	public $device;
 | 
			
		||||
	public $function;
 | 
			
		||||
	private $conditions = array(
 | 
			
		||||
		"<", ">", "==", ">=", "<="
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
	public function __construct($topic, $fn, $property, $condition, $value)
 | 
			
		||||
	{
 | 
			
		||||
		logger(DEBUG, _("New Notify object"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
		if (($this->device = getDevice($topic, $fn)) === false)
 | 
			
		||||
		{
 | 
			
		||||
			$this->topic = $topic;
 | 
			
		||||
			if (array_key_exist($property, $this->device))
 | 
			
		||||
			{
 | 
			
		||||
				$this->property = $property;
 | 
			
		||||
				if ( !is_numeric($value))
 | 
			
		||||
				{
 | 
			
		||||
					logger(ERROR, _("Value is not numeric"), __FILE__ . ":" . __LINE__ );
 | 
			
		||||
					return false;
 | 
			
		||||
				}
 | 
			
		||||
				if (array_search($condition, $conditions))
 | 
			
		||||
				{
 | 
			
		||||
					$this->function = '$arg ' . $condition . " " . $value;
 | 
			
		||||
					logger(DEBUG, _("Test function is ") . $this->function);
 | 
			
		||||
				}else
 | 
			
		||||
				{
 | 
			
		||||
					logger(ERROR, _("Condition is not one of the permitted once"), __FILE__ . ":" . __LINE__ );
 | 
			
		||||
					return false;
 | 
			
		||||
				}
 | 
			
		||||
			}else
 | 
			
		||||
			{
 | 
			
		||||
				logger(ERROR, _("Property do not exists"), __FILE__ . ":" . __LINE__ );
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
		}else
 | 
			
		||||
		{
 | 
			
		||||
			logger(ERROR, _("Device do not exists"), __FILE__ . ":" . __LINE__ );
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		return $this;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class interval
 | 
			
		||||
{
 | 
			
		||||
	public $startDate;
 | 
			
		||||
 
 | 
			
		||||
@@ -125,7 +125,7 @@ function changeDevice($topic, $fn, &$device, $payloadArray)
 | 
			
		||||
		iterateDevice($topic, $fn, $device, $device, $payloadArray);
 | 
			
		||||
	}else
 | 
			
		||||
	{
 | 
			
		||||
		logger(ERROR, _("payloadArray is empty!"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
		logger(ERROR, $fn . _(" => payloadArray is empty!"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,7 @@ class rdc_sdb_eclairage extends hook
 | 
			
		||||
	// devicelist[$ieeAddress][0] => property to watch
 | 
			
		||||
	// devicelist[$ieeAddress][1] => initialized = true
 | 
			
		||||
	protected $devicelist = array(
 | 
			
		||||
		RDC_SDB_DOUCHE_MVMT => array("occupancy", false),
 | 
			
		||||
		//RDC_SDB_DOUCHE_MVMT => array("occupancy", false),
 | 
			
		||||
		RDC_SDB_PLAFOND_MVMT => array("occupancy", false),
 | 
			
		||||
		RDC_SDB_MVMT => array("occupancy", false),
 | 
			
		||||
		RDC_SDB_WC_ECLAIRAGE => array("state_l1", false)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								moha.php
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								moha.php
									
									
									
									
									
								
							@@ -23,6 +23,7 @@ $hooksList = array();			// list of hooks to be included
 | 
			
		||||
$hooks = array();				// array of hooks
 | 
			
		||||
$notificationMethods = array();	// array of notification methods objects
 | 
			
		||||
$events = array();				// list of event objects
 | 
			
		||||
$monitored = array();			// list of device to watch
 | 
			
		||||
$changed = array();				// list of changed devices
 | 
			
		||||
$dbInit = 0;					// flag to indicate that devices db is initializedl
 | 
			
		||||
$connected = false;				// connected to MQTT server
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										26
									
								
								utils.php
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								utils.php
									
									
									
									
									
								
							@@ -41,6 +41,32 @@ function mktopic($device)
 | 
			
		||||
	return $device->topic . "/" . $device->friendlyName;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function getDevice($topic, $fn)
 | 
			
		||||
{
 | 
			
		||||
	global $topics, $devices;
 | 
			
		||||
	if (array_key_exists($topic, $topics))
 | 
			
		||||
	{
 | 
			
		||||
		$var = $devices[$topic];
 | 
			
		||||
		$path = explode("/", $fn);
 | 
			
		||||
		foreach($path as $tmp)
 | 
			
		||||
		{
 | 
			
		||||
			if (array_key_exists($tmp, $var))
 | 
			
		||||
			{
 | 
			
		||||
				$var = $var[$tmp];
 | 
			
		||||
			}else
 | 
			
		||||
			{
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
		return $var;
 | 
			
		||||
	}else
 | 
			
		||||
	{
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function getValue($ieeeAddress, $property)
 | 
			
		||||
{
 | 
			
		||||
	global $indexDevices;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								watch.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								watch.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
<?php
 | 
			
		||||
function watch($topic, $fn, $property, $function)
 | 
			
		||||
{
 | 
			
		||||
	global $monitored;
 | 
			
		||||
	$monitored[] = new watch($topic, $fn, $property, $function);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
?>
 | 
			
		||||
@@ -72,12 +72,7 @@ function askWebServer($read)
 | 
			
		||||
							{
 | 
			
		||||
								if(!empty($topic))
 | 
			
		||||
								{
 | 
			
		||||
									$var = $var[$topic];
 | 
			
		||||
									$path = explode("/", $argList["fn"]);
 | 
			
		||||
									foreach($path as $tmp)
 | 
			
		||||
									{
 | 
			
		||||
										$var = $var[$tmp];
 | 
			
		||||
									}
 | 
			
		||||
									$var = getDevice($topic, $argList["fn"]);
 | 
			
		||||
								}else
 | 
			
		||||
								{
 | 
			
		||||
									$str = _("topic is not defining: add &topic=\nThese topics are availables: ");
 | 
			
		||||
@@ -103,6 +98,15 @@ function askWebServer($read)
 | 
			
		||||
							}
 | 
			
		||||
							fwrite($spawn, $response);
 | 
			
		||||
							break;
 | 
			
		||||
						case "notify":
 | 
			
		||||
							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))
 | 
			
		||||
							{
 | 
			
		||||
								fwrite($spawn, _("Error: With 'notify' command, you need 4 parameters: topic, fn, property, condition, value"));
 | 
			
		||||
							}else
 | 
			
		||||
							{
 | 
			
		||||
								$monitored[] = new watch($argList["topic"], $argList["fn"], $argList["property"], $argList["condition"], $argList["value"]);
 | 
			
		||||
							}
 | 
			
		||||
							break;
 | 
			
		||||
						default:
 | 
			
		||||
							logger(DEBUG, _("unknown command"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
							fwrite($spawn, _("unknown command"));
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user