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; } ?>