В данной статье описывается использование API машины интеллектуального анализа данных (асик майнера).
Предполагаемая аудитория - разработчики программного обеспечения для управления минами.
Использование WhatMinerTools получает привилегии для майнера. Функция удаленного управления пакетами может быть реализована через API.
Выполните следующие действия.
1. Изменение пароля по умолчанию (admin)
2.Включить API
2. Записываемое API
2.1 Обновление реестра
Json:
{
"token":"str", "cmd":"update_pools", "pool1":"str",
"worker1":"str",
"passwd1":"str",
"pool2":"str",
"worker2":"str",
"passwd2":"str",
"pool3":"str",
"worker3":"str",
"passwd3":"str"
}
2.2 Перезапустить битмайнер
Json:
{
"token":"str",
"cmd":"restart_btminer"
}
2.3 Выключить майнер
Эта операция просто останавливает работу и выключает выход питания платы питания. Отключения питания на плате управления не происходит.
Json:
{
"token":"str",
"cmd":"power_off",
"respbefore":"str" //"false"/"true"
}
2.4 Включить майнер
Эта операция просто запускает работу и включает выход питания платы питания.
Json:
{
"token":"str",
"cmd":"power_on",
}
2.5 Управление led
Recovery to automatic control:
Json:
{
"token":"str",
"cmd":"set_led",
"param":"auto"
}
{
"token":"str",
"cmd":"set_led",
"color":"str", //red green
"period":inter, //flash cycle ms
"duration":inter, //led on time in cycle(ms)
"start":inter //led on time offset in cycle(ms)
}
2.6 Включить режим power
Json:
{
"token":"str",
"cmd":"set_low_power"
}
2.7 Обновление ПО
Upgrade flow:
Client -> whatsminer(text flow): "update_firmware" Json:
{
"token":"str",
"cmd":"update_firmware"
}
Whatsminer -> client(text flow): "ready" Json:
{ "STATUS":"S",
"When":1594179080,
"Code":131,"Msg":"ready",
"Description":"whatsminer v1.3"
}
Client -> whatsminer(binary flow): file_size(4Byte) file_data
file_size: size of upgrade file, send integer to stream as little endian. file_data: file binary flow
Проверьте обновление по значению «Firmware Version», возвращаемому сводкой. Все взаимодействия выполняются в одном TCP-соединении.
2.8 Обновление системы
Json:
{
"token":"str",
"cmd":"reboot"
}
2.9 Восстановление заводских настроек
Json:
{
"token":"str",
"cmd":"factory_reset"
}
2.10 Изменение пароля учетной записи администратора
Максимальная длина пароля - 8 байт
Обратите внимание: вы должны вернуть token form whatsminer для зашифрованной передачи
Json:
{
"token":"str",
"cmd":"update_pwd",
"old":"str", //use letter,mumber,underline
2.11 Модификация конфигурации сети
Обратите внимание: после изменения конфигурации whatsminer машина будет перезагружена.
Json:
{
"token":"str",
"cmd":"net_config",
"param":"dhcp"
}
Json:
{
"token":"str",
"cmd":"net_config",
"ip":"str",
"mask":"str",
"gate":"str",
"dns":"str", //"114.114.114.114 192.168.0.1" Divide by a space "host":"str"
}
2.13 Загрузка логов
Download flow:
Client -> whatsminer(text flow): Json:
{
"token":"str",
"cmd":"download_logs"
}
Whatsminer -> client(text flow):
Json:
{
"STATUS":"S",
"When":1603280777,
"Code":131,
"Msg":{"logfilelen":"str"},
"Description":"whatsminer v1.3"
}
Whatsminer -> client(binariy flow):
Whatsminer отправляет содержимое файла после 10 мс задержки.
2.14 Set target freq
{
"cmd":"set_target_freq",
"percent": "str", //range: -10 ~ 100
"token": "str"
}
2.15 Enable btminer fast boot
{
"cmd": "enable_btminer_fast_boot",
"token": "str"
}
2.16 Disable btminer fast boot
{
"cmd": "disable_btminer_fast_boot",
"token": "str"
}
2.17 Enable web pools
{
"cmd": "enable_web_pools",
"token": "str"
}
2.18 Set hostname
{
"cmd": "set_hostname", "hostname": "str",
"token": "str"
}
2.19 Set zone
{
"cmd": "set_zone",
"timezone": "CST-8",
"zonename": "Asia/Shanghai",
"token": "str"
}
2.20 Load log
{
"cmd": "load_log",
"ip": "str",
"port": "str",
"proto": "str", //tcp/udp
"token": "str"
}
2.21 Set power pct
{
"cmd": "set_power_pct",
"percent": "str", //range: 0 ~ 100
"token": "str"
}
2.22 Pre power on
{
"cmd": "pre_power_on",
"complete": "str", //true/false
"msg": "str", //"wait for adjust temp"/"adjust complete"/"adjust continue"
"token": "str"
}
Майнер можно разогреть «pre_power_on» перед «включением питания», чтобы машина могла быстро войти в состояние полной мощности при использовании «включения питания». Эту команду также можно использовать для запроса состояния предварительного включения питания.
3. Читаемый API.
3.1 Сводка API
Содержит код ошибки, скорость вентилятора, информацию о питании и т.д.
Json:
{
"cmd":"summary"
}
[MHS av] = > 67761775.18 Средняя частота хэширования майнера (MHS)
[Fan Speed In] => 6060 Скорость вентилятора на выходе воздуха (об/мин)
[Fan Speed Out] => 6000 Скорость вентилятора на входе воздуха (об/мин)
[Power] => 3470 Входная мощность (Вт)
[Uptime] => 91051 Время работы системы (в секунду)
[Power Fanspeed] => 9060 Питание скорости вентилятора
[Error Code Count] => 1 Код ошибки
[Error Code 0] => 250 Значение кода ошибки
[Power Mode] => Low Режим питания (низкий/нормальный/высокий)
[Firmware Version] => '20200207.23.1' Версия прошивки
[MAC] => C4:05:08:00:02:3B MAC адрес сети
[Factory GHS] => 44397 Заводская частота хэширования (GHS)
3.2 API пулы
Содержит информацию о пулах майнера
Json:
{
"cmd":"pools"
}
[POOL] => 0
[URL] => stratum+tcp://btc.ss.poolin.com:443 Адрес и порт пула
[Status] => Alive статус пула
[Priority] => 0 Приоритет (0 - наивысший)
[Accepted] => 4615 Принятые случаи пула
[Accepted] => 4615 НЕ Принятые случаи пула
[User] => microbtinit Наименование майнера
[Last Share Time] => 1587278148 Время последней отправки
[Stratum Active] => true Статус слоя пула
[Stratum URL] => btc-vip-3dcoa7jxu.ss.poolin.com Адрес пула
[Stratum Difficulty] => 262144.00000000 Сложность пула
[Pool Rejected%] => 0.0667 процент отказа пула
[Current Block Height] => 626663 Текущая высота блокировки
[Current Block Version] => 536870912 Текущая версия блокировки
3.3 API edevs/devs
Содержит информацию для каждой платы.
Json:
{
"cmd":"edevs"
}
{
"cmd":"devs"
}
[Slot] => 0 Номер слота для каждой хэш платы
[Temperature] => 71.50 Температура платы на выходе воздуха (℃)
[Chip Frequency] => 608 Средняя частота чипсов в хэш-плате (МГц)
[MHS av] => 30991182.21 Средняя частота хэширования хэш-платы (MHS)
[PCB SN] => Z5M1ES94100115K90371 Серийный номер платы
3.4 API devdetails
Json:
{
"cmd":"devdetails"
}
[DEVDETAILS0] =>
[Model] => M20SV10 Тип майнера
3.5 API get psu
Содержит информацию питания.
Json:
{
"cmd":"get_psu"
}
3.6 API get version
Get whatsminer api version
Json:
{
"cmd":"get_version"
}
3.7 Get token
You must use plaintext,and whatsminer will return plaintext.
Json:
{
"cmd":"get_token"
}
Return:
{
"STATUS":"string",
"When":12345678, //inter
"Code":133,
"Msg":{"time":"str","salt":"str","newsalt":"str"},
"Description":"string",
}
3.8 Статус
Get btminer status and firmware version
Json:
{
"cmd":"status"
}
Return:
{
"btmineroff":"str", //"true"/"false"
"Firmware Version":"str"
}
Напоминание:whatsminer поддерживает 16 IP-клиентов один IP-адрес может получить 32 токенов, продолжительность токенов составляет 30 мин.
3.9 API devdetails
Json:
{
"cmd":"devdetails"
}
[DEVDETAILS0] =>
3.9 Get miner info
Json:
{
"cmd":"get_miner_info",
"info":"ip,proto,netmask,gateway,dns,hostname,mac,ledstat"
}
В поле «info» можно выбрать поля, которые требуется вернуть.
Return:
{ "STATUS":"S",
"When":1618212903,
"Code":131,
"Msg":{"netmask":"255.255.255.0","ledstat":"auto","gateway":"192.168.2.1"},
"Description":"whatsminer v1.4.0"
}
API:
client -> whatsminer:"get_token"
whatsminer -> client:$time $salt $newsalt
e.g.:"1592555626 BQ5hoXV9 jbzkfQls"
$time $salt $newsalt are separated by space
time: timestamp(sec)
(Epoch Time since 1970-01-01 00:00:00 UTC)
salt:
new_slat: new salt for sign
Метод вычисления маркера:получить token форму whatsminer машины: время соль newsalt.
1. Вычислите ключ, используя пароль администратора и salt.
2.timesec - это последние четыре символа времени.
key = md5(salt + admin_password) sign = md5(newsalt + key + timesec)
The reference code in Ubuntu:
Во-первых, получить значения whatsminer: $time $salt $newsalt.
Ubuntu Shell command:
key = `openssl passwd -1 -salt $salt "${admin_password}"|cut -f 4 -d '$'`
sign=`openssl passwd -1 -salt $newsalt "${key}${time:0-4}"|cut -f 4 -d '$'`
Default user password:admin:admin
The API command can be used for two joins. Eg.
{
"cmd":"summary+pools"
}
4. Others
The whatsminer API TCP port is 4028.
Примечание: Если данные не будут получены в течение 10 секунд после открытия порта, они будут истекать по тайм-ауту и закрываться.
Return MSG :
STATUS="",When="",Code="",Msg="",Description="
" STATUS: E (error) S (success)
When: timestamp
Code: тип сообщения
Description: подробности сообщения
JSON API RETURN format:
{
"STATUS":"string",
"When":12345678, //inter
"Code":133,
"Msg":"string", //string or object
"Description":"string",
}
Message Code:
14 invalid api command or data
23 invalid json message
45 permission denied
131 command OK
132 command error
134 get token message OK
135 check token error
136 token over max times
137 base64 decode error
4.1 API ciphertext
Notice: readable API supports two-way communication plaintext and ciphertext, Writeable API only supports ciphertext.
Encryption algorithm:
Ciphertext = aes256(plaintext),ECB mode Encode text = base64(ciphertext)
Steps as follows:
(1)api_cmd = token,$sign|api_str
(2)enc_str = aes256(api_cmd, $key)
(3)tran_str = base64(enc_str)
api_str is API command plaintext
Generate aeskey step:
(1)Get token from whatsminer: $time $salt $newsalt
(2)Generate key:
key = md5(salt + admin_password) Reference code:
key = `openssl passwd -1 -salt $salt "${admin_password}"` (3)Generate aeskey:
aeskey = sha256($key)
e.g.:
set_led|auto -> token,$sign|set_led|auto ->
ase256("token,sign|set_led|auto", $aeskey) ->
base64(ase256("token,sign|set_led|auto", $aeskey) ) ->
enc|base64(ase256("token,sign|set_led|auto", $aeskey))
Json:
{
"enc":1, //inter "data":"base64 str"
}