How LPNA (Live Power Network Analyzer) works
LPNA is a live power-network console. Stations out in the field send readings to Node-RED, which keeps the current state of every station and logs the history. That single feed drives both panes: the map draws the live picture, the chart draws the same stations over time.
Readings flow one way:
| LPNA element | What it does |
|---|---|
| Station | Reports its position and live power-network status every 250 ms. Each station is locked to the GPS clock and takes all its measurements against it. The core measurement is the phase difference between the mains voltage zero crossing and the GPS reference clock, plus the power-system frequency and the phase rate of change. |
| Node-RED | Holds the current state, aligns it into frames, pushes it to the map over a socket, and writes it to storage. |
| Map | Shows the current picture, rebuilt once a second. This is the best way I have found to visualise what the LPNA stations measure. |
| Grafana | Reads stored data — phase rate of change and frequency deviation from 50 Hz — and plots any range you choose. |
The 2 Hz frame — why the map draws twice a second
Stations do not all report at the same instant. At the moment of writing, three stations stamp their readings on quarter-second marks and two stamp on half-second marks about 1.75 s later. There is therefore no single moment that contains all five, so the map cannot honestly draw "now".
Instead the renderer closes a frame twice per second:
- It takes the newest station's GPS time as the anchor.
- Every station contributes its closest sample to that anchor, within a 2-second window.
- That aligned set is drawn as one picture, then the process repeats one second later.
- Every station time frame taken into account is based on the GPS time stamp, so that the measurements are synchronized refered to GPS time signal
| Current Setup | Value | Meaning |
|---|---|---|
| Map refresh rate | 0.5 s | How often the map is rebuilt. Samples continue to arrive at 250 ms; they only change the picture twice a second. |
| Map frame window | 2 s | How far from the anchor a reading may be and still count as part of this frame. Two seconds because the network runs two clock phases 1.75 s apart. |
| Skew | ms | The worst offset actually accepted in the frame. Printed on the map. A small skew means the frame is a tight snapshot; a large one means some stations are being read up to that far from the anchor. |
Station layers
Every layer is drawn from the same feed but shows a different quantity. They are independent: switching one off leaves the rest drawn, so you can isolate what you care about.
Each layer is toggled from the map itself. Turn Info on first if you need to identify a station before reading its measurements — the other layers show values, not names.
Reading a station on the map
Each station in the frame draws three things. Together they answer three separate questions.
| Element | Question it answers |
|---|---|
| Black arrow | Where is the phase? The heading is the station's mains phase, 0–360°. Its length is the ring radius, so the tip touches the ring. |
| Ring radius | How far is this station's rate from the others? Bigger ring = bigger deviation from the field mean. Scaled so 10 °/s is full size, with a 60 km floor so a near-flat station still shows. |
| Ring colour | In which direction? Blue = this station turns slower than the field, grey = on the field mean, red = turns faster. |
| Label | CPU ID, phase, phase rate of change, the deviation from the field, the GPS time and the sample offset. Full breakdown below. |
Colour scale
| Colour | Meaning |
|---|---|
| Deep blue | This station is well below the field — its phase is turning slower than its neighbours. |
| Pale blue | Slightly slower than the field. |
| Grey | On the field mean — this station matches the others. |
| Orange | Slightly faster than the field. |
| Red | Well above the field — turning faster than its neighbours. |
The scale is symmetric: the value that paints fully red is the same size as the value that paints fully blue (currently 10 °/s).
What the text on the map says
The station label
One label per station in the frame, placed just above its position:
ID:DC5475D60ADC Ø132° Øroc +137.1 <field 3.42 t=22:02:46.500 dt=250ms
| Field | Meaning |
|---|---|
ID:(DC5475D60ADC) | The station's CPU ID — the same identifier the firmware reports and the one used in the Grafana chart. |
ΔF:(-22mHz) | The station's power system frequency deviation in [mHz] compared to the GPS reference fundamental 50Hz frequency clock |
Ø(132°) | The mains phase at this station, in degrees, against the GPS clock. |
Øroc (+137.1) | The phase rate of change, in degrees per second. The sign tells you the direction the phase is moving. |
<field (3.42) | How far this station's phase rate of change sits from the mean of the other stations in the frame. >field means it is above the mean, <field below it. This is the number the station ring size and colour are built from.Say the five stations report Øroc of +137.1, +140.0, +134.5, +138.2, +136.0. The mean is about +137.2. Then:Station Øroc Its deviation Printed as (A +137.1 −0.1 <field 0.10) , (B +140.0 +2.8 >field 2.80), (C +134.5 −2.7 <field 2.70). Station B is turning faster than the rest of the network, C slower. Why it matters? That deviation is the single number the whole visualisation is built on. It sets: the ring radius — bigger ring = bigger deviation the ring colour — blue if below the field, red if above, grey if on it the line directions to other stations the entry for that station in the frame label So the label text is telling you, in words, the same thing the ring is telling you in size and colour. |
t=(22:02:46.500) | The GPS timestamp of the reading used for this station in this frame. |
dt=(250ms) | How far that reading sits from the frame anchor. Smaller is better; large values mean this station's sample came from a different moment than the anchor. |
The frame label
One label for the whole picture, below the cluster of stations:
WAVE FRAME t=22:02:46.500 n=5/5 skew≤1750ms mean Øroc +12.40°/s followed by every station's ID:... rate >f deviation.
| Field | Meaning |
|---|---|
t= | The frame anchor time — the GPS instant this picture represents. |
n=5/5 | How many stations made it into the frame, out of how many are being tracked. 4/5 means one station had no reading close enough to the anchor and is missing from this picture. |
skew≤ | The worst offset any station in this frame had to accept, in milliseconds. See the frame section above. |
mean Øroc | The mean rate of change across the frame. This is the field reference every deviation is measured against. |
n count falls and its markers disappear until it reports a reading close enough to the anchor again. Its ring and arrow vanish with it — check Stations Info to confirm the station itself is still reporting.
Wave pairs
Station Wave Pairs is the one layer that is about two stations rather than one. Each line links two stations in the same frame and describes the rate gradient between them.
- Direction — the line is always drawn from the station with the higher rate of change to the station with the lower one, with an arrowhead at the slower end. It shows where the network is turning faster than where it is turning slower.
- Thickness — how big that difference is. A heavy line is a steep gradient; a thin one is almost none.
- Colour — the same gradient ramp, so a line into a red station reads as a step up and a line into a blue station as a step down.
- A line appearing or disappearing means the two stations were in the same frame or not — not that either station stopped reporting.
Map buttons
| Control | What it does |
|---|---|
| Zoom | Mouse wheel or the + / − buttons. Rings and arrows are drawn in metres and scale with zoom, so zooming out keeps the whole cluster readable. |
| Pan | Click and drag the map. Double-click to zoom in on that point. |
| Layer toggles | Switch the station layers on and off individually — see above. |
| Basemap | Switches between street and satellite backgrounds. It changes only what is underneath; station data is unaffected. |
| Fullscreen | Expands the map to the whole browser window. Press Esc to leave it. |
| Scale / attribution | Bottom corner. The scale bar shows distance at the current zoom — useful for judging ring size. |
History on the map
History lets you look at a past period instead of the live picture, and each connected user has their own independent replay.
- History loads a stored range for you alone; other users stay live.
- Earlier / Later step the loaded range backwards or forwards.
- Pause/Play stops and restarts the replay.
- Slower / Faster changes the replay speed.
- Live returns you to the current picture.
- Right-click the map to type an exact start and end time. Your last choice is remembered and prefilled next time.
History is capped at a two-hour window per load. While a replay is running the map is a recording, not live — new readings keep arriving but are not drawn until you go back to Live.
The Grafana chart
The chart pane plots the same stations from stored history rather than the live feed.
What it plots
- Time along the bottom, in your browser's timezone.
- The value up the side — phase rate of change, and frequency deviation from 50 Hz.
- One line per series, so you can compare stations against each other or against a threshold.
- Refresh on a short interval, so the right-hand edge keeps up with now.
Reading it
- A gap is missing data, not a zero.
- A flat line is a station reporting an unchanged value.
- A step is a real change between two readings.
- The chart is per station. The map's field-mean comparison is a network-wide calculation and has no single line on the chart.
Hovering a line shows the exact value and time. Use the panel's time picker to set the range — the default window is short, so widen it for anything historical.
allow_embedding = true in grafana.ini; nothing on this page can override it.
If something is off
The map has no stations
- No station has reported yet in this session.
- The map's socket dropped after loading — reload the page to reconnect.
- A layer you need is switched off.
- The renderer's output is not wired to the map node — only one renderer should feed the map.
Only some stations appear
- They are outside the current frame: their newest reading is more than 2 s from the anchor. The
n=count on the frame label tells you how many made it. - They have stopped reporting — check Stations Info.
Everything is one colour
- All stations sitting at full red or full blue means their differences exceed the colour scale. Everything grey means they are closer together than the scale. The scale is a single setting; the frame label prints each station's deviation so you can see which it is.
The chart is stale or empty
- The time window is pinned to a fixed range instead of a relative one.
- The refresh interval is longer than you expect.
- Storage has no rows for that station in that range.
The panes disagree
- Expected within a refresh interval. Beyond that, check the chart's time range before assuming a fault.
Copyright
- (c) 2026 ivanspirit@yahoo.com
- Ivan R. Spiridonov
- I'm looking for volunteers and enthusiasts from different European countries to install a station at their homes and help expand our monitoring network.