SvitloPulse

How it works

From an operator’s page to a status on the map: what we read, what we compute and where we plainly say “we do not know”.

In short

Everything starts with the schedule an operator published. We bring the schedules of different operators into one format, add independent signals (when there are any) and show the result at queue and region level. We cannot see your home and do not pretend to.

Three things to remember: (1) a schedule is a plan, not a guarantee; (2) “No data” means exactly that, not “power on”; (3) one signal from one person changes nothing.

Where schedules come from

Hourly outage schedules are published by distribution system operators: DTEK, CEK and the regional power companies. Our registry has 25 operators. For some we read data directly, for some through open public mirrors and aggregators, and for some there is no usable data: Volyn and Sumy publish a picture, Kirovohrad publishes text in Telegram, Chernivtsi publishes a page without structured data, and for Kherson and Donetsk (DTEK Donetsk networks) there is no schedule at all.

Separately, we read Ukrenergo’s public posts about the grid regime (“state of the power system”, “information about outages”). They show whether emergency outages are in force, when hourly schedules do not apply. The full list and its limits are on the “Data sources” page.

Normalisation

Every operator publishes in its own way: different queue names, different JSON formats, different hour encodings. We reduce everything to one model:

  • Operator and queue: a key like lvivoblenergo:3.2. The usual scheme is 6 queues with 2 subqueues each (12 groups). In Kyiv, DTEK uses its own scheme of up to 60 groups.
  • Intervals: for each day, a list of “off” or “possible” spans. “Possible” is time the operator marks as likely rather than guaranteed.
  • Time: Kyiv time, with daylight saving taken into account.
  • Missing data is a state of its own. With no schedule a queue gets “No data”, not “Power on”. In history, time without data is counted separately and left out of the “power was on” percentage.

We keep the history of schedule versions, so we can show which schedule an operator had published at a given moment and how it changed during the day.

Independent signals

A schedule can diverge from reality: an accident, a change of the operator’s decision, local damage. To notice that, the system accepts several kinds of signals:

  • Sensors. Devices that regularly report being on mains power. When the signal stops, power is probably out. The strongest kind of signal. Anyone can connect their own (a router, Raspberry Pi, ESP32, Home Assistant): here is how. Only an aggregate of five or more sensors of one queue is shown publicly.
  • Resident reports. “Power on” and “Power off” buttons next to a queue. Weaker than sensors and they need several people to agree.
  • Indirect signs. For example, availability of EV chargers or regional internet indicators. They can only nudge the estimate, because many things can change them.

How many of these signals are active in a given region depends on whether sources exist there. Where there are none, the estimate rests on the schedule alone, and we show that through lower confidence.

How signals merge with the schedule

For every queue we compute the probability that power is out. In simplified form:

  1. A starting estimate from the schedule. If the plan says “off”, the outage probability is high; “possible” is about half; “on” is low. With no plan the start is neutral, and slightly higher during an emergency regime.
  2. Fresh signals shift the estimate. “Power off” signals raise it and “power on” signals lower it. Each kind has its own cap on influence: a sensor can move the estimate a lot, an indirect signal only a little.
  3. Old signals fade. A signal weighs less as time passes, and anything older than two hours is ignored.
  4. Duplicates do not multiply. Only the latest signal from each source counts. Ten identical reports do not outweigh a few independent ones, because the influence grows ever more slowly.
  5. A lone resident report is weak. Until at least one more person confirms it, its weight is reduced.

The result is turned into a state: from 70% probability, “Power off”; up to 30%, “Power on”; in between, “Outage possible”. These thresholds and weights are tunable and may change.

What confidence means

Confidence shows how settled the estimate is. It depends on two things: how far the probability is from 50/50 and whether there is independent confirmation. When only the schedule is available, confidence is capped on purpose: without any confirmation we do not treat an estimate as fully reliable. The more independent signals there are, the higher it can go.

There is also a coverage figure: what share of the target number of independent sources we actually have for the queue. It explains why confidence is higher in one region than in another.

How to read “Outage possible”

This state appears when:

  • the operator marked the time as “possible” rather than “off”;
  • or the schedule says one thing and the signals another, and neither side prevails.

In practice: prepare as if power may go out, but do not treat it as a fact. If the status has not changed in a few minutes, look at the restoration time and at how fresh the operator’s data is.

The restoration time is planned. “Expected restoration” is the end of the current interval in the schedule. If an outage is an emergency one or already runs longer than planned, the real time may differ.

Why a status is what it is

Besides the state, every queue has a class: the reason it is in that state.

Planned
The state matches what the operator published.
Emergency
Ukrenergo reports emergency outages and hourly schedules do not apply.
Local
Signals point to an outage the schedule did not foresee.
Unknown
No schedule and no signals. The colour is grey, and that is not “power on”.

What the public sees

So that nobody can single out a particular home or use the map to cause harm:

  • public data is aggregated to queue and region level;
  • signals appear on the map only after a delay of at least 30 minutes and only when at least five independent sources sent them;
  • there are no substation or power line layers;
  • the signal layer has a kill switch and can be turned off at once.

More about the data we store is on the “Privacy” page.

Data freshness

The estimate is recomputed about every 30 seconds, and pages receive updates without a reload. If an operator’s data is older than 45 minutes, the region is marked “stale”. It is not a map error but a warning that the operator has not published anything for a while.

What we do not do

  • We do not promise house-level accuracy. The level is queue and region.
  • We do not show substations, power lines or individual reports.
  • We do not guess: when there is no data, you can see it.
  • We do not replace the operator. SvitloPulse is an independent service, not an official source.