Skip to content

Changelog

All notable changes to this project are documented here.

This project follows Semantic Versioning.


[0.1.12] - 2026-02-01 Current

Section titled “[0.1.12] - 2026-02-01 ”
  • Diagnostics Module - Comprehensive Bluetooth diagnostics and troubleshooting

    • DiagnosticsCollector for gathering adapter info, connection stats, and recent errors
    • AdapterInfo with state detection (Available, PoweredOff, NotFound)
    • ConnectionStats tracking success rates, connection times, and disconnection reasons
    • Global diagnostics collector accessible via global_diagnostics()
  • Passive Monitoring - Monitor devices via BLE advertisements without connecting

    • PassiveMonitor for low-power, connectionless monitoring
    • Support for more devices than the BLE connection limit
    • Configurable deduplication and device filtering
  • Platform Module - Platform-specific BLE configuration and tuning

    • Platform detection (macOS, Linux, Windows) with appropriate defaults
    • PlatformConfig with recommended timeouts and scan durations
    • Cross-platform device aliasing with DeviceAlias and AliasStore
  • Retry Logic - Configurable retry policies for BLE operations

    • RetryPolicy with immediate, fixed, and exponential backoff strategies
    • Configurable max attempts, delays, and jitter
  • History Improvements

    • HistoryCheckpoint for resumable history downloads
    • PartialHistoryData for incremental sync with checkpoint tracking
    • History sync progress events with record counts
  • Device Connection Improvements

    • ConnectionConfig for configurable connection settings
    • SignalQuality enum for RSSI classification
  • Device Manager Improvements

    • AdaptiveInterval for smart polling that adjusts based on device activity
    • DevicePriority for prioritizing certain devices during polling
  • Error Context - User-friendly error messages with actionable suggestions

    • ErrorContext with message, retryable flag, and suggestion
    • Automatic classification of errors with retry guidance
  • New Commands

    • CancelOperation - Cancel long-running scans, syncs, and other operations
    • Background polling commands
    • System service management from GUI/TUI
  • GUI Service Panel - Manage aranet-service from the desktop application

    • View service status (installed, running)
    • Install/uninstall system service (user-level, no admin required)
    • Start/stop service controls
  • API Improvements

    • /api/health/detailed endpoint with database, collector, and platform diagnostics
    • Improved Prometheus metrics with better lock management
  • Improved Prometheus metrics collection performance
  • Enhanced history sync events with progress tracking
  • Synchronized all crate versions to 0.1.12
  • Lock contention in Prometheus metrics endpoint

  • MQTT Integration - Publish sensor readings to MQTT brokers for IoT integration

    • Real-time publishing to configurable topics ({prefix}/{device}/co2, /temperature, etc.)
    • TLS support via mqtts:// scheme
    • Configurable QoS levels (0, 1, 2), retain flag, and authentication
    • Automatic reconnection with retry intervals
    • Feature flag: mqtt (included in full feature)
  • Prometheus Metrics Endpoint - Export sensor data for monitoring and alerting

    • /metrics endpoint with Prometheus text format (0.0.4)
    • Sensor metrics: aranet_co2_ppm, aranet_temperature_celsius, aranet_humidity_percent, aranet_pressure_hpa, aranet_battery_percent
    • Radon/radiation metrics when available
    • Collector statistics: aranet_collector_running, aranet_collector_uptime_seconds, poll success/failure counts
    • Optional push gateway support
    • Feature flag: prometheus (included in full feature)
  • Service Management Commands

    • aranet-service service install [--user] - Install as system/user service
    • aranet-service service uninstall/start/stop/status [--user] - Control service
  • REST API Enhancements

    • POST /api/collector/start and POST /api/collector/stop - Control background collector
    • GET /api/status - Full service status with collector state
    • GET/PUT /api/config - Runtime configuration management
    • POST/PUT/DELETE /api/config/devices - Dynamic device management
  • GUI Improvements

    • Multi-panel architecture: Device List, Device Detail, History, Comparison, Alerts, Service, Settings
    • Export functionality (CSV/JSON) for historical data
    • Comparison view for side-by-side multi-device analysis
    • Alert system with threshold management and alert history
    • Service panel for background collector control
    • macOS native menu bar integration
    • System tray with quick access to readings
    • Light/dark theme support
  • TUI Service Tab - Monitor and control aranet-service from terminal dashboard

  • Service Client Library - service-client feature in aranet-core for type-safe API access

  • Downloads page on website with direct download links for all platforms

  • New icon assets with multiple resolutions (16px to 1024px)

  • docs/ARCHITECTURE.md with comprehensive technical documentation

  • Troubleshooting guide on website

  • Entitlements for Bluetooth access on macOS GUI app

  • crates.io and docs.rs badges to all crate README files

  • Documentation website links in all crate README files

  • Updated screenshots in README and website
  • Improved CI workflow for screenshots and site deployment
  • Synchronized all crate versions to 0.1.11
  • aranet-wasm crate removed from workspace (was not published)
  • ROADMAP.md removed in favor of website roadmap page
  • Icon asset included in aranet-cli for crates.io publishing
  • Screenshots and deploy-site workflow failures
  • Removed references to non-existent CLI flags from troubleshooting documentation

  • 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