node-red-contrib-polygon 0.0.5
Piecewise linear interpolation with up to 20 XY pairs; robust endpoint extrapolation.
node-red-contrib-polygon
Piecewise linear interpolation Node-RED node with up to 20 (X,Y) breakpoint pairs, optional endpoint extrapolation, and strict monotonic X validation.
đ English
What this node does
polygon computes an output value from an input (msg.payload) by linearly interpolating between user-defined breakpoints. It supports 20 (X,Y) rows, each with a Use checkbox to activate the pair. Outside the endpoint range, it can extrapolate or clampâyour choice. Settings persist correctly in the editor.
Key features
- 20 Ă (Use, X, Y) rows in the edit dialog
- Strictly increasing X enforced:
- Editor-side validation blocks saving when used Xâs are not strictly increasing.
- Runtime guard raises alarm if a mismatched flow slips through.
- Endpoint behavior selectable:
- Extrapolate (default ON): linear continuation beyond first/last point.
- Clamp: hold Y at the nearest endpoint.
- Exact-knot handling: if
IN == Xk(within a tiny epsilon), OUT = Yk. - One output:
- OUT â cloned incoming message with computed
msg.payload, plusmsg.trbl_al,msg.n_bp,msg.segment
- OUT â cloned incoming message with computed
- Status text indicators for quick debugging (e.g.,
seg k,extrap,clamped,X order invalid, etc.)
Installation
Install from the Node-RED userDir (usually ~/.node-red, Docker: /data), then restart Node-RED and hard-refresh the editor.
cd ~/.node-red # or: cd /data (Docker)
npm install /path/to/your/node-red-contrib-polygon
node-red-restart
# In browser: Ctrl+F5 to clear cached editor assets
Configuration & algorithm
Let the active (Use â) points be (X1,Y1)âŠ(Xn,Yn), n â„ 2, with strictly increasing X:
- If
INis inside: findkwithXk < IN < Xk+1and computeOUT = Yk + (IN â Xk) * (Yk+1 â Yk) / (Xk+1 â Xk) - If exactly on a knot
IN == Xk(epsilon match):OUT = Yk - If
IN < X1:- Extrapolate ON: use slope of
(X1,Y1)â(X2,Y2) - Extrapolate OFF:
OUT = Y1(clamp)
- Extrapolate ON: use slope of
- If
IN > Xn:- Extrapolate ON: use slope of
(Xnâ1,Ynâ1)â(Xn,Yn) - Extrapolate OFF:
OUT = Yn(clamp)
- Extrapolate ON: use slope of
- Faults (alarm true):
- Not enough points (
n < 2) - X order invalid (
Xk â„ Xk+1among used rows)
- Not enough points (
Outputs
- Output 1 (OUT): computed value in
msg.payload, plus:msg.trbl_alâ boolean: parameter fault occurredmsg.n_bpâ number of active pairsmsg.segmentâ used segment index (-1if clamped/extrapolated/knot)
- Output 2 (TRBL_AL):
{ payload: <boolean> }alarm
Quick test
Set two points and enable extrapolation:
- Use1:
X=0, Y=0 - Use2:
X=10, Y=100 - Extrapolate: ON
Expected:
IN=-5âOUT=-50(left extrapolation)IN=0âOUT=0(knot)IN=5âOUT=50(interpolation)IN=10âOUT=100(knot)IN=15âOUT=150(right extrapolation)
Troubleshooting
- Node doesnât appear in the palette: install from the userDir (
~/.node-redor/data), then restart Node-RED and hard-refresh the editor (Ctrl+F5). - Keeps clamping instead of extrapolating: ensure the Extrapolate checkbox is ON and Xâs are strictly increasing.
đđș Magyar
Mit csinĂĄl ez a node?
A polygon a bemeneti msg.payload alapjĂĄn szĂĄmĂt kimenetet a törĂ©spontok között lineĂĄris interpolĂĄciĂłval. A szerkesztĆben 20 sor ĂĄll rendelkezĂ©sre (Use, X, Y), a szĂ©lsĆ tartomĂĄnyokon pedig extrapolĂĄl vagy klampel â beĂĄllĂtĂĄstĂłl fĂŒggĆen. A beĂĄllĂtĂĄsokat helyesen megĆrzi.
FĆ funkciĂłk
- 20 Ă (Use, X, Y) sor
- SzigorĂșan növekvĆ X kikĂ©nyszerĂtĂ©se:
- SzerkesztĆ: a mentĂ©s (Done) nem engedĂ©lyezett, ha a pipĂĄlt sorok X Ă©rtĂ©kei nem szigorĂșan növekvĆk.
- FutĂĄsidĆ: ha hibĂĄs flow kerĂŒl be, riasztĂĄst ad (TRBL_AL).
- Végpont-kezelés vålasztható:
- ExtrapolĂĄlĂĄs (alapbĂłl BE): lineĂĄris folytatĂĄs az elsĆ/utolsĂł szakasz meredeksĂ©gĂ©vel.
- Klampelés: Y az adott végpontnål marad.
- Pontos csomópont (X-egyezés): ha
IN == Xk, akkor OUT = Yk. - Egy kimenet:
- OUT â a bejövĆ ĂŒzenet mĂĄsolata szĂĄmĂtott
msg.payload-dal, pluszmsg.trbl_al,msg.n_bp,msg.segment
- OUT â a bejövĆ ĂŒzenet mĂĄsolata szĂĄmĂtott
- ĂllapotjelzĂ©sek a debughoz (
seg k,extrap,clamped,X order invalid, stb.)
TelepĂtĂ©s
TelepĂts a Node-RED userDir-bĆl (jellemzĆen ~/.node-red, Dockerben /data), majd indĂtsd Ășjra a Node-RED-et Ă©s frissĂtsd a böngĂ©szĆt (Ctrl+F5).
cd ~/.node-red # vagy: cd /data (Docker)
npm install /ELERESI/UT/node-red-contrib-polygon
node-red-restart
# BöngĂ©szĆ: Ctrl+F5
BeĂĄllĂtĂĄs & algoritmus
Legyenek az aktĂv (Use â) pontok (X1,Y1)âŠ(Xn,Yn), n â„ 2, szigorĂșan növekvĆ X-szel:
- Ha
INbelĂŒl van: keresĂŒnkk-t, aholXk < IN < Xk+1, Ă©s szĂĄmolunk:OUT = Yk + (IN â Xk) * (Yk+1 â Yk) / (Xk+1 â Xk) - Ha pontosan
IN == Xk:OUT = Yk - Ha
IN < X1:- Extrap BE: az
(X1,Y1)â(X2,Y2)szakasz meredeksĂ©gĂ©vel - Extrap KI:
OUT = Y1(klampel)
- Extrap BE: az
- Ha
IN > Xn:- Extrap BE: az
(Xnâ1,Ynâ1)â(Xn,Yn)szakasz meredeksĂ©gĂ©vel - Extrap KI:
OUT = Yn(klampel)
- Extrap BE: az
- HibĂĄk (TRBL_AL = true):
- Kevés pont (
n < 2) - X sorrend hibĂĄs (
Xk â„ Xk+1a hasznĂĄlt sorokban)
- Kevés pont (
Kimenetek
- 1. kimenet (OUT): szĂĄmĂtott
msg.payload, tovĂĄbbĂĄ:msg.trbl_alâ logikai zĂĄszlĂł hiba esetĂ©nmsg.n_bpâ hasznĂĄlt pontpĂĄrok szĂĄmamsg.segmentâ a hasznĂĄlt szegmens indexe (-1klampelĂ©s/extrapolĂĄciĂł/csomĂłpont esetĂ©n)
- 2. kimenet (TRBL_AL):
{ payload: <boolean> }jelzĆ
Gyors prĂłba
Két pont, extrapolålås BE:
- Use1:
X=0, Y=0 - Use2:
X=10, Y=100
Vårt értékek:
IN=-5âOUT=-50IN=0âOUT=0IN=5âOUT=50IN=10âOUT=100IN=15âOUT=150
HibaelhĂĄrĂtĂĄs
- Nem jelenik meg a palettĂĄn: a userDir-bĆl telepĂts (
~/.node-redvagy/data), indĂts Ășjra, Ă©s Ctrl+F5. - Klampel extrapolĂĄlĂĄs helyett: kapcsold BE az ExtrapolĂĄlĂĄs pipĂĄt Ă©s ellenĆrizd a szigorĂș X-sorrendet.
License
MIT