Schedules
Schedules are alarm-suppression rules. They never stop detection from running — they only stop the notifier from paging you for matched events during a defined window. The suppressed events are still recorded.
Why schedules
Almost every camera has a "boring" period: staff arriving and leaving, the postman, the cleaner. You don't want to disable detection during those times (if a real intruder comes you still want a recording), but you also don't want your phone buzzing every morning at 8:30.
Anatomy of a schedule
| Field | Required | Purpose |
|---|---|---|
| Cameras | No | Apply to one or more cameras, or leave blank for all cameras |
| Label | No | Apply only to one detection class (e.g. person), or all labels |
| Days of week | Yes | Mon=0 … Sun=6 |
| Start time | Yes | HH:MM 24-hour |
| End time | Yes | HH:MM 24-hour |
| Suppress alarms | Yes | If true, matching events are silenced |
| Note | Yes | A required free-text reason — why this rule exists |
| Enabled | Yes | Master toggle |
| One-time only | No | Delete the schedule automatically after the first matched suppression |
The mandatory note
The note field is required and validated on the server (minimum 3 characters). This is deliberate. Six months from now, looking at a list of schedules, you should be able to read each one and instantly know why it was created. "Cleaner Mondays/Wednesdays — agreed with Sarah" is much more useful than no note at all.
Examples
"Don't ping me about people during business hours at the office"
| Field | Value |
|---|---|
| Camera | Office front door |
| Label | person |
| Days | Mon–Fri (0,1,2,3,4) |
| Start | 08:00 |
| End | 18:30 |
| Suppress | ✓ |
| Note | "Staff hours — Sarah's team works 8:30–17:30 plus arrival/departure margin" |
"Suppress all car detections on the driveway camera at night"
| Field | Value |
|---|---|
| Camera | Driveway |
| Label | car |
| Days | every day |
| Start | 22:00 |
| End | 06:00 |
| Suppress | ✓ |
| Note | "Streetlight headlights from passing traffic on Mill Lane cause false positives at night" |
Creating a schedule
- Schedules in the sidebar.
- Click Add schedule.
- Fill in the fields above. The Note is required.
- Save.
The camera selector is a tag list:
- leave it blank for all cameras
- add one or more cameras as tags
- remove a camera by clicking the small
×on that tag
Existing schedules can also be enabled/disabled directly from the schedules list without deleting them.
Or via the API:
curl -X POST https://cctv.example.com/api/schedules \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"camera_ids":[3,7],"label":"person","days_of_week":[0,1,2,3,4],
"start_time":"08:00","end_time":"18:30","suppress_alarms":true,
"note":"Staff hours — Sarah team","enabled":true,"one_time":false}'
How matching works
When an event fires, the notifier walks every active schedule and checks:
- The schedule's camera list contains the event camera (or the schedule is global)
- The schedule's label matches the event's label (or is null)
- Today's day-of-week is in the schedule's days
- The current time is between start and end
The first matching rule wins and the event is suppressed.
If the matching schedule is marked one-time only, Vistralio deletes it immediately after that suppression is applied.
Permissions
| Action | Permission |
|---|---|
| See schedules | schedules.view |
| Create / edit / delete | schedules.edit |
Related API endpoints
GET /api/schedulesPOST /api/schedulesPATCH /api/schedules/{id}— toggle enabled / disabledDELETE /api/schedules/{id}