Skip to content

Releases: Loomwave/lorascan

lorascan 0.1.31

lorascan 0.1.31 Pre-release
Pre-release

Choose a tag to compare

@loomwave-engineering loomwave-engineering released this 24 Sep 08:51
4d95cc5

If you decode Loomwave traffic, upgrade. The Loomwave fleet moved to SF11/BW500 on 2026-09-24 (the #451 flag day — the 500 kHz mode that qualifies under FCC Part 15.247). The built-in loomwave/fleet preset still said SF9/BW125, so a decode at 911.5 MHz silently stopped naming Loomwave traffic.

  • loomwave/fleet is now SF11/BW500.
  • New loomwave/fleet-pre451 (SF9/BW125, 911.5 MHz) keeps the retired PHY decodable: boards flashed before the flag day keep transmitting it until reflashed, and finding them is useful during the cutover. A scan at 911.5 MHz tries both.
  • loomwave/bench-cell (905.0 MHz) moves to SF11/BW500.

Also in this release:

  • Fix (#13): on a calibrated board, the recommended-500 kHz-slot floor now reads in the same dBm units as the quietest-channels table. The pick itself was already correct.
  • CI (#28): every push and PR is tested on Python 3.11, 3.12 and 3.13, plus a wheel install check.

Install: pip install lorascan-0.1.31-py3-none-any.whl (attached).

lorascan 0.1.30

lorascan 0.1.30 Pre-release
Pre-release

Choose a tag to compare

@loomwave-engineering loomwave-engineering released this 19 Sep 01:08
5e7dbad

Closes #25 (pinztrek): first-boot setup from a cron job or balena start script, no prompts.

0.1.30

  • lorascan setup --non-interactive (explicit opt-in; the wizard is unchanged without it): pins + location from --from openhop|meshtasticd --config PATH (or --profile NAME); --cell LAT,LON, --endpoint URL (default share.lorascan.app), --granularity; --skip-radio for boot scripts (skips preflight/probe/self-test/first-light); --dry-run.
  • Idempotent: loads the existing config, merges the flags — setup: unchanged (exit 0, no radio or network call) / setup: updated <field> / setup: written. Changing --from re-imports the profile (auto-<source>). An unanswered question exits 2 naming the flag; a failed step exits 1.
  • Fixes a latent wizard bug: autoconf's 3-tuple location now normalised on the interactive path too.
  • FlagsIO + run_noninteractive(); 17 new tests (fail-first); suite 324 passed; bench Python 3.11.2 compileall + end-to-end smoke on the target interpreter.

Install: pipx install --system-site-packages https://github.com/Loomwave/lorascan/releases/download/v0.1.30/lorascan-0.1.30-py3-none-any.whl

lorascan 0.1.29

lorascan 0.1.29 Pre-release
Pre-release

Choose a tag to compare

@loomwave-engineering loomwave-engineering released this 19 Sep 00:15
fc52e86

Closes #22 (pinztrek): balena repeaters run a read-only rootfs with only /data writable.

0.1.29

  • Global -d/--data-dir DIR (before the subcommand) and LORASCAN_DIR for units; precedence flag > env > legacy.
  • With it set: station config, board profiles, networks.yaml, the share token and every default-named output (lorascan.db, lorascan-report.html, lorascan-share.json, calibrated profile, auto's profile) live under DIR; missing subfolders created. A path passed explicitly is used as given (parent created).
  • Reads fall back to the legacy ~/.config/lorascan once (token/config carry over); writes go only to DIR. auto forwards -d to its scan/share re-entries; module names TOKEN_PATH/PROFILE_DIRS/USER_NETWORK_PATHS/USER_PATH resolve live.
  • An unwritable or missing DIR is one clean lorascan: … line (OSError / sqlite OperationalError handled), never a traceback.
  • New lorascan/paths.py; tests/test_paths.py (29 tests, fail-first); suite 304 passed; bench Python 3.11.2 compileall + -d/LORASCAN_DIR smoke OK on the target interpreter.

Install: pipx install --system-site-packages https://github.com/Loomwave/lorascan/releases/download/v0.1.29/lorascan-0.1.29-py3-none-any.whl

lorascan 0.1.28

lorascan 0.1.28 Pre-release
Pre-release

Choose a tag to compare

@loomwave-engineering loomwave-engineering released this 18 Sep 21:32
3881ed9

Matt (2026-09-18): nothing in the README or the tool pointed users at share.lorascan.app to see results — every mention was an upload target, and the README still said the endpoint "is being deployed".

What changes (0.1.28)

  • README: new "The community map (share.lorascan.app)" section (what is there, how to upload, /v1/dump.json / /v1/dump.csv); stale "being deployed" line fixed.
  • share / upload / auto: print [share] view: https://…/ after a successful upload (new share.share_view_url(to), strips a /v1/share route to the map root).
  • lorascan --help epilog names the map; HTML report footer links to it; setup says where uploads are published.
  • Tests: tests/test_share_view_url.py (helper cases + README guard). Suite 274 passed; bench Python 3.11.2 compileall gate OK.

Install: pipx install --system-site-packages https://github.com/Loomwave/lorascan/releases/download/v0.1.28/lorascan-0.1.28-py3-none-any.whl

lorascan v0.1.27

lorascan v0.1.27 Pre-release
Pre-release

Choose a tag to compare

@loomwave-engineering loomwave-engineering released this 16 Sep 21:27
a28f53f

Fix. 0.1.26 dropped the auto-range legend colour swatch to fix an overlap; this restores the gradient, positioned to the left of the "busy X% -> Y%" text so the swatch and label no longer collide. Applies to both the band summary and the 500 kHz ribbon.

Install:

pipx install --system-site-packages https://github.com/Loomwave/lorascan/releases/download/v0.1.27/lorascan-0.1.27-py3-none-any.whl

lorascan v0.1.26

lorascan v0.1.26 Pre-release
Pre-release

Choose a tag to compare

@loomwave-engineering loomwave-engineering released this 16 Sep 20:42
6a81ecc

Fix. The auto-ranged band-summary legend on the community page had a colour swatch overlapping the "auto-ranged" text. It is now text-only (busy X% -> Y% - colour auto-ranged), matching the 500 kHz ribbon.

Install:

pipx install --system-site-packages https://github.com/Loomwave/lorascan/releases/download/v0.1.26/lorascan-0.1.26-py3-none-any.whl

lorascan v0.1.25

lorascan v0.1.25 Pre-release
Pre-release

Choose a tag to compare

@loomwave-engineering loomwave-engineering released this 16 Sep 20:35
989e318

Band-summary auto-range legend. The community page auto-ranges the band-summary colours (since 0.1.24) but did not say what range it mapped to. This adds the same "busy X% → Y%" legend and colour swatch the 500 kHz ribbon prints, so a relatively-coloured band names its range instead of leaving the reader to guess. band_svg(auto_range=True) only — the absolute-scale per-station report is unchanged.

Install:

pipx install --system-site-packages https://github.com/Loomwave/lorascan/releases/download/v0.1.25/lorascan-0.1.25-py3-none-any.whl

lorascan v0.1.24

lorascan v0.1.24 Pre-release
Pre-release

Choose a tag to compare

@loomwave-engineering loomwave-engineering released this 16 Sep 20:25
3114509

Community share page — "Best 500 kHz slot" ribbon. When any submitter has scanned at 500 kHz bandwidth, share.lorascan.app now ranks and draws the fixed .250/.750 grid of 52 coordination channels as a static ribbon (recommended channel ringed, exclusion-zone channels struck, hover for busy/floor). No 500 kHz data yet? It shows how to populate it.

Auto-ranged colours. Channel colours — the ribbon and the community band-summary strip — now normalize to the data's actual busy spread, so a quiet band no longer renders every bar the same pale colour. The per-station report is unchanged.

Bulk export documented. /v1/dump.json and /v1/dump.csv (from 0.1.22) are now written up in the share-server deploy README.

Install:

pipx install --system-site-packages https://github.com/Loomwave/lorascan/releases/download/v0.1.24/lorascan-0.1.24-py3-none-any.whl

lorascan v0.1.23

lorascan v0.1.23 Pre-release
Pre-release

Choose a tag to compare

@loomwave-engineering loomwave-engineering released this 16 Sep 19:45
59af980

Grid-aligned 500 kHz recommendation. lorascan report --recommend-grid ranks the fixed .250/.750 grid of 52 non-overlapping 500 kHz channels (902.25, 902.75, … 927.75 MHz) — the coordination grid MeshCore-500 deployments share so neighbours interoperate — instead of a free window. Each grid channel is scored worst-case from the true 500 kHz-bandwidth energy that falls in it, with exclusion-zone channels struck (including the 902.25/902.75 band-edge pair), so the pick is the cleanest usable grid channel. Without the flag, the free-grid recommendation is unchanged.

Install:

pipx install --system-site-packages https://github.com/Loomwave/lorascan/releases/download/v0.1.23/lorascan-0.1.23-py3-none-any.whl

lorascan v0.1.22

lorascan v0.1.22 Pre-release
Pre-release

Choose a tag to compare

@loomwave-engineering loomwave-engineering released this 16 Sep 19:31
3b5d794

Community share server: bulk data dump. Adds bandwidth-aware bulk export so the community and researchers can pull the raw fleet aggregates for their own analysis (the blended /v1/map.json hides bandwidth).

  • GET /v1/dump.json — every unflagged per-(submitter, freq, bandwidth) aggregate row (including bw_hz) plus submitter metadata.
  • GET /v1/dump.csv — the same rows as CSV.

Flagged (miscalibrated) uploads are excluded, matching the public map. Stdlib only.

Install:

pipx install --system-site-packages https://github.com/Loomwave/lorascan/releases/download/v0.1.22/lorascan-0.1.22-py3-none-any.whl