Dual-language README (English & Russian)
Version: Whatsminer API v3.0.1
⚠️ Do not use docs/code from v2.5.. — protocol is incompatible.
whatsminercli lets you execute any command from Whatsminer API v3.0.1.
It automatically generates ts + token for set.*, fetches salt when needed, and encrypts parameters for sensitive commands.
The package also exposes a small Python API so you can call miners from your own scripts.
- CLI flags for parameters (mutually exclusive):
--param VALUE→ scalar value (int/float/bool/string)--param-json JSON→ structured parameter (object/array)--param-file FILE.json→ parameter from JSON file
Python 3.8+
# Install from the repository root
pip install . # or: pip install -e . for editable mode
# Default AES backend
pip install pycryptodome
# Alternative backend
pip install pycryptodomex{
"host": "192.168.1.2",
"port": 4433,
"login": "super",
"password": "passw0rd"
}whatsminercli [--config miner-conf.json] <subcommand> [options]
# or
python -m whatsminer_cli [--config miner-conf.json] <subcommand> [options]from whatsminer_cli import call_whatsminer, DEFAULT_PORT
response = call_whatsminer(
host="192.168.1.2",
port=DEFAULT_PORT,
account="super",
account_password="passw0rd",
cmd="get.device.info",
param="miner",
)
print(response)This project is licensed under the Apache License 2.0. See LICENSE.
We follow the Python Community Code of Conduct. See CODE_OF_CONDUCT.md.
- ✅ Package metadata in
pyproject.toml(name, version, description, license, classifiers). - ✅
README.mdas long description and rendered correctly on PyPI. - ✅
LICENSEandCODE_OF_CONDUCT.mdincluded in the repository. - ✅ Ensure a unique project name on PyPI and bump the version for each release.
- ✅ Build and verify the distribution:
python -m buildandtwine check dist/*. - ✅ Upload to TestPyPI first:
python -m twine upload --repository testpypi dist/*. - ✅ Then publish to PyPI:
python -m twine upload dist/*. - ✅ Add
project.urls(Homepage/Repository/Issues) for discoverability.
| Command | Description |
|---|---|
get-salt |
Retrieve salt via get.device.info |
call |
Execute any API command |
For
set.*commands the tool will auto-fetchsaltif not provided.
whatsminercli --config miner-conf.json get-saltwhatsminercli --config miner-conf.json call get.device.info --param minerwhatsminercli --config miner-conf.json call set.miner.power --param 3200
# or: --param-json '{"power":3200}'whatsminercli --config miner-conf.json call set.miner.power_limit --param 3300
# or: --param-json '{"limit":3300}'whatsminercli --config miner-conf.json call set.miner.power_mode --param 1
# or: --param-json '{"mode":1}'whatsminercli --config miner-conf.json call set.miner.power_percent --param 85
# or: --param-json '{"percent":85}'whatsminercli --config miner-conf.json call set.miner.fan_speed --param 4800
# or: --param-json '{"fan":4800}'whatsminercli --config miner-conf.json call set.miner.fan_auto --param true
# or: --param-json '{"auto":true}'whatsminercli --config miner-conf.json call set.miner.freq --param 580
# or: --param-json '{"freq":580}'whatsminercli --config miner-conf.json call set.miner.boost --param false
# or: --param-json '{"enable":false}'whatsminercli --config miner-conf.json call set.miner.pools --param-file pools.jsonpools.json:
{
"pools": [
{ "url": "stratum+tcp://pool1.example.com:3333", "user": "wallet.worker1", "pass": "x" },
{ "url": "stratum+tcp://pool2.example.com:3333", "user": "wallet.worker2", "pass": "x" }
]
}whatsminercli --config miner-conf.json call set.user.change_passwd --param-json '{"old_pass":"passw0rd","new_pass":"new123"}'whatsminercli --config miner-conf.json call set.system.rebootFirmware update requires binary upload and chunked transfer. This CLI does not implement it.
{ "STATUS": "S", "Msg": { "ok": true } }{ "STATUS": "E", "Msg": "Invalid token or salt" }whatsminercli выполняет команды API Whatsminer v3.0.1.
Для set.* автоматически вычисляются ts и token, при необходимости утилита получает salt, а параметры некоторых команд шифрует AES-ECB.
- флаги параметров (взаимоисключающие):
--param VALUE→ скаляр (int/float/bool/строка)--param-json JSON→ структурированный параметр (объект/массив)--param-file FILE.json→ параметр из JSON-файла
whatsminercli --config miner-conf.json get-saltwhatsminercli --config miner-conf.json call get.device.info --param miner# Абсолютная мощность (Вт)
whatsminercli --config miner-conf.json call set.miner.power --param 3200
# Лимит мощности (Вт)
whatsminercli --config miner-conf.json call set.miner.power_limit --param 3300
# Режим мощности (0=Нормальный, 1=Энергосбережение, 2=Сон)
whatsminercli --config miner-conf.json call set.miner.power_mode --param 1
# Процент мощности (0–100%)
whatsminercli --config miner-conf.json call set.miner.power_percent --param 85whatsminercli --config miner-conf.json call set.miner.fan_speed --param 4800whatsminercli --config miner-conf.json call set.miner.freq --param 580whatsminercli --config miner-conf.json call set.system.rebootwhatsminercli --config miner-conf.json call set.miner.pools --param-file pools.jsonpools.json:
{
"pools": [
{ "url": "stratum+tcp://pool1.example.com:3333", "user": "wallet.worker1", "pass": "x" },
{ "url": "stratum+tcp://pool2.example.com:3333", "user": "wallet.worker2", "pass": "x" }
]
}whatsminercli --config miner-conf.json call set.user.change_passwd --param-json '{"old_pass":"passw0rd","new_pass":"new123"}'Проект распространяется по лицензии Apache License 2.0. См. LICENSE.
Мы используем Python Community Code of Conduct. См. CODE_OF_CONDUCT.md.
- ✅ Метаданные пакета в
pyproject.toml(имя, версия, описание, лицензия, classifiers). - ✅
README.mdкак long description и корректное отображение на PyPI. - ✅ Файлы
LICENSEиCODE_OF_CONDUCT.mdдобавлены в репозиторий. - ✅ Уникальное имя проекта на PyPI и повышение версии для каждого релиза.
- ✅ Сборка и проверка дистрибутива:
python -m buildиtwine check dist/*. - ✅ Сначала выгрузка в TestPyPI:
python -m twine upload --repository testpypi dist/*. - ✅ Затем публикация в PyPI:
python -m twine upload dist/*. - ✅ Заполнить
project.urls(Homepage/Repository/Issues) для поиска и доверия.
set.system.update_firmware не реализовано в данной версии CLI, т.к. требует передачи бинарного файла по частям.
Note: Only for Whatsminer API v3.0.1. Version 2.5 is incompatible.