Skip to content

Releases: OceanDataTools/openrvdas

v2.5.1

05 Jun 21:40
51e6d2d

Choose a tag to compare

Fixes a bug where all loggers appeared as "EXITED" in the UI after loading a cruise
configuration without restarting the logger manager. The status polling threads in
logger_manager.py could crash permanently on startup if no cruise was loaded in the
database yet, causing logger status to never reach the CachedDataServer. This release
broadens the exception handling in those threads so they recover gracefully and resume
normal operation once a cruise is loaded.

v2.5.0

31 May 15:46
5b5f534

Choose a tag to compare

What's Changed

  • Release v2.5.0: merge dev → master by @davidpablocohn in #561

    New Components

    #493)

    • CachedDataServer HTTP GET API — simple field retrieval via HTTP GET for clients that
      can't use WebSockets (#367, #550)

    New Features

    • ufw firewall support — Ubuntu installations can now optionally configure ufw
      alongside the existing firewalld support for RHEL/CentOS (#553, #554)
    • Firewall prompts default to data pipeline UDP ports 6221–6226 (#555, #559)
    • YAML configuration file validator (#516)
    • Auto-generated API docs with pdoc and GitHub Actions workflow (#525)
    • NMEA timestamp extraction in TimestampTransform (#518, #519)
    • Comprehensive NMEA 0183 device type definitions (#515)
    • Legacy NMEA met sentences MTA, MHU, MMB added to NMEA_Meteo (#521, #522)
    • Trimble message definitions extended with additional formats and fields
    • --tap argument for listeners (#480, #510)
    • pyproject.toml and CLI entry points (#540, #544, #545)

    Fixes & Improvements

    • Fix MacOS install on Apple Silicon/Intel; improve install UX for all platforms (#471,
      #531, #529)
    • Fix uwsgi setup failures and home-directory nginx socket permissions (#548, #549)
    • Fix supervisord web interface binding to localhost only (#543)
    • Fix supervisorctl requiring sudo on Ubuntu — patch supervisord.conf directly (#556,
      #557)
    • Fix CachedDataServer rejecting connections under CentOS (#536, #537)
    • Fix substitute_variables failing to expand multi-placeholder strings (#524)
    • Fix serial writer test to work without socat (#532)
    • Fix docs workflow to open PR instead of pushing directly to protected branch (#547)
    • Skip modbus tests when pymodbus not installed (#487, #517)
    • Add pytest to requirements.txt
    • Unify CSIRO and CORIOLIX regex parse transforms (#507, #509)
    • Deprecate install_influxdb.sh (#478, #490)
    • Replace subprocess git tag retrieval with GitPython (#483)
    • Handle int('123.0') edge case (#501)

Full Changelog: v2.4.0...v2.5.0

v2.4.0

25 Mar 00:37
8ace991

Choose a tag to compare

What's Changed

  • Fix substitute_variables failing to expand multi-placeholder strings by @davidpablocohn in #524
  • Merge dev → master: MacOS install fixes, API docs, WebsocketWriter, SSL improvements and component additions by @davidpablocohn-claude-bot in #535
  • Remove stale markdown documentation in docs/

Full Changelog: v2.3.0...v2.4.0

v2.3.1

04 Mar 00:51

Choose a tag to compare

Fixed issue #524 - broken template expansion when multiple placeholders appear on a single line.

v2.3.0

22 Feb 04:46
0089878

Choose a tag to compare

Release v2.3.0

New Features

HTTPReader (#317)

Polling HTTP GET/POST reader with configurable interval, headers, JSON payload, and URL verification. Uses urllib (no external dependency).

ModbusSerialReader (#481, #487)

Polls Modbus RTU devices over RS-485 serial connections. Supports holding/input registers, coils, and discrete inputs; single and multi-slave operation; YAML scan-file configuration; exponential backoff for connection retries.

GoogleSheetsWriter (#457)

Writes DASRecord fields as rows to a Google Sheets spreadsheet via a Google Service Account. Auto-creates columns as new fields are encountered.

GrafanaLiveWriter (#491, #493)

New writer that pushes DASRecords to Grafana Live via the /api/live/push endpoint using InfluxDB Line Protocol. Supports dynamic sub-stream routing ({base_stream}/{data_id}/{message_type}), secure token loading (file, environment variable, or direct string), batching, and queue-based async HTTP dispatch.

Unified RegexParseTransform (#507, #493)

Unified regex-based text parser that reconciles the previously incompatible CORIOLIX and CSIRO parse transforms. Supports named patterns, device definition files, metadata injection, and optional field type conversion.

Comprehensive NMEA Device Definitions (#515)

New logger/devices/NMEA_0183.yaml with 13 device types and 87 format patterns covering standard NMEA sentences and proprietary extensions (PSXN, PASHR, PRDID, PGRMF, PKEL, PUBX, PTNL, etc.).

NMEA Timestamp Extraction in TimestampTransform (#518)

New NMEATimestampExtractor utility parses embedded timestamps from all common NMEA 0183 sentences (GGA, GLL, RMC, ZDA, GBS, GST, GNS, BWC, TLL, TTM) and proprietary sentences (PASHR, PGRMF, PTNL GGK/PJK, PUBX 00/04, PSIMSNS, PSIMSSB, PSXN 26). TimestampTransform gains use_nmea_timestamp, nmea_timestamp_timeout, and nmea_time_drift_threshold parameters with configurable drift/staleness warnings.

ConvertFieldsTransform (#493)

Converts string-format field values to typed Python values (float, int, str, bool, hex_int). Handles NMEA-style lat/lon conversion (DDMM.MMMM + N/S/E/W to signed decimal degrees). Accepts both flat and dict-of-dicts field specifications.

YAML Configuration Validator (#516)

New logger/utils/validate_config.py auto-detects and validates device definitions, logger configs, and cruise definitions with clear, actionable error messages. Includes a git pre-commit hook script (scripts/validate_yaml_precommit.sh).


Enhancements

  • mirror_to tap/redistribution for Readers and Transforms (#480)BaseModule gains a mirror_to parameter that asynchronously copies every record to a specified Writer via a background thread, enabling data tapping without modifying primary logger configs.
  • Variable substitution default values (#475) — Extended syntax <<var_name|default_value>> with support for nested defaults.
  • listen.py positional config file (#495) — A bare filename argument is now treated as --config_file, reducing required typing.
  • Modbus reader timing fix (#487) — Interval sleep now occurs before data retrieval for more accurate timestamps.
  • RecordParser definition path — Now loads from both logger/devices/*.yaml and contrib/devices/*.yaml automatically.
  • Deprecate formats.py type checking (#489) — Removed old utils/formats.py component type hierarchy from all readers, transforms, and writers in favor of Python native type hints with can_process_record()/digest_record(). Added **kwargs propagation throughout.

Bug Fixes

  • API load-configuration-file NameError (#511) — Fixed NameError: name 'configuration' is not defined in api_views.py; also fixed missing read_config() call in CruiseReloadCurrentConfigurationAPIView.
  • API serializer typo (#511)CruiseReloadCurrentConfiguartionSerializer renamed to CruiseReloadCurrentConfigurationSerializer.
  • API URL and field typos (#511)/api/scheam//api/schema/; configuartionconfiguration; realodreload.
  • Skip Modbus tests when pymodbus not installed (#517) — Tests now skip gracefully on systems without the optional dependency.
  • Handle int('123.0') edge case (#501)ConvertFieldsTransform now converts via float first to avoid ValueError.

Infrastructure & Tooling

  • git_info.py utility (#482, #483) — New utils/git_info.py returns repo tag, branch, commit, and remote URL.
  • Django API tests (#511) — Comprehensive unit tests for api_views.py REST endpoints.
  • Ubuntu 25 support — Added to install_openrvdas.sh.
  • macOS Homebrew path fixes (#472) — Corrected paths for Homebrew-based installations.
  • Deprecate install_influxdb.sh (#478) — Added deprecation warning; manual Grafana/InfluxDB/Telegraf setup is now the recommended path.

UI & Documentation

  • Django GUI UI refresh (#473) — Centralized CSS, resizable stderr divs, improved button styling, favicon, based on SOI operator feedback.
  • Grafana displays documentation (#478) — Substantially rewritten with step-by-step manual Grafana/InfluxDB/Telegraf setup guide and new screenshots.

126 files changed, ~8,665 insertions, ~1,527 deletions

🤖 Generated with Claude Code