Skip to content

BotWave

Home Automation

A Raspberry Pi‑based tool for broadcasting audio over FM radio, supporting single devices and multi‑Pi networks with remote control and live streaming

Python Latest v1.1.6-neea · 5h ago Security brief →

Features

  • Standalone client for single‑Pi FM broadcasting without a server
  • Server‑client architecture to manage multiple Raspberry Pi clients centrally
  • Broadcast audio files (MP3, WAV, FLAC, AAC, etc.) with automatic format conversion
  • Remote management: start, stop, and control broadcasts from the server

Recent releases

View all 23 releases →
Config change
v1.1.6-neea Breaking risk
Breaking upgrade

Transaction ID + remote log isolation

v1.1.5-erycibe Breaking risk
⚠ Upgrade required
  • Update using `bw-update --to v1.1.5-erycibe`
  • dlogger dependency bumped to version 1.0.5 (no operational impact required)
Breaking changes
  • `BWCUSTOM_PATH` removed – use `BACKEND_PATH` instead.
Notable features
  • New env vars `LOG_TIME`, `LOG_TIME_FORMAT`, and `LOG_FILE` for timestamped log output to a file
  • `broadcast`/`live` command now correctly parses RT and PI arguments with spaces
  • `exit` over WebSocket properly closes the connection
Full changelog

What Changed

  • Log timestamps & file output: New LOG_TIME, LOG_TIME_FORMAT, and LOG_FILE env vars let you add timestamps to logs and save them to a file.
  • BWCUSTOM_PATH removed: The deprecated BWCUSTOM_PATH variable has been fully dropped. Use BACKEND_PATH.
  • broadcast / live command fix: RT and PI arguments are now parsed correctly. Previously, RT values with spaces would break the PI code.
  • exit over WebSocket: Typing exit in a remote session now properly closes the connection instead of being blocked.
  • WebSocket disconnect handling: Unexpected client disconnections no longer throw an error.
  • Miscellaneous: dlogger dependency bump to 1.0.5.

Breaking Changes

[!CAUTION]
BWCUSTOM_PATH has been removed. Please migrate to BACKEND_PATH.

Updating to this version

To update to this version, run the following command:

bw-update --to v1.1.5-erycibe
Commit history
  • =--- v1.1.5-erycibe ---= (c5b3d67)
  • docs: added Awesome Selfhosted to Botwave mentions (c00eeec)
  • Merge pull request #65 from dpipstudio/logger-update (fb4f949)
  • shared,logger.py: added environment variables to customize dlogger settings (05f1e52)
  • assets,installation.json: bumped dlogger version to 1.0.5 (9ae0d4d)
  • shared,ws_cmd.py: cleaner output when client leave the server (642f1a3)
  • shared,ws_cmd.py: handling 'exit' command to close the websocket connection server-side (46a171b)
  • local: fixed odd parsing for the "live" command (0a0b58f)
  • local: fixed odd parsing for the "start" command (2ea5605)
  • .github: updated the version field of the bug report template (cd5c541)
  • shared,syscheck.py: removed the usage of BWCUSTOM_PATH (f19fd30)
  • shared,bw_custom.py: removed the usage of BWCUSTOM_PATH (733ac47)
  • Update installation.json for release v1.1.4-chione (50e6598)
v1.1.4-chione Breaking risk
⚠ Upgrade required
  • `BWCUSTOM_PATH` is deprecated; setting it will emit a warning. Use `BACKEND_PATH` instead.
Breaking changes
  • `BWCUSTOM_PATH` is deprecated and will be removed in a future release; migrate to `BACKEND_PATH`.
Notable features
  • All three components now accept `--config <file>` flag to load configuration at startup.
  • Added `BACKEND_MIN_FREQ` and `BACKEND_MAX_FREQ` env vars to configure backend frequency range.
  • `BACKEND_BYPASS_CACHE` flag added to skip cached backend path and force a fresh search.
Full changelog

What Changed

  • --config flag: All three components now accept --config <path> to load a config file into the environment at startup. See the wiki.
  • BACKEND_PATH: BWCUSTOM_PATH is deprecated in favor of BACKEND_PATH. A warning will be shown if the old variable is still set.
  • Frequency range: BACKEND_MIN_FREQ and BACKEND_MAX_FREQ let you configure your backend's allowed frequency range.
  • BACKEND_BYPASS_CACHE: Skips the cached backend path and forces a fresh search.
  • DOWNLOAD_UA: Overrides the user agent used when downloading files (was already there on bw-client, added it to bw-local).
  • Miscellaneous: Internal env file parser cleanup and a piwave dependency bump.

Breaking Changes

[!WARNING]
BWCUSTOM_PATH is deprecated and will be removed in a future release. Please migrate to BACKEND_PATH.

Updating to this version

To update to this version, run the following command:

bw-update --to v1.1.4-chione
Commit history
  • =--- v1.1.4-chione ---= (6f81bc7)
  • Merge pull request #64 from dpipstudio/piwave-2.1.13 (926a281)
  • docs: updated readme and other specific documentations (3c334bc)
  • client: added --config flag (5e53f02)
  • local: added --config flag (fb0eeed)
  • server: added --config flag (7f07ca0)
  • shared,env.py: fixed some bugs (4562848)
  • client: supporting correctly custom backends (bdda819)
  • local: supporting correctly custom backends (7feb0a8)
  • shared,syscheck.py: deprecated bwcustom_path and using backend_bypass_cache (7465c49)
  • shared,bw_custom.py: removed support for bwcustom_path in self.name (56d15a6)
  • updated piwave to 2.1.13 (0d90708)
  • client: using piwave's 2.1.13 new force_search and unsafe constructor parameters (8c8e0ee)
  • local: using piwave's 2.1.13 new force_search and unsafe constructor parameters (0bb8f68)
  • shared,bw_custom.py: deprecated BWCUSTOM_PATH to introduce a new BACKEND_PATH, additionally dynamically updates the backend name based on the same var. (ba6c7f4)
  • shared,bw_custom.py: added BWCUSTOM_MIN_FREQ and BWCUSTOM_MAX_FREQ env vars usage (4694e33)
  • local: using the "DOWNLOAD_UA" env variable (bc2f28e)
  • Update installation.json for release v1.1.3-aria (4eb3715)
v1.1.3-aria New feature
⚠ Upgrade required
  • Update with `bw-update --to v1.1.3-aria`.
  • ALSA device string can be individually controlled using env vars `ALSA_INTERFACE`, `ALSA_CARD`, and `ALSA_DEVICE`.
Notable features
  • New `status` command shows broadcast state on local client and allows server queries (`status all` or specific target).
  • Protocol version bumped to 2.1.2, adding the STATUS command.
  • Custom command wildcards: `#!/*/ ` in `.cmd` files now target both server and local client.
Full changelog

What Changed

  • status command: Shows broadcast state (file, frequency, uptime) on the local client. On the server, you can query clients with status all or a specific target.
  • Flexible ALSA config: ALSA_INTERFACE, ALSA_CARD, and ALSA_DEVICE env vars now individually control the ALSA device string.
  • Custom command wildcards: Use #!/*/<command> in .cmd files to target both server and local client with one script.
  • Protocol version: Bumped to 2.1.2 by adding the STATUS command.

Updating to this version

To update to this version, run the following command:

bw-update --to v1.1.3-aria
Commit history
  • =--- v1.1.3-aria ---= (0c2f5f9)
  • docs: updated server and local docs (d325cfb)
  • server: added a newline (8d19ba7)
  • server: added the 'status' command (ea7362c)
  • local: updated display (485d193)
  • client: fixed f-string (f8080ee)
  • client: handling the STATUS command (12fb836)
  • shared,protocol.py: Protocol 2.1.2, adds the STATUS command (7ab9d9d)
  • local: fixed f-string error on status command (4dbd01c)
  • local: added status command (d6c7470)
  • updated readme cloud pages (10f3919)
  • Merge pull request #60 from dpipstudio/alsa-customization (d1a89df)
  • server,local: Updated alsa logs (7ade7e0)
  • shared,alsa.py: added ALSA_INTERFACE and ALSA_DEVICE env vars (c64de8a)
  • Merge pull request #59 from dpipstudio/ccmd-fix (236e9bd)
  • shared,custom_cmds.py: Allowing the use of wildcards (*) instead of 'local' or 'server' (cee260e)
  • nobody saw that (tm) (5e59aa3)
v1.1.2-stellata Breaking risk
Notable features
  • Define custom commands from .cmd files in the handlers directory; they appear in `help` and execute like built‑ins.
  • New handler events `l_onwsjoin` and `l_onwsleave` fire on WebSocket client connect/disconnect.
  • Handler scripts receive `BW_ARGV{n}` environment variables for each argument of the last executed command.
Full changelog

What Changed

  • Custom commands: You can now define your own commands directly from the handlers directory. Any .cmd file with the right shebang will show up in help and run like a built-in command. Wiki page
  • WebSocket join/leave handlers: New l_onwsjoin and l_onwsleave handler events fire when a remote client connects or disconnects from the local client's WebSocket.
  • Command arguments in handlers: Handler scripts now receive BW_ARGV{n} environment variables containing each argument of the last executed command.
  • Custom shell interpreter: A new CMD_INTERPRETER environment variable lets you specify which shell to use when running shell and pipe commands (< and |).
  • IP redaction fix: The IP address redaction is softer to catch edge cases (like the clients IDs).

Updating to this version

To update to this version, run the following command:

bw-update --to v1.1.2-stellata
Commit history
  • =--- v1.1.2-stellata ---= (4a50ab9)
  • Merge pull request #58 from dpipstudio/cmd-interpreter (4175cbc)
  • local: supporting the CMD_INTERPRETER env key for '<' and '|' commands (016e1e5)
  • local: fixed pipe command execution (363ea0c)
  • server: small fix (d082ecc)
  • server: better shell output managment (c0a5cc8)
  • server: supporting the CMD_INTERPRETER env key for '<' and '|' commands (b6de4da)
  • readme: added nightrunners in the mentions section (4848196)
  • Merge pull request #57 from dpipstudio/custom-cmd (33ccd80)
  • local: implemented custom commands (30e49b5)
  • shared,custom_cmds.py: stop parsing help after the last # (85a329a)
  • server: implemented custom commands (71c3b0b)
  • shared,custom_cmds.py: supporting help indentation now (56bf13c)
  • shared,custom_cmds.py: basic implementation of custom commands (d58aac3)
  • Merge pull request #56 from dpipstudio/env_hdl_args (ec3accc)
  • docs: updated handlers.md (9530b2b)
  • local: added missing onwsjoin/leave handlers (c0eaee0)
  • server: bw_argv -> BW_ARGV (9d0c9ad)
  • server: added BW_ARGV{n} environment key to handlers execution (0655784)
  • local: added BW_ARGV{n} environment key to handlers execution (31a1ec3)
  • .github,bug-report.yaml: updated the os examples (dd4c62a)
  • .github,other-issue.md: removed the "Other issue" form, just fill a blank issue (eb01d36)
  • .github,feature-request.yml: switched to a yaml form for features requests (a084c62)
  • .github,bug-report.yaml: switched to a yaml form for bug reports (5c46925)
  • hopefully fixed #55 (66a1d65)
  • shared,logger.py: be more flexible on ipv4 redacting (fe7e32a)
  • Update installation.json for release v1.1.1-malosma (fa4523b)

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

About

Stars
129
Forks
5
Languages
Python Shell

Install & Platforms

Install via
shell-script
Platforms
linux

Beta — feedback welcome: [email protected]