Идея уйти от сетевых тарифов и запитать майнинг напрямую от солнца выглядит красиво только на бумаге в презентациях продавцов оборудования. В реальности, когда ты пытаешься подружить импульсный блок питания асика, который привык жрать стабильный промышленный синус, с фотоэлектрической системой, начинается жесткий инженерный цинизм.
Полгода назад на одном из объектов мы умудрились положить три дорогих китайских инвертора за неделю, прежде чем до конца осознали, насколько сильно электроника майнера ненавидит автономную генерацию.
Архитектурные грабли: Off-grid против гибрида
Если вы думаете поставить панели, контроллер заряда, пару аккумов и сразу воткнуть туда условный Antminer S21 — у меня для вас плохие новости. Асик — это не домашний холодильник. Это абсолютно статическая, тупая нагрузка, которая требует, например, 3.5 кВт здесь и сейчас, непрерывно, 24/7. Солнце так не умеет. Его кривая генерации — это колокол, который постоянно режется на куски пролетающими облаками. В этот момент генерация PV падает на 80% за пару секунд.
Полная автономия (Off-grid) без связи с внешней сетью — это чистый мазохизм. Чтобы система жила, вам придется собирать гигантский банк LiFePO4 аккумуляторов. При этом реальный КПД по цепочке «панели — контроллер — АКБ — инвертор — БП асика» просядет где-то до 75–83%. Куча энергии просто уйдет в тепло на этапе преобразования.
Гибридная схема (Grid-tied с буфером) работает адекватнее. Сеть здесь выступает в роли бесконечного демпфера. Пошло солнце — берем из него, пошла туча — инвертор мгновенно (или не очень) добирает дельту из розетки. Тут КПД нормальный, под 95%, потому что идет прямое преобразование DC в AC. Но если розетки нет вообще, вы остаетесь один на один с силовой электроникой.
Что происходит внутри блока питания, когда инвертор начинает «икать»
Родные блоки питания майнеров (взять те же APW12 или APW17) спроектированы под чистый синус с минимальным коэффициентом гармоник (THD < 3%). Большинство бюджетных инверторов, даже если на них написано Pure Sine Wave, под реальной нагрузкой выдают ломаную трапецию.
- Первое, на чем вы споткнетесь — это работа активного корректора коэффициента мощности (APFC) внутри блока питания асика. Алгоритм APFC пытается подстроить потребление тока под форму напряжения. Инвертор в свою очередь пытается выровнять напряжение под нагрузку. Когда они сходятся вместе, их ШИМ-контроллеры начинают раскачивать друг друга. В итоге система уходит в автоколебательный резонанс: инвертор начинает дико выть, асик свистит, а через пару минут силовые ключи на инверторе просто пыхнут от перегрева.
- Вторая проблема — динамический наброс нагрузки. Когда контролька асика дает команду на запуск хэшборд, потребление взлетает с пары сотен ватт до трех-четырех киловатт почти мгновенно. Инвертор не успевает отработать этот скачок, напряжение на выходе падает ниже 180V. На блоке питания срабатывает защита по пониженному напряжению (UVP), асик уходит в ребут. На этапе тестирования мы получали циклический ребут каждые 10 минут, который за пару дней напрочь убивает флеш-память контрольной платы.
Поэтому емкость батарейного буфера должна рассчитываться жестко: E_bat >= P_asic * 0.5 часа. Это тот минимум, который позволит сгладить просадку, пока инвертор переваривает изменение генерации от панелей. А номинал самого инвертора должен быть минимум на 35–50% выше, чем максимальное потребление фермы. Если у вас ферма на 10 кВт, инвертор нужен на 15 кВт, иначе его защита будет вылетать по любому чиху.
Автоматизируем этот зоопарк через RPC и Modbus
Единственный способ не спалить оборудование и не сидеть над ним круглосуточно — это динамически душить хэшрейт асиков в зависимости от того, сколько солнца прилетело на панели.
Ниже рабочий скрипт на Python. Он стучится в инвертор по Modbus TCP (адреса регистров приведены для популярных китайских гибридников типа Deye/Sunways), забирает текущую генерацию PV и через JSON-RPC переключает профили потребления на асиках под управлением кастомных прошивок (Braiins OS или VNISH).
import time
import logging
import requests
from pymodbus.client import ModbusTcpClient
# Настройки логирования (без лишней мишуры)
logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s')
# Config
INVERTER_IP = "192.168.1.50"
INVERTER_PORT = 502
REG_SOLAR_POWER = 40082 # Регистр мощности PV для Deye/Sunways
ASIC_IP = "192.168.1.100"
ASIC_URL = f"http://{ASIC_IP}:4028/api" # Стандартный эндпоинт для кастомных прошивок
SHUTDOWN_THRESHOLD = 1000 # Меньше 1кВт — тушим майнинг
# Профили (сортируем по убыванию, чтобы проще было перебирать)
POWER_PROFILES = [
{"min_watt": 3200, "profile": "Performance_3500W"},
{"min_watt": 2200, "profile": "Balanced_2400W"},
{"min_watt": 1100, "profile": "Eco_1200W"}
]
def get_solar_power():
"""Дергаем инвертор по человечески через pymodbus"""
client = ModbusTcpClient(INVERTER_IP, port=INVERTER_PORT)
try:
if client.connect():
# Читаем 1 регистр (holding register = 3)
res = client.read_holding_registers(REG_SOLAR_POWER, 1, slave=1)
if not res.isError():
return res.registers[0]
logging.error(f"Modbus error: {res}")
except Exception as e:
logging.error(f"Инвертор отвалился: {e}")
finally:
client.close()
return 0
def send_asic_cmd(cmd, param=None):
"""Шлем RPC запрос в асик"""
payload = {"command": cmd}
if param:
payload["parameter"] = param
try:
# Обычно кастомные прошивки (Vnish/Braiins) хавают обычный POST с JSON
r = requests.post(ASIC_URL, json=payload, timeout=3)
if r.status_code == 200:
return r.json()
except Exception as e:
logging.error(f"Запрос к асику {cmd} упал: {e}")
return {}
def main():
logging.info("Скрипт балансировки Solar-Mining запущен.")
last_profile = None
while True:
solar_pwr = get_solar_power()
logging.info(f"Солнце выдает: {solar_pwr}W")
if solar_pwr < SHUTDOWN_THRESHOLD:
if last_profile != "paused":
logging.warning("Солнца мало. Стопаем хэшборды.")
send_asic_cmd("pause")
last_profile = "paused"
else:
# Ищем подходящий профиль под текущую мощность
selected_profile = None
for p in POWER_PROFILES:
if solar_pwr >= p["min_watt"]:
selected_profile = p["profile"]
break
if selected_profile and selected_profile != last_profile:
logging.info(f"Переключаем на профиль: {selected_profile}")
send_asic_cmd("resume")
res = send_asic_cmd("setprofile", param=selected_profile)
# Проверка статуса (для VNISH / Braiins)
if res.get("STATUS", [{}])[0].get("STATUS") == "S":
last_profile = selected_profile
logging.info("Профиль изменен успешно.")
else:
logging.error(f"Асик не принял профиль: {res}")
# 30 сек пауза, чтобы не задрочить контрольку асика частотами
time.sleep(30)
if __name__ == "__main__":
main()Опыт выживания: как собрать систему и не прогореть
Вместо красивых списков из учебников, вот вам сухая выжимка из практики, за которую было заплачено кучей времени и сгоревшего кремния.
- Во-первых, забудьте про высокочастотные (бестрансформаторные) инверторы, если строите чистый off-grid. Нужны тяжелые низкочастотные железки с массивными тороидальными трансформаторами на выходе (типа Victron MultiPlus или тяжелых пром-серий). Они за счет своей индуктивности прощают блокам питания асиков их кривой коэффициент мощности и жесткие броски тока.
- Во-вторых, заземление должно быть раздельным. Хэшборды генерируют колоссальное количество высокочастотных наводок на корпус. Если посадить рамы солнечных панелей, трекеры и стойку с майнерами на один физический контур земли, эти наводки начнут сводить с ума контроллеры заряда панелей (MPPT). В один прекрасный день они просто зависнут в открытом состоянии, выдав на инвертор максимальный вольтаж с панелей.
- В-третьих, обязательно ставьте УЗИП (устройства защиты от импульсных перенапряжений) класса B+C как на стороне постоянного тока от стрингов панелей, так и на переменке после инвертора. Блоки питания майнеров при падении напряжения любят выплевывать в сеть обратные импульсы. Без хорошей защиты инвертор со временем начнет стабильно уходить в ошибку по перегрузке по току (Overcurrent), даже когда нагрузки почти нет.
Реальная экономика: почему классический расчет окупаемости — сказка
Если вы откроете любой калькулятор солнечных систем, вам насчитают окупаемость в районе 3–4 лет. Маркетологи берут общую установленную мощность панелей, умножают на среднее количество солнечных часов в регионе и заявляют, что «розетка» бесплатная. В майнинге эта математика разбивается о суровую реальность неравномерности генерации.
Представим стандартный сетап: массив панелей на 15 кВт и три асика суммарной мощностью 10.5 кВт. Вот как распределяется реальная утилизация энергии в течение суток в идеальный летний день:
| Временной интервал | Генерация PV (средняя) | Потребление фермы | Направление потоков энергии |
|---|---|---|---|
| 00:00 – 06:00 | 0 кВт | 0 кВт (или 10.5 кВт из сети) | Ферма либо простаивает, либо жрет дорогую ночную розетку. Аккумуляторы высаживать нельзя — убьете их за 300 циклов. |
| 06:00 – 09:00 | 3 – 6 кВт | 3.5 кВт (1 асик) | Скрипт автоматизации запускает первый майнер. Остаток генерации идет на вялую зарядку АКБ после ночного саморазряда системы. |
| 09:00 – 15:00 | 12 – 14 кВт | 10.5 кВт (3 асика) | Пик эффективности. Все три аппарата хэшируют на полную. Излишек в 1.5–3.5 кВт дозаряжает буферные батареи. |
| 15:00 – 18:00 | 5 – 8 кВт | 7.0 кВт (2 асика) | Солнце падает. Скрипт тушит один асик, чтобы инвертор не начал высаживать аккумуляторы. |
| 18:00 – 24:00 | 0 – 2 кВт | 0 кВт (или 10.5 кВт из сети) | Полный стоп автономной системы. |
Итого: из 24 часов в сутки ваши асики работают на 100% мощности только около 6 часов. Еще около 6 часов они работают на 30–60% от своей мощности. Остальное время железо просто простаивает и теряет свою актуальность (сложность сети-то растет ежедневно).
Если вы работаете в режиме чистого Off-grid, ваш коэффициент утилизации оборудования (Capacity Factor) падает примерно до 35–40%. Это значит, что срок окупаемости самих асиков увеличивается ровно в 2.5 раза. Железо устареет и превратится в тыкву до того, как отобьет свою покупку.
Малоизвестные «подводные камни» (То, о чем молчат вендоры)
Температурный дрейф панелей и асиков
Майнеры выделяют гигантское количество тепла. Солнечные панели эффективнее всего работают при температуре ячейки в 25°C. На каждые 1°C выше этого значения генерация кремния падает примерно на 0.4%.
Если вы расположите выхлоп горячего воздуха от асиков так, что он будет хотя бы частично затягиваться под массив панелей, вы получите падение генерации на 15–20% на ровном месте. На одном объекте под Краснодаром мы долго не могли понять, почему в полдень генерация проседает ниже расчетной, пока не перенаправили поток от вентиляторов охлаждения фермы в противоположную сторону от крыши с PV-массивом.
Токовые петли в хэшбордах при просадках напряжения
Когда инвертор перегружен и напряжение падает, встроенный DC-DC преобразователь на хэшборде асика пытается удержать заданный чипам вольтаж (например, 0.36V). Для этого он начинает компенсировать падение входного напряжения увеличением входного тока.
Если ваш инвертор выдает высокочастотные пульсации, эти скачки тока начинают выжигать фазы питания (мосфеты) на самой хэшплате. Вы получаете классическую картину: блок питания цел, инвертор выдает ошибку, а на хэшборде пробиты цепи питания и чипы ушли в короткое замыкание.
Итоговый вердикт инженера
Строить автономный майнинг на солнечных панелях имеет смысл только в двух сценариях:
- У вас бесплатное или условно-бесплатное б/у железо прошлого поколения (например, старые Antminer T17/S19, которые не жалко гонять по 8 часов в сутки). Покупать под солнце флагманские гидро-майнеры или топовые S21 — экономическое самоубийство из-за их долгого простоя ночью.
- У вас жесткий гибрид с сетью, где солнце используется исключительно для снижения дневного пика потребления, а ночью ферма переходит на дешевый субсидированный тариф.
Вся остальная романтика про «зеленый майнинг в чистом поле» обычно заканчивается кучей сгоревших транзисторов, замученными аккумуляторами и скриптом автоматизации, который круглосуточно пытается удержать эту шаткую конструкцию от очередного ребута.