Releases: gridsociety/mythy
Release list
v1.2.1
Documentation & cosmetic patch. No behavior change, no new flags, no bug fixes. Upgrading from v1.2.0 is optional — the binaries are functionally identical aside from one CLI string. Released so the published docs and --help reflect the project's intended tone and scope.
Highlights
CLI: neutral, professional tagline
mythy --help no longer opens with the colloquial "talks to PROX/PRON/XMR the way ThyVisor does, but smarter." Long description is now:
Command-line tool to configure, monitor, and manage Thytronic protection relays.
README: honest scope
- Opener no longer name-drops
(XV10P, NV10P, NA10, …)in a way that implied a closed support list. - New Compatibility section: declares only XV10P (PROX family) and NV10P (PRON family) as actually tested end-to-end, while explaining that the vendor's wire format is uniform across
Codifica.xmlso other Thytronic families (NA10, XMR, DMC*, SME*, CCI, NTG, iBU, …) are expected to work but unverified. Reports of success or failure on those are welcome via issues. - New License section: points at the MIT
LICENSE, restates the as-is warranty disclaimer in-context, and notes that this is an unaffiliated third-party tool — Thytronic, ThyVisor, and product names are trademarks of their respective owners.
README: late documentation for v1.2.0 features
v1.2.0 shipped a few small things that landed in the README only after the tag was cut. They are now documented here:
mythy export --include-disabled-modulesand the--allshortcut for opting into module-disabled DATA.- Per-category "skipped N key(s)" summary lines at the end of every export.
- Locale-aware YAML round-trip: every export records
device.locale, andimport/diff/validatereconcile it against--locale(with--force-localeto override).
Internal cleanup
cmd/mythy/connection.go: the comment justifying the hardcoded0x143Ediscovery read used to say "every PROX/PRON/XMR template puts IDENTIFICATION at num=5183". An empirical scan of all 847 templates in the vendor catalog showed this register address is universal across every family that declares IDENTIFICATION, not just three of them. Comment broadened to match reality.
Upgrading
Drop-in. Same flags, same outputs, same on-the-wire behavior. Replace the binary at your leisure.
Full changelog: v1.2.0...v1.2.1
v1.2.0
v1.2.0 is a small minor release focused on two user-visible affordances on top of v1.1.0:
mythy export --allnow actually means "everything", including DATA whoseMODULEattribute is reported off byEnableBoard_*. The previous build silently dropped those (RELE_K*,ING_I*, family-wide measurement compounds, …), so snapshots and YAML round-trips lost entire categories without surfacing the omission. New flag--include-disabled-modulesexposes the gate by itself;--allbundles it alongside--include-hidden/--include-readonly/--include-skip. Every export now ends with a per-category skip summary (skipped 64 module-disabled key(s) (use --include-disabled-modules to include)), so what was implicit before is now explicit and discoverable.- The compound-write error from
mythy setno longer leaksmap[string]any(a Go-internal type unactionable from a CLI) and instead points the user at the supported dotted-path syntax with a concrete example. The symmetric error on the YAML import path got the same treatment.
Both are non-breaking additions on top of v1.1.0; the bump to a minor version reflects the new CLI flag and the new YAML-stream output lines.
Upgrade notes
No migration. Existing exports done with v1.1.0 round-trip unchanged through the v1.2.0 import path. If you previously relied on the silent module-gate behaviour to keep RELE_K* out of your snapshots, you don't need to do anything — the default is unchanged; only --all now means more than it did.
What's Changed
- fix(export): --all includes module-disabled DATA + per-category skip summary by @ale-rinaldi in #23
- fix(session,configio): point at dotted-path in compound-error messages by @ale-rinaldi in #24
Full Changelog: v1.1.0...v1.2.0
v1.1.0
v1.1.0 is a bug-fix release focused on three areas: write-path safety on protection-relay devices, catalog-decoding correctness across the NV10P / PROX / SMEI / legacy SIF/SVF families, and round-trip fidelity of YAML configurations.
If you ran v1.0.0 against an NV10P (or any non-PROX family), this release closes silent-corruption paths you may have hit without seeing a clear error. The full PR list is at the bottom; the sections below group the changes by what you'll notice as an operator.
Safety
- Import scope guard.
mythy importno longer writes toVISIBILITY="3"(Administrator subtree) orSKIP="YES"(identification, IP, comm config) keys by default. Hand-edited YAMLs that mistakenly carry those keys are skipped and listed, instead of going to wire and risking aFATALEstate requiring a factory reset. Per-category opt-ins behind--include-hidden/--include-skip/--all, all gated on a paired--yes-i-understand. (#17) - Loud failures on unresolvable enum labels. Compound sub-fields (e.g.
SOGLIA.Tipo,SOGLIA.Stato,RELE_PARAM.Logica) used to silently fall through to value0when an enum label couldn't be resolved against the loaded template. They now error out by name, which closes the SOGLIA-flips-MINIMA↔MASSIMA silent-corruption path. (#3, #4) - Locale-aware YAML round-trips. Export records the
--localeit ran under intodevice.locale; import / diff / validate refuse to proceed on cross-locale mismatches unless--force-localeis set explicitly. Keeps YAML readable in the operator's native language while making locale drift a loud, opt-in event. (#4)
Catalog correctness
- Compound TIPO overrides. v1.0.0 trusted the
<CLASS>block alone when building a compound's wire layout. For SOGLIA, RELE, LED, MISURA, CONTATORE, INFO_SCHEDA, SGN_IN, STATO_RELE, INFO_SGN_IN, and SOGLIA_DT — every compound used by NV10P / NV11B / NA10 protection settings — the per-instance<DATA TIPO="<class>">carries nested<DATA NAME="..." TIPO="...">children that override sub-field TIPOs. The pre-fix encoder shipped 12 registers where the wire expected 14, and the device interpreted everything after the first override as shifted-by-two garbage. Now we honour the overrides; cross-catalog audit confirms 9,816 compound DATA instances balance correctly. (#6) - ENUM_WORD support (the SMEI family's 16-bit enum). (#9)
- INT support in legacy SIF / SVF / SIF_8EV / SVF_8EV / SVF5740 templates, confirmed empirically as a
WORDsynonym fromSIF5600.IdentificationResponse'sINT + LONG + INT + INT = dim 5split. (#10) - TYPEDEF resolution at load.
ENUM_RELE/ENUM_LED/ENUM_ING(all aliasingBIT32) are now resolved once at catalog parse time; every TIPO switch site downstream — read, write, YAML I/O — sees the resolved primitive without per-site hardcoded knowledge of which names are aliases. (#1) - Multi-band
<RANGE>validation. Settings likeVLineaPrimario_1with several<RANGE VALUE="lo,hi,step"/>children describing piecewise-valid bands now accept values from any band; the validator used to read only the last<RANGE>and refused legitimate values from any other. (#2) .cachewire-format versioning. Template caches gain a magic header and a parser-schema version. Mythy builds that change the catalog parser now auto-invalidate stale caches on first use — no more "I upgraded mythy but it keeps using the old parser's output until Irm Templates/*.cache". (#5)
Connectivity / UX
- NV10P initial-handshake fix. v1.0.0's
Identifyunconditionally probedENABLE_SEC_MODEand only tolerated Modbus exception0x02. PRON-family firmware (every NV10P-EB0 / NA10 / NV11B variant where the register isn't declared) returns exception0x03instead, so every command went straight to "discovery: request timed out" or a confusing Modbus error. Identify now consults the loaded template first and skips the probe entirely on devices that don't declare the register — matching what ThyVisor does on the wire — and tolerates both0x02and0x03on unknown variants. (#12 / PR #13) - Default
--request-timeoutraised from 2 s to 10 s. Tight enough to fail fast on stuck connections but enough head-room to coverEND_CHANGE_DB's flash-commit on typical imports. The 2 s default routinely surfaced a cosmetic timeout error on imports the device had actually committed. (#7) - Compound int handling on import. YAML decoders emit Go
intfor small integers likeTipo: 1; the pre-fix import path only handledint64/uint64, sointvalues silently became0. (#3)
Upgrading
Single static binary, no migration steps. On first run the new build will:
- regenerate any existing
Templates/*.cachefiles (the cache wire format gained a version header in #5); - accept YAMLs produced by v1.0.0 unchanged (the new
device.localefield is optional andomitempty).
Re-exporting your snapshots after upgrading gets you the locale-tagged header that future cross-locale round-trips will use.
What's Changed
- fix(catalog): resolve TYPEDEF aliases at load time by @ale-rinaldi in #11
- fix(session): gate ENABLE_SEC_MODE probe on the catalog, tolerate exception 0x03 by @ale-rinaldi in #13
- fix(codec): accept Go int for enum sub-field values by @ale-rinaldi in #14
- fix(transport): bump default request-timeout from 2s to 10s by @ale-rinaldi in #15
- fix(session): accept value matching any band on multi-RANGE DATA by @ale-rinaldi in #16
- fix(import,export): scope-aware writes, refuse dangerous categories by default by @ale-rinaldi in #17
- fix(catalog,codec): honour per-instance compound TIPO overrides; add ENUM_WORD and INT by @ale-rinaldi in #18
- fix(catalog): version the .cache wire format so parser changes auto-invalidate by @ale-rinaldi in #19
- fix(configio,codec): record export locale and refuse cross-locale silent label remap by @ale-rinaldi in #20
New Contributors
- @ale-rinaldi made their first contribution in #11
Full Changelog: v1.0.0...v1.1.0
v1.0.0
First public release of mythy — a command-line client for Thytronic protection relays (XV10P, NV10P, NA10, …).
mythy speaks the same Modbus TCP / RTU protocol as the vendor's ThyVisor Windows app, so you can identify devices, browse the parameter catalog, read measurements, change settings, snapshot configurations to YAML, and invoke commands without leaving the terminal. Single static Go binary, no runtime dependencies.
What's in the box
- Catalog browsing, with or without a connected device
- Type-aware reads (primitives, ENUMs, 12-field compounds)
- Multi-parameter writes batched into a single Modbus edit transaction; client-side validation of
RANGE/ENUM/STRINGconstraints - YAML snapshot / diff / import (
--dry-run/--force) for configuration management - Command invocation: any catalog
<COMMAND>, plus shortcuts (reboot,reset,clock-set,net-set, …) - G61850 RPC parser (
g61850 list/g61850 invoke) - Modbus TCP and RTU (serial / USB-CDC) transports
- Output formats:
human,json,yaml,unified(for diff)
Install
Download the archive for your platform below — prebuilt for Linux (386, amd64, armv7, arm64), macOS (amd64, arm64), and Windows (386, amd64, arm64). Each archive contains the mythy binary, the project LICENSE (MIT), and THIRD_PARTY_LICENSES covering the bundled Go modules. SHA256SUMS is published alongside.
tar -xzf mythy-v1.0.0-linux-amd64.tar.gz
./mythy --versionFirst-time setup
mythy reads its parameter catalog from a copy of ThyVisor's Templates/ folder. See the README for the one-time extraction steps (Windows or Wine).
Documentation
- README — usage walkthrough and command reference
License
Released under the MIT License. Copyright © 2026 Grid Society S.r.l.