$event) { if (!empty($event->startDatetime)) { if($event->dateTimeEvent <= now()) { if (!empty($event->exceptionInterval)) { foreach($event->exceptionInterval as $key => $value) { if($datetime("now") >= $value->start and $datetime("now") <= $value->end) { $exception = true; }elseif($datetime("now") >= $value->stop) { unset($event->exceptionInterval[$key]); } } } if ($exception === false) { echo "---->sending command set " . $event->param . "=>" . $event->value . " to " . $event->device->friendlyName . EOL; publish($event->device, array($event->param => $event->value), "set", $key); if (($event->dateTimeEvent->add($event->recurrenceInterval)) === false) { logger(ERROR, _("Error in event recurrence. event: ") . $key); } } } }elseif (!empty($event->dateTimeEvent) and $event->dateTimeEvent <= now()) { echo "---->sending command set " . $event->param . "=>" . $event->value . " to " . $event->device->friendlyName . EOL; $mid = publish($event->device, array($event->param => $event->value), "set", $key); $event->published = now(); //echo "#################################\nUnsetting event $key \n###########################" . EOL; unset($events[$key]); } } //print_r($events); } function setOneshotEvent(&$device, $datetime, $param, $value, $replace=false) { global $events; $events[] = new event; $key = key($events); $events[$key]->dateTimeEvent = new dateTime($datetime); $events[$key]->ieeeAddress = $device->ieeeAddress; $events[$key]->topic = $device->topic; $events[$key]->param = $param; $events[$key]->value = $value; $events[$key]->device = & $device; } function setRecurrentEvent(&$device, $param, $value, $startDatetime, $stopDatetime, $hours, $minutes, $seconds, $days, $weeks, $months, $years) { global $events; $string = "P"; if (!empty($years)) $string .= $days . "Y"; if (!empty($months)) $string .= $days . "M"; if (!empty($week)) $string .= $week . "W"; if (!empty($days)) $string .= $days . "D"; $string .= "T"; if (!empty($hours)) $string .= $days . "H"; if (!empty($months)) $string .= $days . "M"; if (!empty($seconds)) $string .= $days . "S"; $event = new event; $event->recurrenceInterval = new DateInterval($string); $event->startDatetime = new datetime($startDatetime); $event->stopDatetime = new datetime($stopDatetime); $event->ieee_address = $device->ieeeAddress; $event->topic = $device->topic; $event->device = & $device; $event->param = $param; $event->value = $value; $event->dateTimeEvent = $event->startDatetime; if (($event->dateTimeEvent->add($event->recurrenceInterval)) === false) { logger(ERROR, _("Error in event recurrence. event: ") . $key); } } function setDelay(&$device, $delay, $unit="second", $param, $value, $replace=false) { global $events; $datetime = new dateTime(); //print_r($datetime); switch($unit) { case "second": $s = "S"; break; case "minute": $s = "M"; break; case "hour": $s = "H"; break; case "day": $s = "D"; break; case "week": $s = "W"; break; case "month": $s = "M"; break; case "year": $s = "Y"; break; } if (empty($s)) { logger(ERROR, _("setDelay error: unit is empty")); } if (($datetime->add(new DateInterval('PT'. $delay . $s))) === false) { logger(ERROR, _("setDelay error: datetime->add")); } //print_r($datetime); if ($replace) { $eventKey = searchEvent($device, $param, $value); if ($eventKey !== false) deleteEvent($eventKey); } //$dt = $datetime->format("Y-m-d\TH:i:s\Z"); $events[] = new event; $key = key($events); $events[$key]->dateTimeEvent = $datetime; $events[$key]->ieeeAddress = $device->ieeeAddress; $events[$key]->topic = $device->topic; $events[$key]->param = $param; $events[$key]->value = $value; $events[$key]->device = & $device; echo "new event"; } function searchEvent($device, $param , $value) { global $events; echo "searching event" . EOL; foreach($events as $key => $event) { //echo "Event : $event => $value" . EOL; //echo "===>";print_r($event); echo EOL; if($event->topic == $device->topic and $event->param == $param and $event->value == $value and $event->ieeeAddress == $device->ieeeAddress) { //echo "==============================\nfound " . $key . "\n=================================" . EOL; return $key; } } return false; } function deleteEvent($eventKey) { global $events; unset ($events[$eventKey]); logger(INFO, _("delete event ") . $eventKey); } ?>