Skip to content

Releases: iwismer/rusty-timer

Server v0.13.1

07 Apr 14:10

Choose a tag to compare

What's Changed

SBC / Cloud-Init Fixes

  • SPI & I2C enabled via cloud-init bootcmd — All cloud-init templates (YAML, Python generator, TypeScript generator) now add dtparam=spi=on and dtparam=i2c_arm=on in a bootcmd block, so both interfaces are ready after the initial reboot without needing rt-setup.sh (#206)
  • Fixed I2C config path on Bookworm+setup_ups() in rt-setup.sh now uses the /boot/firmware/config.txt fallback path (Bookworm moved it from /boot/config.txt), fixing silent I2C enable failures (#206)
  • PiSugar soft shutdown enabled by default (#204)
  • PiSugar RTC auto-sync for offline timekeeping (#198)
  • Headless PiSugar install — Pre-seed debconf to avoid interactive prompts (#200)
  • First-boot apt upgrade — Run apt update && apt upgrade on initial boot (#201)
  • Official PiSugar installer — Switched to upstream install script (#197)
  • UPS setup fixes — Fixed failures and config issues in rt-setup.sh (#195)

Full Changelog: server-v0.13.0...server-v0.13.1

server v0.13.0

07 Apr 01:26

Choose a tag to compare

What's New

PiSugar 3 Plus UPS Support (#192)

The server now receives and surfaces UPS battery telemetry from forwarders equipped with PiSugar 3 Plus HATs.

  • Caches UPS state per-forwarder in memory for instant delivery to new receiver connections
  • Logs power-plug transitions (plugged/unplugged) to the forwarder_ups_events Postgres table
  • Streams UPS status updates to the dashboard via SSE and to receivers via WebSocket fanout
  • Sends initial UPS snapshots to newly connected receivers
  • Dashboard UI displays battery percent, voltage, charging state, and temperature per forwarder
  • SBC setup page updated with pisugar-server install and I2C configuration instructions

Full Changelog: server-v0.12.0...server-v0.13.0

Full Changelog: forwarder-v0.9.0...server-v0.13.0

Receiver v0.17.0

07 Apr 01:26

Choose a tag to compare

What's New

PiSugar 3 Plus UPS Display (#192)

The receiver desktop app now displays UPS battery status for forwarders equipped with PiSugar 3 Plus HATs.

  • Battery component in the Tauri UI showing percent, voltage, charging indicator, and temperature
  • UPS state updates arrive via sentinel ReadEvents from the server WebSocket connection
  • Automatic state pruning when a forwarder disconnects (clears stale battery info)
  • Store-updater logic for managing per-forwarder UPS state lifecycle

Full Changelog: receiver-v0.16.0...receiver-v0.17.0

forwarder v0.9.0

07 Apr 01:26

Choose a tag to compare

What's New

PiSugar 3 Plus UPS Monitoring (#192)

Added optional UPS monitoring support for PiSugar 3 Plus battery HATs on Raspberry Pi forwarders. When enabled, the forwarder polls the pisugar-server TCP daemon and reports battery telemetry (percent, voltage, charging state, power plugged, temperature) to connected servers and receivers.

  • New [ups] TOML config section to enable and configure UPS polling
  • UPS status editing in the forwarder local web UI
  • Integer-based telemetry (millivolts, centi-degrees) with change-detection to minimize noise
  • Three-state availability model: unavailable → available → stale
  • Transition-only warning logs for power-plug state changes

Bug Fixes

  • fix: increase UPS test timeout for Windows CI (#194)
  • fix: fix Windows CI failures in UPS tests (#193)

Full Changelog: forwarder-v0.8.4...forwarder-v0.9.0

What's Changed

  • chore: remove package-lock.json registry URL stripping from pre-commit hook by @iwismer in #190
  • feat: PiSugar 3 Plus UPS support across full stack by @iwismer in #192
  • fix(forwarder): fix Windows CI failures in UPS tests by @iwismer in #193
  • fix(forwarder): increase UPS test timeout for Windows CI by @iwismer in #194

Full Changelog: receiver-v0.16.0...forwarder-v0.9.0

Forwarder v0.11.1

07 Apr 14:11

Choose a tag to compare

What's Changed

E-ink Display Improvements

  • "Powered Off" message on shutdown — After the forwarder shuts down, a centered "Powered Off" message is rendered on the e-ink display with a full refresh before the display sleeps. Since e-ink retains its last image without power, this text remains visible while the device is off. (#207)
  • Landscape orientation fix — Display rotated 90° CCW for correct landscape orientation (#205)
  • GPIO access fix — Allow gpiochip0 access in container permissions and improved SPI configuration hint (#203)

Full Changelog: forwarder-v0.11.0...forwarder-v0.11.1

forwarder v0.11.0

07 Apr 13:04

Choose a tag to compare

What's New

E-Ink Display Support

  • New: Waveshare 2.13" e-ink display module — shows forwarder status (connection state, reader info, chip read counts) directly on the SBC hardware via SPI/GPIO (#191)
  • Fixed rppal HAL feature flag for embedded-hal 1.0 compatibility (#196)
  • Improved e-ink logging for easier debugging of display failures (#202)

SBC Deployment Improvements

  • Enable SPI in boot config automatically for e-ink display (#199)
  • Enable PiSugar RTC auto-sync for reliable offline timekeeping (#198)
  • Run apt update && upgrade on first boot for security patches (#201)
  • Pre-seed debconf for fully headless PiSugar install (#200)
  • Use official PiSugar installer script for UPS setup (#197)

Full Changelog: forwarder-v0.10.1...forwarder-v0.11.0

What's Changed

  • fix(sbc): use official PiSugar installer for UPS setup by @iwismer in #197
  • feat(sbc): enable PiSugar RTC auto-sync for offline time by @iwismer in #198
  • fix(sbc): enable SPI in boot config for e-ink display by @iwismer in #199
  • fix(sbc): pre-seed debconf for headless PiSugar install by @iwismer in #200
  • feat(sbc): run apt update and upgrade on first boot by @iwismer in #201
  • feat(eink): improve logging for debugging display failures by @iwismer in #202

Full Changelog: forwarder-v0.10.1...forwarder-v0.11.0

Forwarder v0.10.1

07 Apr 11:38

Choose a tag to compare

Bug Fixes

E-Ink Display Hardware Compatibility (#196)

Fixed two issues that prevented the e-ink display feature from compiling on ARM targets (the actual hardware):

  • Missing hal feature on rppal: Without the hal feature flag, rppal::hal::Delay doesn't exist and GPIO/SPI types don't implement the embedded-hal 1.0 traits required by epd-waveshare. Added features = ["hal"] and wrapped Spi in SimpleHalSpiDevice since rppal's Spi doesn't directly implement embedded_hal::spi::SpiDevice.

  • Color vs BinaryColor type mismatch: The epd-waveshare Display2in13 uses epd_waveshare::color::Color as its DrawTarget::Color type, not embedded_graphics::pixelcolor::BinaryColor. Used the color_converted() adapter from embedded-graphics to bridge the two types in the forwarder's e-ink draw closure.

Full Changelog: forwarder-v0.10.0...forwarder-v0.10.1

Forwarder v0.10.0

07 Apr 11:01

Choose a tag to compare

What's New

E-Ink Display Support (#191)

Added support for the Waveshare 2.13" e-ink display HAT (250×122px), giving forwarders a local status screen without needing a monitor.

  • New rt-eink crate with a two-column layout engine, embedded-graphics renderer, and epd-waveshare hardware driver
  • Integrates via tokio::sync::watchStatusServer publishes DisplayState on every mutation, and the e-ink task redraws with a hybrid partial/full refresh strategy
  • Desktop simulator available: cargo run -p rt-eink --example eink_sim --features simulator
  • --eink-sim flag added to dev.py for launching the simulator alongside the dev environment
  • Deployment updates: systemd service gets SPI/GPIO group access, rt-setup.sh auto-detects SPI and generates [eink] config section

Deployment Fix (#195)

  • Fixed UPS setup failures and config generation in rt-setup.sh

Full Changelog: forwarder-v0.9.0...forwarder-v0.10.0

Server v0.12.0

23 Mar 00:24

Choose a tag to compare

New Features

  • Reader control via WS proxy: Added a WebSocket proxy layer that lets receivers send reader control commands (clock sync, read mode, TTO, recording, download, etc.) through the server to forwarders — no direct receiver-to-forwarder connection needed (#186)
  • Sentinel tunneling: Server now tunnels ReaderInfoUpdate and ReaderDownloadProgress events from forwarders to connected receivers in real time, enabling live feedback for reader operations
  • Reader control UI: New ReaderControlPanel card on the server stream detail page (above epoch mapping) using a shared Svelte component from shared-ui

rt-protocol

  • 4 new structs: ReceiverProxyReaderControlRequest, ReceiverProxyReaderControlResponse, ReceiverReaderInfoUpdate, ReceiverReaderDownloadProgress
  • 4 new WsMessage variants for the proxy/tunneling protocol
  • 2 sentinel constants for reader info/download progress routing

Changed Files

  • services/server/src/ws_receiver.rs — WS handler for proxied reader control requests + sentinel tunneling logic (+267 lines)
  • services/server/src/ws_forwarder.rs — forwarder-side proxy relay (+104 lines)
  • crates/rt-protocol/src/lib.rs — new protocol types and message variants
  • apps/server-ui/src/routes/streams/[streamId]/+page.svelte — reader control card integration
  • apps/shared-ui/src/components/ReaderControlPanel.svelte — shared reader control panel component

Full Changelog: server-v0.11.1...server-v0.12.0

Receiver v0.16.0

23 Mar 13:49

Choose a tag to compare

New Features

  • Admin clear-data action: New "Clear Data" button in the Admin tab that wipes subscriptions, cursors, earliest epochs, receiver mode, and DBF config while preserving server URL, token, and receiver ID — a middle ground between full factory reset and manual cleanup (#188)
    • Uses a database transaction to atomically reset non-profile fields and delete operational tables
    • Two-step confirmation UI placed between "Reset Profile" and "Factory Reset" buttons

Bug Fixes

  • Stream metrics on initial load: Fixed "Metrics unavailable" showing when first opening the receiver until unsubscribing/resubscribing — initial metrics sent during the WS handshake were lost because Svelte event listeners weren't registered yet (#189)
    • Stream metrics are now cached in the receiver backend (AppState) and exposed via a new get_stream_metrics Tauri command, fetched during loadAll() alongside other startup data
    • Cache is cleared on disconnect to stay consistent with the frontend
  • Vite dev server binding: Fixed Tauri dev server hanging by explicitly binding Vite to 127.0.0.1 instead of localhost (which may resolve to ::1 on IPv6 systems)

Receiver Backend

  • New clear_data() DB method with transactional reset of operational state
  • New get_stream_metrics control API endpoint + Tauri command for cached metrics
  • Session handling updated to cache metrics in AppState on receipt

Receiver UI

  • Admin tab: new two-step "Clear Data" confirmation button
  • Stream metrics loaded eagerly on startup via loadAll()
  • Store updated with metrics caching and clear-data state management

Full Changelog: receiver-v0.15.0...receiver-v0.16.0