149 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| logger(DEBUG, _("Including class main.php"), __FILE__ . ":" . __LINE__);
 | |
| 
 | |
| class Message
 | |
| {
 | |
| 	public $id;
 | |
| 	public $state = false;
 | |
| 	public $msg;
 | |
| }
 | |
| 
 | |
| class topic {
 | |
| 	public $mid;
 | |
| 	public $status;
 | |
| 	public $info;
 | |
| 	public $devices;
 | |
| 	public $groups;
 | |
| 	public $extensions;
 | |
| 	public $config;
 | |
| 	public $callback;
 | |
| 	public $getOnStart = false;
 | |
| }
 | |
| 
 | |
| class device
 | |
| {
 | |
| 	public $method;    //0 = auto or 1 = manual
 | |
| 	public $topic;
 | |
| 	public $ieeeAddress;
 | |
| 	public $groupID;
 | |
| 	public $friendlyName;
 | |
| 	public $powerSource;
 | |
| 	public $description;
 | |
| 	public $functions;
 | |
| 	public $payload;
 | |
| 	public $availability;
 | |
| 	public $toConfirm;
 | |
| 	public $triggerDevice;
 | |
| 	public $properties = array();
 | |
| 
 | |
| 	public function __construct()
 | |
| 	{
 | |
| 		$this->availability = array("value" => null, "functions" => array());
 | |
| 	}
 | |
| 
 | |
| 	public function set($method=0)   //, $event = null)
 | |
| 	{
 | |
| 		$this->method = $method;
 | |
| 		publish($this->topic . "/" . $this->friendlyName, $this->payload, "set");	//, $event);
 | |
| 	}
 | |
| 
 | |
| 	public function get()
 | |
| 	{
 | |
| 		publish($this->topic . "/" . $this->friendlyName, $this->payload, "get");	//, $event);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| class ranges
 | |
| {
 | |
| 	public $start;			//datetime
 | |
| 	public $end;			//datetime
 | |
| }
 | |
| 
 | |
| class event
 | |
| {
 | |
| 	public $ieeeAddress;
 | |
| 	public $topic;
 | |
| 	public $param;
 | |
| 	public $value;
 | |
| 	public $device;
 | |
| 	public $published;
 | |
| 	public $dateTimeEvent;			// datetime : next occurence for recurrent event
 | |
| 	public $startDatetime;
 | |
| 	public $stopDatetime;
 | |
| 	public $recurrenceInterval;		// interval : for recurrent event
 | |
| 	public $exceptionInterval;		// array of object ranges
 | |
| }
 | |
| 
 | |
| class watch
 | |
| {
 | |
| 	public $topic;
 | |
| 	public $property;
 | |
| 	public $PropertyValue;
 | |
| 	public $function;
 | |
| 	public $conditions = array(
 | |
| 		"<", ">", "==", ">=", "<="
 | |
| 		);
 | |
| 	public $acceptedValues = array(
 | |
| 		"ON", "OFF"
 | |
| 		);
 | |
| 	public $condition;
 | |
| 
 | |
| 	public function __construct($topic, $fn, $property, $condition, $value)
 | |
| 	{
 | |
| 		global $conditions, $indexDevices;
 | |
| 		logger(DEBUG, _("New Notification"), __FILE__ . ":" . __LINE__);
 | |
| 		if (($device = getDevice($topic, $fn)) !== false)
 | |
| 		{
 | |
| 			$this->topic = $topic;
 | |
| 			if (array_key_exists($property, $device->properties))
 | |
| 			{
 | |
| 				$this->property = $property;
 | |
| 				if (!is_numeric($value) or array_search($value, $this->acceptedValues) === false)
 | |
| 				{
 | |
| 					logger(ERROR, _("Value is not numeric or not accepted"), __FILE__ . ":" . __LINE__ );
 | |
| 					return false;
 | |
| 				}
 | |
| 				if (array_search($condition, $this->conditions))
 | |
| 				{
 | |
| 					$this->condition = $condition;
 | |
| 					$this->function = '$value ' . $condition . " " . $value . ";";
 | |
| 					logger(DEBUG, _("Test function is ") . $this->function, __FILE__ . ":" . __LINE__ );
 | |
| 				}else
 | |
| 				{
 | |
| 					logger(ERROR, sprintf(_("Condition %s is not one of the permitted : "), $condition) . print_r($conditions, true), __FILE__ . ":" . __LINE__ );
 | |
| 					return false;
 | |
| 				}
 | |
| 				$indexDevices[$device->ieeeAddress]->properties[$property]["functions"][] = array($this,"notifyCallback");
 | |
| 			}else
 | |
| 			{
 | |
| 				logger(ERROR, _("Property do not exists"), __FILE__ . ":" . __LINE__ );
 | |
| 				return false;
 | |
| 			}
 | |
| 		}else
 | |
| 		{
 | |
| 			logger(ERROR, _("Device do not exists"), __FILE__ . ":" . __LINE__ );
 | |
| 			return false;
 | |
| 		}
 | |
| 		logger(DEBUG, var_export($this, true), __FILE__ . ":" . __LINE__ );
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	public function notifyCallback(&$device, $property, $value)
 | |
| 	{
 | |
| 		if (eval($this->function))
 | |
| 		{
 | |
| 			logger(DEBUG, _("notifyCallback"));
 | |
| 			$msg = sprintf(_("Device '%s' have property '%s' value %s %s %s"), $device->friendlyName, $property, bool2string($value), $this->condition, bool2string($this->PropertyValue) );
 | |
| 			notify($msg);
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| class interval
 | |
| {
 | |
| 	public $startDate;
 | |
| 	public $endDate;
 | |
| }
 | |
| 
 | |
| ?>
 |