Skip to content

Releases: httpsterio/gotempo

v2.1.0

Choose a tag to compare

@github-actions github-actions released this 15 Sep 17:35

Compatibility

gotempo 2.1.0 pairs with gotempo-sl-module 2.1.0. The module's strap picker needs this release to tell a slow scan apart from gotempo not running; with gotempo 2.0.0 it reports gotempo not running. The 2.0.0 releases keep working with each other. Update both.

Changes

  • The strap picker's scan request is acknowledged before scanning starts, so the module can wait for a slow scan instead of giving up.
  • Logging controls stay in the tray menu when the ITGmania module is set. They are greyed out only while a player's profile drives that slot. Hiding them removed the OBS toggle and the CSV control for configured straps.
  • Linux: at login gotempo waits up to 30 seconds for the desktop tray before registering. The "failed to register" error logged on every boot is gone. If no tray appears, the log says so once. On GNOME the tray needs the AppIndicator and KStatusNotifierItem Support extension.
  • Documentation: scan acknowledgement, players.txt timing, Linux install from a terminal.

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 12 Sep 21:01

gotempo now supports two straps at once and works as a ITGmania arcade setup as well as a single-user desktop app.

ITGmania setup requires the gotempo-sl-module 2.0 or later.

Two players

Follow two heart-rate straps simultaneously, for a two-player cabinet or for
recording two people together. Off by default and free when unused. Each strap
gets its own outputs: gotempo-bpm-p2.txt for OBS, its own CSV, its own panel in
game. The first strap's filenames never change, so existing setups keep working.

Straps follow the player, not the machine

A player names their own strap in their ITGmania profile and gotempo follows it
while they play, on whichever side they join. Readings are gated on the strap
they named, so one person's heart rate can never be drawn as another's. Nothing
is written to config.json, so quitting hands every slot back to whatever the
tray is set to.

Two players may name the same strap. gotempo connects it once and feeds both
sides.

Connections outlive assignments

Straps are pooled and keyed by MAC rather than owned by a slot. Walking back to
the main menu, restarting ITGmania, or swapping from P1 to P2 no longer costs a
reconnect — previously each of those meant roughly 30 seconds with no readings.

A released strap keeps its connection so rejoining is instant, bounded by two
budgets: strap_hold_minutes (20) while it is still sending readings, and
strap_lost_minutes (5) once it has gone quiet. Pool caps at four.

In-game strap picker

Players pick their strap from a menu on the song wheel instead of finding a MAC
address at a terminal, and it is written into their own profile. Requires
gotempo-sl-module 2.0.

Cabinet behaviour

With itgmania_module set, the OBS and CSV controls are hidden — neither is what
that install is for. While a profile is driving a slot, no CSV is written, no
loss or reconnect notifications fire, and the tray controls the game has taken
over are greyed out with a line saying why.

New config keys

strap_hold_minutes, strap_lost_minutes, current_p2, two_player. All
optional, all defaulted; an existing config.json is upgraded in place.

Compatibility

Nothing breaks for an existing single-strap user. File names, the CLI and the
tray are unchanged.

Pair with module 2.0. An older module works with gotempo 2.0 minus the strap
picker. The new module with gotempo 1.2 shows "gotempo is not running" in the
picker, because 1.2 does not answer scan requests.

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 06 Sep 13:15
gotempo v1.2.0

v1.1.0

Choose a tag to compare

@github-actions github-actions released this 06 Sep 08:17
gotempo v1.1.0

v1.0.7

Choose a tag to compare

@github-actions github-actions released this 16 Jun 23:41

Changes since v1.0.6.

This release completes the command-line / headless interface and fixes
two logging behaviors found in testing.

New

  • CLI is now feature-complete. On top of the existing
    --no-tray/--print-bpm/--status/--list-devices, this adds:

    • --autostart / --no-autostart: enable or disable launch-on-login
      from the command line (the CLI twin of the tray's "Start on boot").
    • --device <mac>: set the current device by MAC (case and :/-
      normalized), then run.
    • --select-device: interactive picker — known devices first, with an
      on-demand scan. Needs a terminal.
    • --auto-log / --no-auto-log: force session logging on or off for
      this run, without editing the config.
    • --log-level error|info|debug and --quiet: control how much
      gotempo logs to stderr.

    --device and --select-device set the device in config then start a
    normal run; the rest behave as before. See the README for the full
    table and exit codes.

Changed

  • Headless runs log by default. --no-tray now starts session
    logging automatically, so a service actually records without extra
    flags. Combine --no-tray --print-bpm to log and stream;
    --no-auto-log opts out. A bare --print-bpm still only streams.

Fixed

  • Stop logging clears the BPM overlay file. gotempo-bpm.txt now goes
    empty the moment you stop logging, instead of freezing on the last
    value until the strap disconnected. OBS overlays clear as expected.
  • --status no longer reports a stale state at startup. A fresh launch
    publishes its status before connecting, so gotempo --status run right
    after start can't read the previous run's leftover reading.

No action needed to upgrade. Replace the binary (or re-run install.sh);
your config and data carry over.

v1.0.6

Choose a tag to compare

@github-actions github-actions released this 16 Jun 00:43

Changes since v1.0.5.

New

  • CLI / headless mode. gotempo can now run without the tray and answer
    one-shot queries, for systems with no tray and for scripts and status bars.
    With no flags it still runs in the tray as before.

    • --no-tray: run headless (connect + log per config) until SIGINT/SIGTERM.
      Suitable as a systemd user service. Needs a device set in config.json.
    • --print-bpm: stream each reading to stdout (implies --no-tray). Time is
      hh:mm:ss by default, --epoch for unix seconds, --timestamp for RFC3339.
    • --status: report the running app's state and exit — connection, a coarse
      phase (idle / connecting / reconnecting / connected), logging on/off, current
      BPM, and device. Reads the running instance's published state, so it never
      touches the BLE connection and is safe to poll from a status bar. Plain output
      is one line (connected, 61 bpm, Polar H10, logging off); --json gives the
      full state. Exits non-zero when not connected or not running.
    • --list-devices: scan for HR monitors, print them, exit.
    • --json: machine-readable output for --status, --print-bpm,
      --list-devices.
    • --config <path>: use a config file at a custom path.
    • --version / -v, and a grouped --help.
  • Self-documenting config. config.json is now created on first run with
    every key at its default, and each value is validated on load: a missing,
    malformed, or out-of-range entry is reset to its default and the file rewritten,
    so it never silently holds a value the app ignores. The CSV keys
    (session_gap_minutes, min_bpm_threshold) and auto_log are now always
    present rather than hidden until set.

Changed

  • CSV timestamps now have millisecond precision. Straps reporting at ~1 Hz
    may not be aligned to whole seconds, so second-resolution timestamps made genuine
    readings look like duplicate-or-missing rows. Each reading now gets a distinct,
    honest timestamp. Existing files still parse; the change applies to new rows.

Other

  • The project is now licensed under the GNU GPL v3 (LICENSE.md).
  • README, CONTRIBUTING, and the plan docs updated for the CLI, the status file,
    and config behavior.

No other action needed to upgrade. Replace the binary (or re-run install.sh); your
config and data carry over (the config gains its default keys on first launch).

v1.0.5

Choose a tag to compare

@github-actions github-actions released this 14 Jun 14:46

Changes since v1.0.4.

  • CSV session logging. While logging is on, gotempo now writes a per-session
    CSV to ~/.local/share/gotempo/sessions/, one timestamp,bpm row per
    reading, alongside the existing gotempo-bpm.txt OBS file. A new file starts
    after an idle gap; shorter breaks append to the current session. Readings below
    a contact threshold are skipped, so dropouts appear as gaps in the timestamps
    rather than junk rows. Files are crash-safe (readable mid-session) and named by
    the session's first reading.

  • Two new optional config keys:

    • session_gap_minutes (default 60): idle span that ends a session. A longer
      gap starts a new file, a shorter one continues the current session.
    • min_bpm_threshold (default 20): validity floor. Readings below it are
      treated as no-contact noise and left out of the CSV.

    Both are optional; existing configs keep working unchanged.

Fixed

  • Toggle-off race. Stopping logging can no longer leave a stray one-row
    session file behind if a reading lands at the same moment.

Improved

  • Self-diagnosing reconnect logging. The persistent reconnection phase is no
    longer silent: a "still scanning" / "back in range after N" heartbeat, session
    length logged on a drop, and the previously-swallowed connect/discovery error
    is now surfaced. Makes the rare "won't reconnect after a long idle" case
    leave usable evidence.

Internal

  • Restructured the code into an internal/app package (the repo root is now a
    small main.go shim), laying the groundwork for macOS and Windows support.
  • Repo tidy: docs moved under docs/, installer scripts under scripts/, and
    the desktop entry is generated at install time instead of stored in the tree.
  • README and CONTRIBUTING updated for the new layout and CSV logging.

No action needed to upgrade. Replace the binary (or re-run install.sh); your
config and data carry over.

v1.0.4

Choose a tag to compare

@github-actions github-actions released this 10 Jun 21:02

Reconnection and BPM-file handling fixes for when the strap drops.

Changes

  • The app no longer needs a relaunch after a disconnect; it keeps retrying and
    reconnects on its own.
  • After a longer dropout it scans continuously instead of every 30 seconds, so
    it reconnects within a few seconds of the strap reappearing.
  • The BPM file keeps the last reading for ~10s across a brief dropout, then
    clears if the disconnect lasts longer, so the file no longer holds a stale
    number indefinitely.
  • Switching devices clears the BPM file immediately.
  • Rescan and device-switching still work while the app is reconnecting.

Notes

  • Continuous reconnect scanning uses a bit more radio time while the strap is
    missing; it stops on reconnect.
  • No config changes. Existing config.json files work unchanged.

Upgrade

Download the tarball and run ./install.sh, or make install from source.
Saved devices and preferences are kept.

v1.0.3

Choose a tag to compare

@github-actions github-actions released this 10 Jun 10:44

v1.0.3

  • Fix a race condition where concurrent calls to StopScan from the timeout and a device-match callback could panic on a double close when both fired in the same instant.
  • Reduce the reconnection poll interval after the initial retry from 60s to 30s so re-appearing devices are picked up faster.

Install

Unzip the tar.gz and run install.sh to create the shortcut and move the binary. You can also just run the gotempo binary directly.

v1.0.2

Choose a tag to compare

@github-actions github-actions released this 08 Jun 14:24
gotempo v1.0.2