Skip to content

Changelog

All notable changes to this project are documented here.

This project follows Semantic Versioning.


[0.1.9] - 2026-01-22 Current

Section titled “[0.1.9] - 2026-01-22 ”
  • Replaced unmaintained atty crate with std::io::IsTerminal (resolves RUSTSEC-2024-0375)
  • Updated rusqlite from 0.33 to 0.35
  • Updated multiple dependencies to latest versions
  • Marked aranet-gui and aranet-wasm as publish = false (not ready for release)
  • CONTRIBUTING.md with contribution guidelines
  • SECURITY.md with vulnerability reporting process
  • GitHub issue templates for bug reports and feature requests
  • Pull request template

  • TUI Dashboard Enhancements - Complete overhaul with 44 new features
    • Navigation: Tab/Shift+Tab for tabs, j/k/arrows for devices, vim-style keybindings
    • Auto-refresh: Readings update automatically based on device interval
    • Trend indicators: Up/down/stable arrows next to readings
    • Statistics: Min/Max/Avg CO2 stats, radon 1-day/7-day averages
    • Alerts: CO2/radon threshold alerts with Info/Warning/Critical severity levels
    • Alert history: View past alerts with ‘a’ key, sticky alerts with ‘A’
    • Terminal bell: Audio alert on threshold breach (toggle with ‘b’)
    • Sparkline charts: CO2/radon history with min/max labels and time axis
    • Full-screen chart: Press ‘g’ for expanded chart view
    • Multiple metrics: Stack temperature/humidity on chart with T/H keys
    • Time range filter: 0=all, 1=today, 2=24h, 3=7d, 4=30d
    • Scrollable history: PgUp/PgDn to scroll through records
    • Export history: Press ‘e’ to export visible history to CSV
    • Device filter: Cycle filter with ‘f’ (All/Aranet4/Radon/Radiation/Connected)
    • Comparison view: Side-by-side device readings with ‘v’, cycle with </>
    • Connect all: Connect to all known devices with ‘C’
    • Device alias: Set friendly names with ‘n’ key
    • Settings editing: Change interval with Enter, BLE range with ‘B’, Smart Home with ‘I’
    • Threshold config: Adjust CO2/radon thresholds with +/- keys
    • Theme support: Toggle light/dark theme with ‘t’ key
    • Responsive layout: Auto-hide sidebar on narrow terminals, toggle with ’[’
    • Wider sidebar: Toggle sidebar width with ’]’ key
    • Mouse support: Click to select devices, tabs, and buttons
    • RSSI signal strength: Visual signal bars for connected devices
    • Device uptime: Shows how long device has been connected
    • Battery warning: Alert when battery drops below 20%
    • Reading age warning: Highlight stale readings (> 2x interval)
    • Loading spinners: Visual feedback during connect/sync operations
    • Status messages: Queue of messages with auto-dismiss timeout
    • Confirmation dialogs: Y/N prompts before destructive actions
    • Error details: View full error with ‘E’ key
    • Help overlay: Press ’?’ for organized keyboard shortcuts cheatsheet
    • Header bar: Shows connected count, avg CO2, alert count, indicators
    • ASCII-only output: All indicators use pure ASCII characters for compatibility

  • aranet-store crate - New SQLite-based local data persistence layer

    • Store current readings and device metadata
    • Cache history records from devices for offline access
    • Incremental sync support (only download new records)
    • Query by device, time range, with pagination
    • Automatic deduplication of history records
    • Platform-specific database locations:
      • Linux: ~/.local/share/aranet/data.db
      • macOS: ~/Library/Application Support/aranet/data.db
      • Windows: C:\Users\<user>\AppData\Local\aranet\data.db
  • CLI sync command - Download device history to local database

    • aranet sync --device <ADDRESS> for incremental sync
    • aranet sync --device <ADDRESS> --full for complete re-download
    • Progress bar during history download
  • CLI cache command - Query cached data without device connection

    • aranet cache devices - List all cached devices
    • aranet cache stats - Show cache statistics (readings, history counts)
    • aranet cache history - Query cached history with filters
    • aranet cache info - Show database path and size
  • All crate versions bumped to 0.1.7

  • Code coverage with cargo-llvm-cov - CI now reports test coverage via Codecov
  • Property-based testing with proptest - Fuzz testing for all byte parsers
    • aranet-types: CurrentReading parser fuzzing
    • aranet-core: All device parsers (Aranet4, Aranet2, Radon, Radiation)
    • aranet-core: Advertisement parsing fuzzing
  • GUI tests - Component tests for AppState (6 new tests)
  • TUI tests - Component tests for App key handling (6 new tests)
  • Expanded MockDevice tests - Comprehensive coverage for history, settings, calibration
  • Aranet Radiation advertisement parser panic - Fixed crash on malformed data (found by proptest)
  • Test count increased from 268 to 310+ tests
  • All test modules now have comprehensive inline documentation

  • Multi-device passive watch mode - aranet watch --passive monitors ALL devices broadcasting advertisements
  • Device name identification in watch output: [AranetRn+ 306B8]
  • CSV, JSON, and text output formats with device identification

  • Fix clippy warnings for Rust 2024 edition compliance
  • Resolve collapsible if/else-if blocks in CLI styling code
  • Remove unnecessary .clone() on Copy types in tests
  • Fix manual range contains and clamp patterns

  • Rich CLI styling (now the default)
    • Spinners for long-running operations (scan, connect, history download)
    • Color-coded sensor values based on thresholds (CO2, radon, battery, humidity, temperature)
    • Table formatting with tabled for history, info, alias, and scan output
    • Trend indicators in watch mode (up/down/stable arrows)
    • --style flag: rich (default), minimal, or plain for scripting
    • --brief flag for status command (compact one-line output)
    • Device name headers in read output
    • Air quality summary labels (Excellent, Good, Fair, Poor)
  • Pressure unit conversion (--inhg / --hpa flags)
    • Display pressure in inches of mercury (inHg) with --inhg
    • Explicitly request hPa with --hpa (default)
    • Configurable via config file (inhg = true)
  • doctor command for BLE diagnostics
    • Checks Bluetooth adapter availability and permissions
    • Scans for devices to verify BLE functionality
    • Platform-specific troubleshooting tips (macOS, Linux, Windows)
    • Numbered progress steps with colored status indicators
  • alias command for device management
    • alias list - Show all saved device aliases (now with table formatting)
    • alias set <name> <address> - Create a friendly name for a device
    • alias remove <name> - Delete an alias
    • Use aliases anywhere a device address is expected
  • Passive read mode (--passive flag on read)
    • Read sensor data from BLE advertisements without connecting
    • Requires Smart Home integration enabled on the device
  • Multi-device read support
    • Specify multiple devices: aranet read -d device1 -d device2
    • Parallel reading from all devices
    • Combined output in text, JSON, and CSV formats
  • Interactive device picker
    • When no device is specified, scan and present a selection menu
  • History date filters (--since / --until)
    • Filter history by date range (RFC3339 or YYYY-MM-DD format)
  • Progress bars for history download
    • Visual progress indicator with percentage and current parameter
  • Full AranetRn+ (Radon) sensor support with 4-byte radon history values
  • History V2 protocol parsing with 10-byte header format
  • aranet-types crate for platform-agnostic shared types
  • WebAssembly module foundation (aranet-wasm)
  • UUID mappings for history characteristics
  • V2 history parsing header format
  • macOS device identifier now uses CoreBluetooth UUID instead of placeholder address
  • Default style mode changed from minimal to rich
  • Replaced unmaintained atty crate with std::io::IsTerminal
  • Refactored cmd_history to use HistoryArgs struct (clippy compliance)
  • HistoryRecord now includes optional radon: Option<u32> field
  • Improved error messages for BLE connection failures

  • Device Discovery — Scan for nearby Aranet devices via BLE
  • Current Readings — CO₂, temperature, pressure, humidity, radon, radiation
  • Historical Data — Download measurement history with timestamps (V1 + V2 protocols)
  • Device Settings — Read/write measurement interval, Bluetooth range, Smart Home
  • Auto-reconnection — Configurable backoff and retry logic
  • Real-time Streaming — Subscribe to sensor value changes via notifications
  • Multi-device Manager — Manage multiple sensors simultaneously
  • Event System — Connect/disconnect/reading event dispatcher
  • Data Validation — Bounds checking with ReadingValidator
  • CO₂ Thresholds — Helpers for green/amber/red status
  • Mock Device — For testing without hardware
DeviceStatus
Aranet4Full Support
Aranet2Full Support
AranetRn+ (Radon)Full Support
Aranet RadiationFull Support

All core commands fully implemented:

  • scan — Discover nearby Aranet devices
  • read — Read current sensor measurements
  • status — Quick one-line reading with colored CO₂ status
  • info — Display device information
  • history — Download historical data (text, JSON, CSV)
  • set — Modify device settings (interval, range, smart_home)
  • watch — Continuous monitoring with auto-reconnect
  • config — Manage configuration file (~/.config/aranet/config.toml)
  • completions — Generate shell completions (bash, zsh, fish, PowerShell)

Features:

  • JSON and CSV output formats for all commands
  • Colored CO₂ status indicators (green/amber/red)
  • Config file support with device, format, no_color, fahrenheit options
  • ARANET_DEVICE environment variable support
  • --no-color flag and NO_COLOR env var support
  • 310+ workspace tests (295+ run, 15 ignored for hardware-dependent tests)
  • Property-based testing with proptest for all byte parsers
  • Code coverage with cargo-llvm-cov (Codecov integration)
  • Hardware tested: Aranet4 17C3C (FW v1.4.19), AranetRn+ 306B8 (FW v1.12.0)
  • CI running on Ubuntu, macOS, Windows

DependencyVersionPurpose
btleplug0.11Cross-platform BLE
tokio1.xAsync runtime
thiserror2.xError handling
clap4.xCLI argument parsing
time0.3Date/time handling
serde1.xSerialization

Made with ❤️ by Cameron Rye