Docs → Schedules

Schedules

Schedules publish an MQTT payload to a topic automatically — on a repeating cron pattern or as a one-shot countdown timer. Water the plants at dawn, cycle a pump every hour, or turn something off after twenty minutes, without touching your phone.

Hobby+ Scheduling is available on the Hobby, Maker, and Pro tiers. See Account & billing for how the tiers compare.

editWhere to set them up

Creating and editing schedules is done in the web app at app.iotparrot.com. On mobile you can view your schedules and toggle them on and off, but building or editing a schedule is web-only.

What a schedule does

A schedule fires by publishing a fixed payload to a topic on a device (and therefore a broker) you pick. It's the same kind of message a dashboard button would send — just triggered by the clock instead of a tap.

device
Which device (and its broker) the schedule publishes through.
topic
The MQTT topic the payload is published to, e.g. home/garden/pump.
payload
The exact message to send when the schedule fires, e.g. ON or {"cmd":"cycle"}.

For example, a schedule on home/garden/pump that publishes ON at 06:00 each morning starts your irrigation loop; a second schedule publishing OFF at 06:15 stops it.

Recurring schedules vs. timers

There are two kinds of schedule, and you choose which one you're creating up front.

Recurring schedule

A recurring schedule runs on a repeating pattern defined by a cron expression — every day at a set time, certain weekdays, hourly, and so on. It keeps firing until you disable or delete it. This is the right choice for anything that should happen again and again.

Timer

A timer is a one-shot countdown. You set a timerDurationMinutes between 1 and 1440 (up to 24 hours); the timer fires once when the countdown reaches zero, then it's done. You start and cancel timers from the app. Reach for a timer when you want something to happen a fixed amount of time from now — "turn the heater off in 30 minutes" — rather than on a calendar pattern.

lightbulbWhich one do I want?

If the answer to "when should this happen?" is a clock time or a repeating day pattern, use a recurring schedule. If it's "a set number of minutes from when I press start," use a timer.

Simple vs. advanced (cron) mode

Recurring schedules can be authored two ways. You never have to learn cron unless you want to.

Simple mode

Pick a time of day and choose which days it repeats using the Mon–Sun day chips, or select One-Time for a single run. The app takes your local wall-clock time and converts it into the correct UTC cron expression for you automatically — so 8:00 AM in your timezone stays 8:00 AM, no math required.

Advanced mode

Hobby+ Advanced mode lets you type a raw cron expression directly, for patterns the simple picker can't express (every 15 minutes, the first of the month, and so on). One important difference: an advanced cron expression is interpreted in UTC, not your local time. The app labels the field to remind you, so convert your intended local time to UTC before entering it.

Understanding the 5 cron fields

A cron expression is five space-separated fields that describe when to fire. From left to right:

┌──────────── minute       (0-59)
│ ┌────────── hour         (0-23)
│ │ ┌──────── day of month (1-31)
│ │ │ ┌────── month        (1-12)
│ │ │ │ ┌──── day of week   (0-6, 0 = Sunday)
│ │ │ │ │
* * * * *

An asterisk * means "every value" for that field. So 0 8 * * * reads as "at minute 0 of hour 8, every day of every month, on any weekday" — i.e. 08:00 UTC daily. A few more examples:

  • 30 6 * * * — every day at 06:30 UTC.
  • 0 * * * * — at the top of every hour.
  • */15 * * * * — every 15 minutes.
  • 0 22 * * 1-5 — 22:00 UTC, Monday through Friday.

Remember these times are UTC — see below for why that matters.

UTC storage and daylight saving

Every schedule is stored and evaluated in UTC. A background dispatcher runs once a minute, checks which schedules are due, and publishes their payloads. Fires land within the correct minute, though they may be a few seconds off the exact top of the minute — this is normal and nothing to worry about for typical automation.

warningDaylight saving time shifts your fire time

Because schedules are anchored to UTC, they do not automatically follow your local clock across a daylight-saving change. After your region springs forward or falls back, a schedule that fired at 8:00 AM local will now fire an hour off. To keep the same local wall-clock time, edit the schedule after the DST change (re-picking the time in simple mode is the easiest fix). Timers are unaffected — they count real minutes from when you start them.

Execution caps & limits

When you save a recurring schedule, the app computes how many times its cron expression will fire in a single day and blocks the save if that exceeds your tier's daily execution cap. This keeps a runaway expression like * * * * * (1,440 fires/day) from quietly hammering your broker.

TierSchedulesExecutions / day
Free00
Hobby512
Maker2548
Pro100288

The execution cap is per-schedule: for example on Hobby, 0 8 * * * (once a day) saves fine, but 0 * * * * (24 times a day) exceeds the 12/day cap and is rejected. If you hit a limit, either widen the interval or upgrade — see Account & billing and Pricing.

infoPair it with confirmations

Because a schedule publishes just like any other command, a device that reports back on a confirmation topic will still surface its result. See Devices for action confirmation, and Dashboards & widgets for building the manual controls that sit alongside your automation.