CLI tools to manage BUSY Bar
Project description
BUSY Bar Tools
Command-line (CLI) tools to manage your BUSY Bar device.
- Easy to install firmware to your BUSY Bar by single command.
- Works on Linux, MacOS and Windows.
- There are no heavy dependencies.
Available as a Python package on PyPI. Source code available on GitHub.
[!WARNING] These are unofficial tools that can potentially lead to device bricking if used incorrectly. Use them at your own risk.
Installation and Upgrade
sudo apt install pipx # Ubuntu/Debian
brew install pipx # MacOS (Homebrew, https://brew.sh/)
scoop install pipx # Windows (Scoop, https://scoop.sh/)
pipx ensurepath # Optional step to ensure pipx binaries are in PATH, for all OS.
# If you haven't install `pipx` before, you will NEED to open a new terminal before continuing.
pipx install busybar-tools
pipx upgrade busybar-tools # To upgrade to the latest available version if you have it installed already.
Install in editable mode (for development): pip install -e . from the project root directory. It is recommended to use a virtual environment for that.
Usage
busybar [-d DEVICE] [-p PORT] [-t {20,21,22}] {install,cli,wait,clean}
Options:
-d,--device DEVICEBUSY Bar Device IP address (USB LAN or Wi-Fi)-p,--port PORTDevice Port (default: 23)-t,--target {20,21,22}Target hardware version. All the production BUSY Bar devices has at least 22 target.
busybar install options:
busybar install [Branch | TAG | URL | path/to/local_file.tgz]
Options only if the Update server used as a Source
These options affect only the process of selecting which bundle should be used, so it doesn't matter if the update is performed from a local file.
--unsigned: Use unsigned bundles. By default, signed bundles are used, but you can use this option to use unsigned bundles if needed. All production BUSY Bar devices must use only signed bundles.--via-http: Use HTTP API for update instead of storage.py. It's the official way, but can be unstable during development, so storage.py is used by default.--bkp- get a special recovery bundle with welcome animations from the update server instead of--update(default, regular user firmware). The--bkpbundle is intended to be used as a recovery bundle, but can also be installed as regular firmware if needed.
Options if the Update server or local file used as a Source (Any source)
--save-as-recovery: Save the update bundle as a recovery bundle on the device instead of direct install. This can be DANGEROUS if the bundle is not correct, so use it with caution. The--bkpbundle will be used automatically in that case instead of--update, but you can actually override it back.--no-invoke-update: Do not invoke update after uploading the bundle on the device. This option is automatically enabled if--save-as-recoveryis used, but can be used separately as well to just upload the bundle on the device without invoking update with--via-storage(default). Does not work if--via-httpis used, as HTTP API is used only for direct install.
Examples:
busybar install- Update to the latest firmware from thedevbranch. Signed version of the bundle will be used by default.busybar install busybar-f22-bkp_signed-dev-26032026-1e061661.tgz- Update using a local file. The file can be either.taror.tgzformat.busybar install --unsigned dev- Update to firmware from the desired branch using unsigned bundle. This can be useful for testing custom builds, but all production devices must use only signed bundles.busybar install --unsigned 0.8.1- Update to a specific TAG version (e.g.,0.8.1release).busybar install --unsigned factory- Update to firmware from the desired (e.g.,factory) branch.busybar -d 10.0.5.20 install vanyww/642-clock-app-overlay-effect- Update device with a custom address to the desired branch.busybar install https://update.flipperzero.one/builds/busybar-firmware/0.8.1/- Update using a direct URL to the folder with build artifacts.busybar -d 10.0.5.20 update- Specify a custom device IP address.
CLI terminal
busybar cli- Start a terminal session to the BUSY Bar device. PressCtrl+]to exit the session.busybar -d 10.0.5.20 -p 23 cli- Start a terminal session to the BUSY Bar device with a custom IP address and Port.
Embedded storage.py tool
busybar storage <storage.py args>- Work with BUSY Bar storage via embedded storage.py tool. You can use following commands directly: mkdir, format_ext, remove, read, size, receive, send, list.
Other options:
busybar wait: Wait for the device to be available. This can be useful for scripting.busybar install --save-as-recovery 0.8.1- Write factory bundle to the recovery partition. This is a DANGEROUS operation, as it can potentially brick the device. Usage is not recommended for regular users.
Changelog
Upcoming features plan
- Easy recovery via DFU from any possible broken state
- Factory reset
- ...create an issue for any feature requests or bug reports!
0.7.0
- Windows support (cli, install, storage)
0.6.1
- Embedded storage.py tool to manage storage of your device from any terminal with
busybar storage <storage.py args>command. You can use following commands directly: mkdir, format_ext, remove, read, size, receive, send, list.
0.6.0
- Default U5_TARGET_HW is 22, that corresponds to the production BUSY Bar devices. Default firmware bundle is
--updateand--signed.
0.5.2
- Fix a bug with installing from local dir.
0.5.1
- Support of Directory as a Source.
--download-onlyand--unpack-onlyoptions forbusybar installcommand to just download or unpack the bundle without invoking update. The--download-onlyoption is only applicable if the Update server used as a Source, while--unpack-onlycan be used with any source.- Return back invokation of the update from the recovery bundle already located in
/bkp/recoveryon the device with--recoveryarg.
0.5.0
busybar updateandbusybar update-storagecommands now changed tobusybar install(breaking change):- Support for both signed and unsigned bundles. By default, signed bundles are used, but you can use the
--unsignedoption to use unsigned bundles if needed. All production BUSY Bar devices must use only signed bundles. - Progress bar when downloading update files from the update server.
- Using storage.py transport by default, but can be overridden with
--via-httpoption. - Default bundle is
--update(regular user firmware), but can be overridden with--bkp(recovery bundle, with welcome animations). - Added
--save-as-recoveryoption to save the update bundle as a recovery bundle. Both--updateand--bkpbundles can be saved as recovery; intentionally only--bkpis meant to be used as a recovery bundle. .tarand.tgzformats are supported for update bundles now, with fallback to.tarif.tgzis not available in the source.- You can use any locally saved update bundles as a source now. It is actually possible to install it as regular firmware or as a recovery bundle with
--save-as-recovery.
- Support for both signed and unsigned bundles. By default, signed bundles are used, but you can use the
0.4.0
- Python 3.8 compatibility. Python 3.8 is the minimum required version now.
- wait_for_device(): now in single line, calc seconds.
0.3.2
- Force enable debug mode before invoking update from recovery. Useful if the device does not allow to start update from recovery due to low battery level. This can potentially lead to bricking the device, so use it with caution.
0.3.1
- Fix a bug with device path creation in
busybar update-storagecommand.
0.3.0
- Fixed CLI
busybar cli: now it properly works with auto-complete and history navigation with arrow keys. - Update via storage.py
busybar update-storage. There is a DANGEROUS option that allows rewriting the device recovery bundle by using the--save-as-recovery-onlykey. - Invocation of update from
/bkp/recoveryviabusybar update-recoverycommand. - Wait for device available before any operations.
0.2.0
- CLI terminal session to device available via
busybar clicommand - Improved file path handling to more reliably locate update files
0.1.0
- Initial release (basic functionality for firmware update)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file busybar_tools-0.7.0.tar.gz.
File metadata
- Download URL: busybar_tools-0.7.0.tar.gz
- Upload date:
- Size: 64.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c95650c15f2094e92204a317149f6b61057a455a7c6a11707dc37fa872c2acc1
|
|
| MD5 |
170ca9c9b1e906add5a80b5740dd310a
|
|
| BLAKE2b-256 |
77ecd66ce8a1cad57ff4c7226b0b57938e490186229945e1a6f30f23a3dceaff
|
File details
Details for the file busybar_tools-0.7.0-py3-none-any.whl.
File metadata
- Download URL: busybar_tools-0.7.0-py3-none-any.whl
- Upload date:
- Size: 53.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
68add6e7ae13af784114e905a1eed0a8dc8f03ca37ddbda1ce3082ebaa25fc97
|
|
| MD5 |
d09ee42f9d74ab6b755f3c21fdc72c67
|
|
| BLAKE2b-256 |
efc5ba4eea78724cb09369355514a40e941a811b8ceaa727363df9b83f1b3315
|