Skip to content

Free tool, hosted

Your EDE file, checked in this page

An EDE file that imports without an error is not the same as an EDE file that imports correctly. This page runs the same checks ede-check runs — seventeen columns, the first five mandatory, 269 unit codes and 54 object types, read out of a Niagara installation with javap rather than out of the specification — and it runs them here, in your browser, on a file that is never uploaded. There is nothing on our side to delete afterwards because nothing of yours arrives.

  • No upload
  • No account
  • Runs in the page
  • Same findings as the tool
  • MIT

Check a file

Drop the EDE file in, or choose it, or paste the text. If the vendor also sent a state-text file — the one the state-text-reference column names — add it too, because without it every reference in that column can only be reported as unchecked.

or drop it here — it is read in the page, not sent

What the report means

The lines are the command-line tool’s own lines, deliberately: one set of words to keep true, and the output pastes into a mail as it stands. An ERROR is a line the parser drops — the point never arrives. A warn is worse in practice, because the line imports: the point arrives, with a default you did not choose, and nothing in the import log says so. The tally at the bottom counts the columns left blank on every row, each one silently taking its property default.

What none of it can tell you is whether the points are the right points. It reports what the parser will do with the file, not whether the file describes the plant. The tool’s page walks through a real run and what each finding costs on site.

Why your file does not leave this page

The file is read with FileReader in the page and handed straight to the checker. There is no upload step left out of the description: no fetch, no XMLHttpRequest, no WebSocket, no form and no beacon in the three scripts the checker is made of, and none in site.js, the one script every page on this site loads — check.py fails this site’s build if a network call appears in any of them. You are being asked to put a customer’s point list into a stranger’s web page, so the three files are listed here with their digests: read them, then check you read the ones that ran.

ScriptSize and SHA-256
ede-rules.js read it · 12,916 bytes
19f87b0da3bec9cae2528d77b519fc82b85be297110b796dbf9b3651d61bf4fb
ede-check.js read it · 17,159 bytes
e62228335a0f23e1b929e00de8b4384600a19a316afc9c0aa6bc7b1dec08f749
ede-check-ui.js read it · 6,194 bytes
ff2135b1f22022cc0fd52bf120cd64a86e6d3d28892614f03edb8508d2f882e9

Two honest footnotes. This page carries the same cookieless analytics beacon as every other page on the site, so a request does leave your browser when the page loads — it records that the page was viewed, before you choose a file, and it never sees the file. And the rule table below is served from here, so loading this page tells us the page was loaded. Neither of those is your point list.

What a frozen rule table cannot be

The command-line tool reads the import rules out of the Niagara installation in front of it, every run. A browser cannot run javap, so this page carries a table read out of one installation, 4.15.5.22: seventeen columns, the first five mandatory, 269 unit codes, 54 object types of which 13 become points, and the comment and header prefixes the parser skips. The controller this work usually targets runs 4.14.0.162. A different Niagara version is a different answer, so treat this page as the first pass and run the tool against your own installation before relying on either. If this page and the tool disagree about your file, the tool is right.

One thing the table cannot carry at all: your station’s EdeConfig. Its delimiter property defaults to , on 4.15.5.22, and an EDE file written with a semicolon imports as one field per line until that property is changed. The report says so when it sees it.

Is it really the same program?

“A careful port” is not a claim anyone can check, so it is not the claim. The two are run side by side over a corpus built to exercise every finding either can report — a dropped mandatory column, an underscore in an integer field, nan in a float one, a quoted delimiter, a tab-delimited body, a trend-log row, a boolean range with three texts — and the outputs have to be identical, including the wording of every line and the exit code. 26 runs over 13 files, 101 findings compared, no differences. The transcript is the run:

ede-check, hosted against command-line, over 13 files.
Python: tools/ede-check.py --check (reads Niagara 4.15.5.22 with javap on every run).
Browser: assets/js/ede-check.js + assets/js/ede-rules.js under node v22.23.2.

same  blanks.csv  exit 0, 10 lines
same  blanks.csv +states  exit 0, 10 lines
same  clean.csv  exit 0, 7 lines
same  clean.csv +states  exit 0, 7 lines
same  comma.csv  exit 0, 6 lines
same  comma.csv +states  exit 0, 6 lines
same  mandatory.csv  exit 1, 14 lines
same  mandatory.csv +states  exit 1, 14 lines
same  no-headers.csv  exit 0, 9 lines
same  no-headers.csv +states  exit 0, 9 lines
same  nothing.csv  exit 2, 0 lines
same  nothing.csv +states  exit 2, 0 lines
same  numbers.csv  exit 1, 26 lines
same  numbers.csv +states  exit 1, 26 lines
same  one-trendlog.csv  exit 0, 10 lines
same  one-trendlog.csv +states  exit 0, 10 lines
same  shape.csv  exit 0, 9 lines
same  shape.csv +states  exit 0, 9 lines
same  tab.csv  exit 0, 7 lines
same  tab.csv +states  exit 0, 7 lines
same  template.csv  exit 0, 9 lines
same  template.csv +states  exit 0, 7 lines
same  types.csv  exit 1, 19 lines
same  types.csv +states  exit 1, 19 lines
same  values.csv  exit 1, 16 lines
same  values.csv +states  exit 1, 15 lines

drift probe, against copies of the served scripts rather than an argument that the comparison is sensitive:
  one finding reworded          2 of 26 runs differ
  one unit code dropped         24 of 26 runs differ

26 of 26 runs identical, 101 findings compared.

A test nobody has watched fail proves nothing, so the same run breaks the hosted checker on purpose, twice, against copies of the files served here. Rewording one finding differs on 2 of the 26 runs — the 2 that report it. Dropping a single unit code from the rule table differs on 24, because the counts the table holds are printed at the foot of every report and compared against the counts the tool read out of the jars. A table that drifted from the installation would not quietly accept a file Niagara rejects.

The file, and the source

The Python version is one file, MIT licensed, and it is the one to keep: ede-check.py, with its page at /tools/ede-check/ and its repository at github.com/UsamaIqbal0304/ede-check. The browser version is the three scripts above, under the same licence, with the notice in each file.

Next step

Send the EDE file and the point list it was meant to produce.

A file that imports clean and lands the wrong points is usually two or three columns, and the parser decides which. Saying which columns they are costs nothing either way.