serversdown 2456fd0ee8 Merge pull request 'Merge v1.4.1 from dev' (#2) from dev into main
## [1.4.1] - 2026-03-17

### Fixed
- `config.ini` now saves to `AppData\Local\Series3Watcher\` instead of `Program Files` — fixes permission denied error on first-run wizard save.
- Config path resolution in both `series3_tray.py` and `series3_watcher.py` updated to use `sys.frozen` + `LOCALAPPDATA` when running as a PyInstaller `.exe`.
- Status menu item now uses a callable so it updates every time the menu opens — was showing stale "Starting..." while tooltip correctly showed current status.
- Settings dialog now opens in its own thread — fixes unresponsive tabs and text fields while the watcher loop is running.
- Tray icon reverted to plain colored dot — custom icon graphic was unreadable at 16px tray size. `.ico` file is still used for the `.exe` file icon.

### Changed
- Terra-View URL field in settings wizard now accepts base URL only (e.g. `http://192.168.x.x:8000`) — `/api/series3/heartbeat` endpoint appended automatically.
- Test Connection button now hits `/health` endpoint instead of posting a fake heartbeat — no database side effects.
- "terra-view URL" label capitalized to "Terra-View URL".
- Default log path updated to `AppData\Local\Series3Watcher\agent_logs\series3_watcher.log`.
- Installer now creates `agent_logs\` folder on install.
- `BUILDING.md` added — step-by-step guide for building, releasing, and updating.

## [1.4.0] - 2026-03-12

### Added
- `series3_tray.py` — system tray launcher using `pystray` + `Pillow`. Color-coded icon (green=OK, amber=Pending, red=Missing, purple=Error, grey=Starting). Right-click menu shows live status, unit count, last scan age, Open Log Folder, and Exit.
- `run_watcher(state, stop_event)` in `series3_watcher.py` for background thread use by the tray. Shared `state` dict updated on every scan cycle with status, unit list, last scan time, and last error.
- Interruptible sleep in watcher loop — tray exit is immediate, no waiting out the full scan interval.

### Changed
- `main()` now calls `run_watcher()` — standalone behavior unchanged.
- `requirements.txt` updated to document tray dependencies (`pystray`, `Pillow`); watcher itself remains stdlib-only.
2026-03-17 14:31:50 -04:00
2026-03-17 14:29:46 -04:00
2026-03-17 01:23:01 -04:00

Series 3 Watcher v1.4.1

Monitors Instantel Series 3 (Minimate) call-in activity on a Blastware server. Runs as a system tray app that starts automatically on login, reports heartbeats to terra-view, and self-updates from Gitea.


The easiest way to deploy to a field machine is the pre-built Windows installer.

  1. Download series3-watcher-setup.exe from the latest release on Gitea.
  2. Run the installer on the target machine. It installs to C:\Program Files\Series3Watcher\ and adds a shortcut to the user's Startup folder.
  3. On first launch the Setup Wizard opens automatically — fill in the terra-view URL and Blastware path, then click Save & Start.
  4. A coloured dot appears in the system tray. Done.

The watcher will auto-start on every login from that point on.

Auto-Updates

The watcher checks Gitea for a newer release approximately every 5 minutes. When a newer .exe is found it downloads it silently, swaps the file, and relaunches — no user action required.

Updates can also be pushed remotely from terra-view → Settings → Developer → Watcher Manager.


Building & Releasing

See BUILDING.md for the full step-by-step process covering:

  • First-time build and installer creation
  • Publishing a release to Gitea
  • Releasing hotfix updates (auto-updater picks them up automatically)

Running Without the Installer (Dev / Debug)

pip install -r requirements.txt
python series3_tray.py        # tray app (recommended)
python series3_watcher.py     # console-only, no tray

config.ini must exist in the same directory. Copy config-template.ini to config.ini and edit it, or just run series3_tray.py — the wizard will create it on first run.


Configuration

All settings live in config.ini. The Setup Wizard covers every field, but here's the reference:

API / terra-view

Key Description
API_ENABLED true to send heartbeats to terra-view
API_URL Terra-View base URL, e.g. http://192.168.1.10:8000 — the /api/series3/heartbeat endpoint is appended automatically
API_INTERVAL_SECONDS How often to POST (default 300)
SOURCE_ID Identifier for this machine (defaults to hostname)
SOURCE_TYPE Always series3_watcher

Paths

Key Description
SERIES3_PATH Blastware autocall folder, e.g. C:\Blastware 10\Event\autocall home
MAX_EVENT_AGE_DAYS Ignore .MLG files older than this (default 365)
LOG_FILE Path to the log file

Scanning

Key Description
SCAN_INTERVAL_SECONDS How often to scan the folder (default 300)
OK_HOURS Age threshold for OK status (default 12)
MISSING_HOURS Age threshold for Missing status (default 24)
MLG_HEADER_BYTES Bytes to read from each .MLG header for unit ID (default 2048)
RECENT_WARN_DAYS Log unsniffable files newer than this window

Logging

Key Description
ENABLE_LOGGING true / false
LOG_RETENTION_DAYS Auto-clear log after this many days (default 30)
COLORIZE ANSI colours in console — leave false on Win7

Tray Icon

Colour Meaning
Grey Starting / no scan yet
Green All detected units OK
Yellow At least one unit Pending
Red At least one unit Missing, or error

Right-click the icon for: status, per-unit list, Settings, Open Log Folder, Exit.


terra-view Integration

When API_ENABLED = true, the watcher POSTs a telemetry payload to terra-view on each heartbeat interval. terra-view updates the emitter table and tracks the watcher process itself (version, last seen, log tail) in the Watcher Manager.

To view connected watchers: Settings → Developer → Watcher Manager.


Requirements

  • Windows 7 or later
  • Python 3.8 (only needed if running from source — not needed with the installer)
  • Blastware 10 event folder accessible on the local machine

Versioning

Follows Semantic Versioning. Current release: v1.4.1. See CHANGELOG.md for full history.


License

Private / internal — Terra-Mechanics Inc.

Description
Scans blastware's ACH folder and reports updated files to an API via HTTP.
Readme 335 KiB
v1.4.4 Latest
2026-03-18 01:34:30 -04:00
Languages
Python 95.6%
Inno Setup 2.5%
Batchfile 1.9%